gitlab 升级后后台报错OpenSSL::Cipher::CipherError ():

在更新 GitLab 至 13.8.8 版本后,管理员尝试禁用用户注册时遇到 OpenSSL::Cipher::CipherError。通过运行一系列 GitLab Rails 命令,如更新 runners_registration_token_encrypted 和 encrypted_ci_jwt_signing_key 为 nil,然后保存设置,成功解决了报错问题。

gitlab 升级到13.8.8之后,管理员设置不可注册的操作报错

Processing by Admin::ApplicationSettingsController#general as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "application_setting"=>{"signup_enabled"=>"0", "require_admin_approval_after_user_signup"=>"0", "send_user_confirmation_email"=>"0", "minimum_password_length"=>"[FILTERED]", "domain_allowlist_raw"=>"", "domain_denylist_enabled"=>"0", "domain_denylist_raw"=>"", "email_restrictions_enabled"=>"0", "email_restrictions"=>"", "after_sign_up_text"=>""}, "denylist_type"=>"raw"}
Started GET "/-/metrics" for 127.0.0.1 at 2022-05-11 03:58:32 +0000
Processing by MetricsController#index as HTML
Completed 200 OK in 48ms (Views: 0.5ms | Elasticsearch: 0.0ms | Allocations: 3647)
Completed 500 Internal Server Error in 362ms (ActiveRecord: 134.2ms | Elasticsearch: 0.0ms | Allocations: 99107)
  
OpenSSL::Cipher::CipherError ():
  
app/services/application_settings/update_service.rb:
在更新路径后仍然遇到 `libssl.so.3` 共享库加载错误,通常是由于系统未能正确识别或加载新的库路径,或者库文件本身并未被正确安装或链接。以下是一些深入排查和解决此类问题的方法。 ### 1. 确认 `libssl.so.3` 是否已正确安装 首先,应确认系统中是否已经安装了包含 `libssl.so.3` 的 OpenSSL 库。可以通过以下命令查找该文件: ```bash find / -name libssl.so.3 2>/dev/null ``` 如果没有找到该文件,则说明 OpenSSL 3.x 的运行库尚未安装。根据不同的 Linux 发行版,使用对应的包管理器进行安装: - Debian/Ubuntu: ```bash sudo apt update sudo apt install libssl3 ``` - Red Hat/CentOS/Fedora: ```bash sudo dnf install openssl-libs ``` - Arch Linux: ```bash sudo pacman -S openssl ``` 安装完成后再次查找 `libssl.so.3` 是否存在 [^1]。 ### 2. 检查 `LD_LIBRARY_PATH` 是否已包含库路径 如果 `libssl.so.3` 已经存在,但系统仍然无法加载,可能是因为其所在目录未被包含在动态链接器的搜索路径中。可以使用以下命令查看当前的库搜索路径: ```bash echo $LD_LIBRARY_PATH ``` 若未包含 `libssl.so.3` 所在目录(如 `/usr/local/lib` 或 `/opt/openssl/lib`),则需要将其添加到 `LD_LIBRARY_PATH`: ```bash export LD_LIBRARY_PATH=/path/to/openssl/lib:$LD_LIBRARY_PATH ``` 为确保该设置在系统重启后依然有效,可将上述命令写入 shell 的配置文件中,例如 `~/.bashrc` 或 `~/.zshrc` [^1]。 ### 3. 更新动态链接器缓存 即使库路径已正确设置,系统也可能未将其纳入动态链接器缓存。此时应运行以下命令更新缓存: ```bash sudo ldconfig ``` 该命令会重新扫描所有库路径(包括 `/etc/ld.so.conf.d/` 中定义的路径),并生成新的缓存文件,确保程序能够正确加载所需的共享库 。 ### 4. 验证应用程序实际链接的库版本 使用 `ldd` 命令可以查看特定应用程序实际链接的 `libssl` 库路径和版本: ```bash ldd /path/to/your/application | grep libssl ``` 如果显示的是旧版本(如 `libssl.so.1.1`),说明程序并未链接到 OpenSSL 3.x 的库。此时应检查程序编译时使用的库路径,确保链接器使用的是正确的 OpenSSL 安装路径。 ### 5. 检查是否存在多个 OpenSSL 安装版本 系统中可能存在多个 OpenSSL 安装版本,导致运行时加载错误。例如,系统默认使用 `/usr/lib/x86_64-linux-gnu/libssl.so.3`,而用户可能手动安装了另一个版本在 `/usr/local/openssl/lib/`。 可以通过以下命令查看当前系统默认使用的 OpenSSL 版本: ```bash openssl version ``` 如果需要使用特定版本的 OpenSSL,建议通过源码编译安装,并在编译应用程序时指定其路径: ```bash ./configure --with-ssl=/usr/local/openssl ``` 或者在编译命令中显式指定链接库路径: ```bash gcc -o myapp myapp.c -L/usr/local/openssl/lib -lssl -lcrypto ``` ### 示例:验证并修复 OpenSSL 库加载问题 ```bash # 查找 libssl.so.3 文件是否存在 find / -name libssl.so.3 2>/dev/null # 假设文件位于 /usr/local/openssl/lib/ # 添加该路径到 LD_LIBRARY_PATH export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH # 更新动态链接器缓存 sudo ldconfig # 验证程序是否成功链接到 libssl.so.3 ldd /path/to/your/application | grep libssl ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZH_CS

随缘吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值