我尝试通过https连接使用open-uri访问文件.不幸的是,证书有些错误,我得到证书验证失败错误.我无能为力,所以我不得不绕过验证.
我找到了这个答案
我不想/不能改变服务器上的oen-uri.rb,而且我正在运行Ruby 1.8.6.
如何更改验证模式?或者更确切地说,我在哪里更改它?
我在哪里可以放这个?
if target.class == URI::HTTPS
require 'net/https'
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
store = OpenSSL::X509::Store.new
store.set_default_paths
http.cert_store = store
end
Run Code Online (Sandbox Code Playgroud)
或者肮脏的黑客:我可以把它放在哪里?
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
Run Code Online (Sandbox Code Playgroud)
sam*_*ers 74
警告,不要在生产中执行此操作,您将以这种方式完全禁用SSL.
如果您确实不希望使用证书验证的额外安全性,并且可以升级到Ruby 1.9.3p327 +,则可以将该ssl_verify_mode选项传递给该open方法.这里举例说明我是怎么做的:
request_uri=URI.parse('myuri?that_has=params&encoded=in_it&optionally=1')
# The params incidentally are available as a String, via request_uri.query
output = open(request_uri, {ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE})
obj = JSON.parse output.readlines.join("")
Run Code Online (Sandbox Code Playgroud)
Rol*_*der 41
现在就自己发现:我使用了肮脏的黑客,这对我来说很好.
我不得不把它放进去: yourrailsapp/initalizers/
在那里我创造了一个 bypass_ssl_verification_for_open_uri.rb
并把:
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
Run Code Online (Sandbox Code Playgroud)
Iva*_*ana 14
uninitialized constant OpenSSL (NameError)在该行之前放置require'openssl' 是好的(它可能会产生),所以
app/config/initializers/bypass_ssl_verification_for_open_uri.rb(初始化程序的文件名不重要)
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
pym*_*kin 12
正如你自己提到的,这是一个肮脏的黑客.显然,禁用SSL证书验证不是一个好主意.
MislavMarohnić撰写了一篇非常有用的文章,详细说明了为什么这很糟糕以及如何妥善解决这个问题.
总之,如果出现以下情况,您通常会收到SSL验证错误:
对我来说,应用的第一个案例,只是更新我的Ubuntu系统上的ca-certificates包就可以了.
ssl doctor脚本是一个很好的工具来跟踪你的SSL错误.
| 归档时间: |
|
| 查看次数: |
69011 次 |
| 最近记录: |