You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译自定义OpenSSL时出现tls_process_server_certificate证书验证失败错误

自定义编译OpenSSL证书验证失败的排查与解决

问题背景

使用系统全局OpenSSL(1.1.1f)时,应用可通过第三方WebSocket代码正常建立SSL连接;但链接自行编译的同版本(1.1.1f)或稳定版(1.1.1t)OpenSSL时,出现证书验证失败错误。编译命令为:

../config --prefix=/linux shared -fPIC
make
sudo make install_sw

排查与解决步骤

  • 检查自定义OpenSSL的默认证书路径
    系统OpenSSL默认读取系统证书存储(如/etc/ssl/certs/),但自定义编译的OpenSSL会默认使用--prefix指定路径下的ssl目录(即/linux/ssl)。运行以下命令确认:
/linux/bin/openssl version -d

如果输出的目录下没有系统证书链,就会导致验证失败。解决方式二选一:

  1. 重新编译OpenSSL时指定系统证书路径:
    ../config --prefix=/linux shared -fPIC --openssldir=/etc/ssl
    make clean && make && sudo make install_sw
    
  2. 将系统证书目录内容复制到自定义OpenSSL的证书目录,并修复权限:
    cp -r /etc/ssl/certs/ /linux/ssl/
    chmod -R 755 /linux/ssl/certs/
    
  • 显式配置应用的证书验证路径
    第三方WebSocket库可能依赖OpenSSL默认路径,若自定义路径与系统不同,需在代码中显式指定CA证书:

    • 使用OpenSSL API时,调用SSL_CTX_set_default_verify_paths(ctx)让库自动查找系统默认证书;或直接指定证书文件:
      SSL_CTX_load_verify_locations(ctx, "/etc/ssl/certs/ca-certificates.crt", NULL);
      
    • 检查WebSocket库的配置选项,确认是否有设置CA证书路径的参数,确保指向有效证书文件。
  • 验证自定义OpenSSL的证书链有效性
    用自定义OpenSSL命令测试目标服务器的证书验证:

/linux/bin/openssl s_client -connect your_ws_host:port

查看输出中的Verify return code,若为0 (ok)则正常,否则根据错误提示排查。同时运行c_rehash生成证书哈希链接(确保OpenSSL能找到证书链):

/linux/bin/c_rehash /linux/ssl/certs/
  • 确认编译与安装的完整性
    make install_sw仅安装库和头文件,不会生成默认证书目录结构。若其他项目是手动指定了证书路径,当前项目未配置则会出错。可以改用make install安装完整配置(注意不要覆盖系统OpenSSL),或手动创建/linux/ssl/certs/目录并复制证书。另外,用ldd your_app检查应用是否确实链接了自定义OpenSSL库,避免误链接系统版本。

内容的提问来源于stack exchange,提问作者Jay Evans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:56:54