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

Ruby/Mechanize应对Let's Encrypt根证书过期OpenSSL 1.0.2报错咨询

你之前的代码报错是因为X509_VERIFY_PARAM_set_flags是OpenSSL原生C接口,Ruby的OpenSSL绑定没有直接暴露该全局方法,也没有提前定义X509_V_FLAG_TRUSTED_FIRST常量,所以会触发未初始化常量的报错。

可通过以下代码实现兼容,全程保留证书校验、无需修改系统信任存储库:

Mechanize 场景适配(你当前使用的框架)

require 'mechanize'
require 'openssl'

agent = Mechanize.new
# 0x80000 对应X509_V_FLAG_TRUSTED_FIRST的固定常量值
agent.ssl_config.verify_flags |= 0x80000
# 强制开启证书校验,无需设置为VERIFY_NONE
agent.verify_mode = OpenSSL::SSL::VERIFY_PEER

原生Net::HTTP 场景适配

如果使用Ruby内置的Net::HTTP,可使用以下配置:

require 'net/http'
require 'openssl'

uri = URI('https://目标站点域名')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
# 添加TRUSTED_FIRST标识,优先信任系统内置的有效ISRG根证书
http.verify_flags |= 0x80000

兼容逻辑说明

  • 0x80000是X509_V_FLAG_TRUSTED_FIRST的固定数值,所有OpenSSL 1.0.2及以上版本均支持该标识,不需要依赖Ruby绑定暴露对应常量
  • 开启该标识后,OpenSSL会优先匹配系统信任库中已存在的、有效的ISRG Root X1(Let's Encrypt新根证书),忽略已过期的DST Root CA X3旧根证书的校验错误
  • 全程保持证书完整性、合法性校验,无安全风险,符合合规要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:36:04