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

Ruby on Rails开发环境下如何调用HTTPS第三方API?

解决开发阶段调用HTTPS API的证书验证失败问题

嘿,这个SSL证书验证失败的问题在本地开发时真的超常见!你碰到的SSL_connect returned=1 errno=0 state=error: certificate verify failed错误,本质是Ruby的Net::HTTP默认会严格校验SSL证书,而本地开发环境没配置好信任目标API的证书。下面给你几个开发阶段能用的方案:

临时禁用证书验证(仅开发调试用!)

如果只是想快速跑通代码调试,你可以临时关闭SSL证书验证,但绝对绝对不要在生产环境这么做——这会直接把你的请求暴露给中间人攻击的风险。修改后的代码如下:

require 'net/http'
require 'net/https'
http = Net::HTTP.new("mydomain.com", 443)
http.use_ssl = true
# 新增这一行关闭证书验证,仅开发用!
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
resp, result = http.get("/secure/example")
p result

规范方案:配置信任证书(推荐)

要是想保持安全校验的同时解决问题,有两种靠谱的做法:

1. 指定第三方API的CA证书

如果这个API用的是自签名证书或者私有CA颁发的证书,你可以把对应的CA证书文件(比如my_api_ca.pem)放到项目目录里,然后在代码里指定证书路径:

require 'net/http'
require 'net/https'
http = Net::HTTP.new("mydomain.com", 443)
http.use_ssl = true
# 替换成你的CA证书实际路径
http.ca_file = "./my_api_ca.pem"
resp, result = http.get("/secure/example")
p result

2. 更新Ruby的根证书存储

如果目标API是公开的正规服务,那大概率是你的Ruby环境自带的根证书过期了。可以通过certifi gem来更新根证书库:

先安装gem:

gem install certifi

然后在代码里指定更新后的证书路径:

require 'net/http'
require 'net/https'
require 'certifi'
http = Net::HTTP.new("mydomain.com", 443)
http.use_ssl = true
# 使用certifi提供的最新根证书
http.ca_file = Certifi.where
resp, result = http.get("/secure/example")
p result

重要提醒

一定要记住:关闭证书验证只是开发时的临时手段,生产环境必须启用完整的SSL证书校验,不然会带来严重的安全漏洞。如果是正规公开API,优先用更新根证书的方式解决问题哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:32:10