【发布时间】:2018-05-24 12:57:30
【问题描述】:
我是 SSL 概念的新手,我正在尝试使用 HTTParty 连接到具有 x509 相互身份验证的 API。
我得到了客户端证书、客户端密钥和服务器证书(都是 pem 文件)。
我让它与客户端证书和密钥以及verify: false 一起使用。
现在下一步是如何验证服务器证书?
HTTParty 文档链接https://github.com/jnunemaker/httparty/tree/master/docs#working-with-ssl
class ServiceClient
include HTTParty
DEFAULT_HEADERS = {
'Content-Type' => 'application/json'
}.freeze
base_uri 'https://example.com'
pem File.read("#{File.expand_path('.')}/path/to/certs/cert.pem")
def self.iframe_url(**payload)
post(
'/test/create',
body: payload.to_json,
headers: DEFAULT_HEADERS,
verify: false
)
end
end
调用服务客户端
payload = {user_id: "100", account_id: "1234"}
ServiceClient.iframe_url(payload)
编辑:
HTTParty 不是硬性要求,因此任何 http 客户端的解决方案都对我有用。
如果我删除 verify: false 我会得到以下错误。
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed
【问题讨论】:
-
这段代码缺少很多上下文,常量、变量和方法调用与
iframe_url方法之间的关系还不清楚。 -
添加了更多细节。我只是在寻找有关如何指定服务器证书并验证对它的响应的指针。 HTTParty 文档没有这方面的任何细节。我想答案可能很简单,但我找不到任何关于如何做的参考。谢谢。
-
你可以用
File.read(File.expand_path('./path/to/certs/cert.pem))`来代替它。无需插入字符串。 -
HTTParty 是否允许您获取服务器证书以进行验证?我知道它是一个非常好的“快速和简单”集成库,但我不确定它是否那么复杂。
-
我认为可以,但不自信。代码显示 cert_store 参数可以通过选项发送。
标签: ruby-on-rails ruby httpclient httparty