首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Ruby Typhoeus指定客户端证书

用Ruby Typhoeus指定客户端证书
EN

Stack Overflow用户
提问于 2021-05-04 21:02:37
回答 1查看 314关注 0票数 1

我正在尝试使用Typhoeus来发出需要客户端证书的HTTP请求。台风自述根本没有提到使用客户端证书。我能找到的关于用Typhoeus指定客户端证书的唯一讨论是这个GitHub问题的讨论。基于上述讨论,这是我提出的非功能代码(实际URL和文件名已经更改):

代码语言:javascript
复制
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命令返回我期望的响应主体:

代码语言:javascript
复制
curl --key cert-key.pem --cert cert.pem --cacert cert-ca.pem https://example.com

我得到了一个使用法拉第完成的请求,但是,我也需要并行地提出请求。法拉第的做法将Typhoeus用作适配器,这仍然会导致客户端证书错误。似乎只要涉及Typhoeus,我就无法使用客户端证书进行身份验证,而且我也不知道另一个HTTP可以为我处理并行请求。现在,我将不得不满足于与Faraday串联发送请求,这使得我的脚本的执行要慢得多。我可能最终会用另一种语言重写脚本。

这就是我是如何使用Faraday提出请求的:

代码语言:javascript
复制
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请求的正确方法是什么?我愿意使用台风的替代方案,尽管我需要提出并行请求的能力。

EN

回答 1

Stack Overflow用户

发布于 2022-01-26 11:57:26

在与吉突布有联系的问题上,有一个对我有用的暗示。

我跳过了cainfo,但是sslcertsslkey需要成为文件路径的普通字符串。

类似的东西在我身上起了作用:

代码语言:javascript
复制
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"
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67392163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档