6ft*_*Dan 3 ruby windows openssl ssl-certificate x509certificate
我已经搜索了高低,以获得答案.很多人都有自己的答案.他们都没有为我工作.我会提供这种情况.
所以我想访问twitter并使用net:HTTP的post函数我得到这个错误.
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
Run Code Online (Sandbox Code Playgroud)
是的我知道每个人都得到这个消息.
这是我找到的可行解决方案.
第一; 手动设置证书文件:
#! /usr/bin/env ruby
require 'net/https'
require 'uri'
uri = URI.parse(ARGV[0] || 'https://localhost/')
http = Net::HTTP.new(uri.host, uri.port)
if uri.scheme == "https"
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.ca_file = File.join(File.dirname(__FILE__), "cacert.pem")
end
http.start {
http.request_get(uri.path) {|res|
print res.body
}
}
Run Code Online (Sandbox Code Playgroud)
这是由Ariejan de Vroom在此链接提供的http://blog.kabisa.nl/2009/12/04/ruby-and-ssl-certificate-validation/
许多人对此给出了类似的答案.这不适合我.
然后我发现了一些让我走上正确道路的东西.这家伙MislavMarohnić http://mislav.uniqpath.com/2013/07/ruby-openssl/钉关注的区域.它与OpenSSL :: X509 :: DEFAULT_CERT_FILE和OpenSSL :: X509 :: DEFAULT_CERT_DIR有关.结果通过它的源代码硬编码到我的Ruby 1.9.3中.Mislav给出了他的工作:
require 'https'
http = Net::HTTP.new('example.com', 443)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.cert_store = OpenSSL::X509::Store.new
http.cert_store.set_default_paths
http.cert_store.add_file('/path/to/cacert.pem')
# ...or:
cert = OpenSSL::X509::Certificate.new(File.read('mycert.pem'))
http.cert_store.add_cert(cert)
Run Code Online (Sandbox Code Playgroud)
我涉及到这个,我总是会得到这个错误
OpenSSL::X509::StoreError: cert already in hash table
Run Code Online (Sandbox Code Playgroud)
Bah欺骗和所有那些东西!
我还应该提一下,他已经编写了一个脚本,可以帮助调试正在发生的事情.它可能对你有所帮助,但不是我的情况.链接在他的页面上.
哦耶.我也定了
ENV['SSL_CERT_FILE']
ENV['SSL_CERT_DIR']
Run Code Online (Sandbox Code Playgroud)
在我的ruby代码中没有成功.
然后我开始在Windows中通过开始 - > 控制面板 - > 系统 - > 高级系统设置 - > 高级(选项卡) - > 环境变量 - >系统变量新设置环境变量,并添加SSL_CERT_DIR和SSL_CERT_FILE.这也不起作用.
并且认证的宝石对我不起作用... https://github.com/stevegraham/certified
所以我现在将为您提供所有Windows 7用户的黑客答案.
所以我挖了一下,基本上盯着证书的硬编码路径.在命令行输入
ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE'
Run Code Online (Sandbox Code Playgroud)
我得到以下......
c:/Users/Luis/Code/openknapsack/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0k/ssl/cert.pem
Run Code Online (Sandbox Code Playgroud)
所以我的解决方案是首先从http://curl.haxx.se/ca/cacert.pem下载cacert.pem 到c:\.然后打开Windows控制面板 - > 管理工具 - > Windows PowerShell模块.然后我开始输入:
cd \
cd users
mkdir Luis
cd Luis
mkdir Code
cd Code
mkdir openknapsack
cd openknapsack
mkdir knap-build
cd knap-build
mkdir var
cd var
mkdir knapsack
cd knapsack
mkdir software
cd software
mkdir x86-windows
cd x86-windows
mkir openssl
cd openssl
mkdir 1.0.0k
cd 1.0.0k
mkdir ssl
cd ssl
cp c:\cacert.pem .\cert.pem
Run Code Online (Sandbox Code Playgroud)
现在一切正常!是的,这是一个廉价的黑客,它是丑陋的.但现在你和我都可以回到做严肃的编码而不用担心讨厌的问题.
我知道这不是一个很好的修复,但它是唯一对我有用的东西,也应该适合你.
如果有人想写一个PowerShell脚本来自动将cert文件安装到这个目录中,那么你可以更轻松地将你的Ruby项目部署到Windows 7.只是一个想法.
顺便说一句,您可以在需要时为任何操作系统复制此过程.只需找到cert文件所属的路径:
ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE'
Run Code Online (Sandbox Code Playgroud)
并确保重命名文件,因为它出现在输出中!
| 归档时间: |
|
| 查看次数: |
3786 次 |
| 最近记录: |