我正在尝试使用Typhoeus来发出需要客户端证书的HTTP请求。台风自述根本没有提到使用客户端证书。我能找到的关于用Typhoeus指定客户端证书的唯一讨论是这个GitHub问题的讨论。基于上述讨论,这是我提出的非功能代码(实际URL和文件名已经更改):
require 'openssl'
require 'typhoeus'
cert = OpenSSL::X509::Certificate.new(File.read("cert.pem"))
key = OpenSSL::PKey::RSA.new(File.read("cert-key.pem"))
ca = OpenSSL::X509::Certificate.new(File.read("cert-ca.pem"))
t = Typhoeus.get(
"https://example.com/",
ssl_verifyhost: 0,
ssl_verifypeer: false,
sslcert: cert,
sslkey: key,
cainfo: ca
)
p t.return_code这将返回:ssl_certproblem。响应体为空,:response_code为0。
我确认我的证书文件和URL是正确的。这个curl命令返回我期望的响应主体:
curl --key cert-key.pem --cert cert.pem --cacert cert-ca.pem https://example.com我得到了一个使用法拉第完成的请求,但是,我也需要并行地提出请求。法拉第的做法将Typhoeus用作适配器,这仍然会导致客户端证书错误。似乎只要涉及Typhoeus,我就无法使用客户端证书进行身份验证,而且我也不知道另一个HTTP可以为我处理并行请求。现在,我将不得不满足于与Faraday串联发送请求,这使得我的脚本的执行要慢得多。我可能最终会用另一种语言重写脚本。
这就是我是如何使用Faraday提出请求的:
require 'faraday'
require 'openssl'
ssl_opts = {
:client_cert => OpenSSL::X509::Certificate.new(File.read("cert.pem")),
:client_key => OpenSSL::PKey::RSA.new(File.read("cert-key.pem")),
:ca_file => "cert-ca.pem"
}
f = Faraday.new(
"https://example.com",
:ssl => ssl_opts
).get使用Typhoeus发出要求客户端证书的HTTP请求的正确方法是什么?我愿意使用台风的替代方案,尽管我需要提出并行请求的能力。
发布于 2022-01-26 11:57:26
在与吉突布有联系的问题上,有一个对我有用的暗示。
我跳过了cainfo,但是sslcert和sslkey需要成为文件路径的普通字符串。
类似的东西在我身上起了作用:
t = Typhoeus.get(
"https://example.com/",
ssl_verifyhost: 0,
ssl_verifypeer: false,
sslcert: "/path/to/project/cert.pem",
sslkey: "/path/to/project/cert-key.pem"
)https://stackoverflow.com/questions/67392163
复制相似问题