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

如何通过OpenSSL在Ruby的Net::HTTP中使用CloudHSM

使用CloudHSM为Ruby的Net::HTTP提供SSL证书与私钥

我明白你在Ruby里用CloudHSM做Net::HTTP SSL连接的痛点——相关文档确实少得可怜。不过你已经做了最关键的准备工作:导入凭证+配置OpenSSL引擎,接下来只需要让Ruby通过引擎对接HSM就行,下面是具体的实现方案:

1. 加载CloudHSM的OpenSSL引擎

首先要在Ruby中初始化并加载CloudHSM对应的OpenSSL引擎,通常CloudHSM的引擎名称是cloudhsm(如果你的配置不同,替换成实际名称):

require 'openssl'
require 'net/http'

# 加载并初始化CloudHSM引擎
engine = OpenSSL::Engine.by_id('cloudhsm')
engine.init

2. 从HSM中获取私钥和证书

接下来,你需要通过密钥别名(导入CloudHSM时设置的名称)来获取凭证,而不是读取本地文件:

# 替换为你在CloudHSM中设置的私钥别名
private_key = OpenSSL::PKey.read(engine.load_private_key('your-private-key-alias'))

# 替换为你在CloudHSM中设置的证书别名
certificate = OpenSSL::X509::Certificate.new(engine.load_certificate('your-certificate-alias'))

3. 修改Net::HTTP连接代码

把原来从文件加载凭证的逻辑替换成上面从HSM获取的对象,完整的连接示例如下:

require 'openssl'
require 'net/http'

# 初始化CloudHSM引擎
engine = OpenSSL::Engine.by_id('cloudhsm')
engine.init

# 从HSM加载凭证
private_key = OpenSSL::PKey.read(engine.load_private_key('your-private-key-alias'))
certificate = OpenSSL::X509::Certificate.new(engine.load_certificate('your-certificate-alias'))

# 建立SSL连接
uri = URI('https://your-target-api.com')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.cert = certificate
http.key = private_key
# 保留服务器证书验证(生产环境建议开启)
http.verify_mode = OpenSSL::SSL::VERIFY_PEER

# 发送请求并处理响应
response = http.get(uri.path)
puts response.body

关键注意事项

  • 确保Ruby进程有访问CloudHSM的权限:通常需要将运行进程的用户加入对应权限组,或者配置好CLOUDHSM_CFG_PATH等环境变量指向CloudHSM配置文件。
  • 先验证引擎可用性:如果遇到加载失败,先在命令行执行openssl engine -t cloudhsm确认引擎能正常调用,排除底层配置问题。
  • 别名要完全匹配:私钥和证书的别名必须和导入CloudHSM时的名称完全一致,大小写敏感。

内容的提问来源于stack exchange,提问作者Kyle Oliveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:20:08