ift*_*itz 6 ruby ssl openssl ruby-on-rails httpi
根据这个页面,我可以看到 HTTPI 在哪里根据OpenSSL::X509::DEFAULT_CERT_FILE常量寻找我的 SSL 证书:
2.1.5 :008 > OpenSSL::X509::DEFAULT_CERT_FILE
=> "/usr/lib/ssl/cert.pem"
Run Code Online (Sandbox Code Playgroud)
我的证书在别处,但该页面说我可以使用环境变量更改 Ruby 查看的路径SSL_CERT_FILE。我在 .bashrc 中做到了:
export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
Run Code Online (Sandbox Code Playgroud)
Rails 找到环境变量:
2.1.5 :007 > ENV['SSL_CERT_FILE']
=> "/etc/ssl/certs/ca-certificates.crt"
Run Code Online (Sandbox Code Playgroud)
但这对 OpenSSL 常量没有影响:
2.1.5 :008 > OpenSSL::X509::DEFAULT_CERT_FILE
=> "/usr/lib/ssl/cert.pem"
Run Code Online (Sandbox Code Playgroud)
那个页面设置的效果有问题SSL_CERT_FILE吗?或者常量永远不会改变并且它会影响其他一些设置?最终,没有找到证书,所以我需要知道它是什么/如何检查/如何设置它。
一等奖是一种类似的方法,默认设置由环境变量设置,因为我不想硬编码证书的路径。
我不知道 ruby 部分,但根据我对 OpenSSL 代码的经验,我不认为设置环境 SSL_CERT_FILE 会更改 DEFAULT_CERT_FILE 的内容。但它仍然会改变 OpenSSL 查找证书的位置:如果给出了 SSL_CERT_FILE,它将采用该值,否则采用 DEFAULT_CERT_FILE 中的值。这就是 OpenSSL 内部的工作原理。