簡體   English   中英

使用 Ruby Typhoeus 指定客戶端證書

[英]Specify client certificate with Ruby Typhoeus

我正在嘗試使用 Typhoeus 發出需要客戶端證書的 HTTP 請求。 Typhoeus README根本沒有提到使用客戶端證書。 我能找到的關於使用 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 都是正確的。 This curl command returns the response body I expect: curl --key cert-key.pem --cert cert.pem --cacert cert-ca.pem https://example.com

使用 Typhoeus 發出需要客戶端證書的 HTTP 請求的正確方法是什么? 我願意使用 Typhoeus 的替代品,但我需要能夠發出並行請求。

更新:我收到了使用Faraday完成的請求,但是,我還需要並行提出請求。Faraday 這樣做的方法是使用 Typhoeus 作為適配器,這仍然會導致客戶端證書錯誤。 似乎只要涉及 Typhoeus,我就無法使用客戶端證書進行身份驗證,而且我不知道另一個可以為我處理並行請求的 HTTP gem。 現在,我將不得不接受與 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

遇到同樣的問題,發現你的問題,很失望沒有找到解決方案。 但是在鏈接的 github 問題中,有一個提示對我有用。

sslcert 和 sslkey(我跳過了 cainfo)需要是帶有文件部分的純字符串。 所以類似的東西對我有用:

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"
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM