gpt4 book ai didi

带有 Twitter 的 Ruby SSL 因 Windows 7 上的证书 OpenSSL 问题而失败

转载 作者:可可西里 更新时间:2023-11-01 14:43:53 25 4
gpt4 key购买 nike

我想访问 Twitter,但在使用 Net::HTTP 的 POST 函数时出现此错误。

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

是的,我知道每个人都收到了这条信息。

这是我找到的可行解决方案。

首先,手动设置证书文件:

#! /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
}
}

这是由 Ariejan de Vroom 提供的:https://www.kabisa.nl/tech/ruby-and-ssl-certificate-validation/

很多人对此给出了类似的回答。这对我不起作用。

然后我发现了一些东西让我走上了正确的道路。这家伙 Mislav Marohnić https://mislav.net/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)

我尝试过这个,但总是会遇到这个错误:

OpenSSL::X509::StoreError: cert already in hash table

呸骗子之类的!

我还应该提一下,他编写了一个脚本,可以帮助调试正在发生的事情。它可能对你有帮助,但对我来说不是。链接在他的页面上。

我也设置

ENV['SSL_CERT_FILE']
ENV['SSL_CERT_DIR']

在我的 ruby​​ 代码中没有成功。

然后我继续通过开始 -> 控制面板 -> 系统 -> 高级系统在windows中设置环境变量设置 -> 高级(选项卡) -> 环境变量 -> 系统变量新建并添加SSL_CERT_DIR和SSL_CERT_FILE。这也不起作用。

经过认证的 gem 对我不起作用... https://github.com/stevegraham/certified

现在,我将在下面为所有 Windows 7 用户提供我的破解答案。

最佳答案

所以我四处搜寻,基本上盯着证书的硬编码路径。通过在命令行输入这个

ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE'

我得到以下...

c:/Users/Luis/Code/openknapsack/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0k/ssl/cert.pem

所以我的解决方案是先从 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

现在一切正常!是的,这是一种廉价的黑客攻击,而且很丑陋。但现在您和我都可以重新开始认真编码,而不必担心烦人的问题。

我知道这不是一个很好的解决办法,但这是唯一对我有用的东西,对你也应该如此。

如果有人想编写一个 PowerShell 脚本来自动将证书文件安装到这个目录中,那么您可以更轻松地将您的 Ruby 项目部署到 Windows 7。只是一个想法。

顺便说一句,如果需要,您可以为任何操作系统复制此过程。只需找到证书文件所属的路径即可:

ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE'

并确保重命名文件,因为它出现在输出中!

关于带有 Twitter 的 Ruby SSL 因 Windows 7 上的证书 OpenSSL 问题而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23263121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com