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

Ruby中使用HTTP gem全局添加SSL证书(不替换原有证书)的方案

解决HTTP gem全局添加自定义CA证书的问题

以下是几个可行的全局解决方案,既让目标API能正常调用,又不影响其他HTTPS服务:

1. 给HTTP gem设置全局默认SSL上下文

在程序启动阶段执行一次配置,让所有HTTP gem请求自动使用包含自定义证书的SSL上下文:

# 自定义证书路径
custom_cert_path = 'ssl_certificates/ca_certificate.pem'

# 创建包含系统默认证书+自定义证书的证书存储
global_store = OpenSSL::X509::Store.new
global_store.set_default_paths
global_store.add_file(custom_cert_path)

# 初始化全局SSL上下文
global_ssl_ctx = OpenSSL::SSL::SSLContext.new.tap do |ctx|
  ctx.set_params(cert_store: global_store)
end

# 配置HTTP gem全局默认选项
HTTP.default_options.update(ssl_context: global_ssl_ctx)

# 后续所有请求无需再单独指定ssl_context
HTTP.post("https://your-api-server.com")
HTTP.post("https://google.com")

2. 将自定义证书添加到系统默认CA信任库(全局生效)

如果希望所有Ruby程序甚至系统内其他应用都能信任该证书,可直接将证书加入系统CA信任列表:

Linux系统

  1. 将自定义证书文件复制到系统证书目录:
    sudo cp ssl_certificates/ca_certificate.pem /usr/local/share/ca-certificates/
    
  2. 更新系统证书缓存:
    sudo update-ca-certificates
    

macOS系统

通过命令行将证书导入系统钥匙串并设置信任:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ssl_certificates/ca_certificate.pem

完成后系统所有依赖OpenSSL的程序都会自动信任该证书,无需修改代码。

3. 使用SSL_CERT_DIR环境变量补充证书

无需修改代码或系统证书,通过环境变量让OpenSSL额外加载指定目录的证书:

  1. 创建自定义证书目录,比如./custom_certs
  2. 将自定义证书放入该目录,并用c_rehash工具生成哈希链接(确保OpenSSL能识别):
    c_rehash ./custom_certs
    
  3. 启动Ruby程序时设置环境变量:
    SSL_CERT_DIR=./custom_certs ruby your_app.rb
    

OpenSSL会同时加载系统默认证书和SSL_CERT_DIR目录下的证书,既不会替换默认证书,又能让目标API的证书被信任。


内容的提问来源于stack exchange,提问作者Don Giulio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:25:25