Rails本地开发模式下Geocoder因证书过期连接报错如何解决
问题根源
该报错由本地环境过旧的OpenSSL版本导致:OpenSSL 0.9.8默认的证书信任库不包含新版ISRG根证书,且Ruby调用的OpenSSL组件不会读取系统钥匙串中手动更新的证书,Geocoder请求地理编码服务接口时SSL校验失败。
步骤1:安装新版OpenSSL与可信证书包
通过Homebrew安装兼容旧系统的新版OpenSSL和CA根证书集合:
brew install openssl ca-certificates
安装完成后执行如下命令获取证书文件路径,默认路径为/usr/local/etc/openssl/cert.pem:
echo "$(brew --prefix openssl)/cert.pem"
步骤2:给Geocoder指定CA证书路径
在Rails项目中新增config/initializers/geocoder.rb初始化文件,添加SSL证书配置即可,原有Geocoder的其他配置保留即可:
Geocoder.configure do |config| # 其他原有配置不变 config.ssl_options = { ca_file: "/usr/local/etc/openssl/cert.pem" } end
配置完成后重启Rails服务,即可解决证书校验失败问题。
可选:全局配置Ruby OpenSSL证书
如果你的其他Ruby gem也有同类SSL报错,可以在shell的环境变量配置文件(~/.bash_profile或~/.zshrc)中添加如下配置,全局指定可信证书路径:
export SSL_CERT_FILE=/usr/local/etc/openssl/cert.pem export SSL_CERT_DIR=/usr/local/etc/openssl/certs
添加完成后执行source ~/.bash_profile(对应你使用的shell配置文件)生效即可。
临时调试方案(仅本地开发可用,禁止生产环境使用)
如果仅需要临时调试,可临时关闭Geocoder的SSL校验:
Geocoder.configure do |config| config.ssl_verify = false end
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

