使用 Ruby OpenSSL 下载和读取证书
Using Ruby OpenSSL to download and read certificates
我正在尝试研究如何使用 stdlib 中的 OpenSSL 从网络 address/uri 下载证书,然后在警报应用程序中使用它。
目前,我实际上是在使用 s_client 调用 openssl 可执行文件并解析响应以获取证书,但感觉 silly/clunky 当我有一个整个库来处理这个(而且我肯定已经知道了)。
我花了一些时间试图了解 Ruby 中的 openssl 源代码,但我觉得自己被它打败了;互联网上似乎也充斥着许多试图绕过 SSL (wince) 的 rubyist,而不是 OpenSSL 本身的有用信息,所以我在那里也没有太多运气。
有人能给我指出正确的方向吗?也许通过文档或类似的东西来处理这个特定的任务?如果你有一个更好的例子,但我更愿意尝试自己解决这个问题。
提前致谢。
其实很简单。要获取远程证书,您需要尝试 建立 SSL 连接,然后从那里读取对等证书,
# Get OpenSSL context
ctx = OpenSSL::SSL::SSLContext.new
# Get remote TCP socket
sock = TCPSocket.new(remote_host, 443)
# pass that socket to OpenSSL
ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx)
# establish connection, if possible
ssl.connect
# get peer certificate and do things with it
cert = ssl.peer_cert
cert.version
cert.subject.to_s
现在,这个简单的方法不适用于 SNI,但它可以帮助您入门。
我假设 "from a web address" 表示 HTTPS。然后你可以只使用 net/http
.
require 'net/http'
cert = Net::HTTP.start(host, '443', use_ssl: true) { |http| http.peer_cert }
如果设置了 http_proxy
env var,这也适用于代理服务器。
我正在尝试研究如何使用 stdlib 中的 OpenSSL 从网络 address/uri 下载证书,然后在警报应用程序中使用它。
目前,我实际上是在使用 s_client 调用 openssl 可执行文件并解析响应以获取证书,但感觉 silly/clunky 当我有一个整个库来处理这个(而且我肯定已经知道了)。
我花了一些时间试图了解 Ruby 中的 openssl 源代码,但我觉得自己被它打败了;互联网上似乎也充斥着许多试图绕过 SSL (wince) 的 rubyist,而不是 OpenSSL 本身的有用信息,所以我在那里也没有太多运气。
有人能给我指出正确的方向吗?也许通过文档或类似的东西来处理这个特定的任务?如果你有一个更好的例子,但我更愿意尝试自己解决这个问题。
提前致谢。
其实很简单。要获取远程证书,您需要尝试 建立 SSL 连接,然后从那里读取对等证书,
# Get OpenSSL context
ctx = OpenSSL::SSL::SSLContext.new
# Get remote TCP socket
sock = TCPSocket.new(remote_host, 443)
# pass that socket to OpenSSL
ssl = OpenSSL::SSL::SSLSocket.new(sock, ctx)
# establish connection, if possible
ssl.connect
# get peer certificate and do things with it
cert = ssl.peer_cert
cert.version
cert.subject.to_s
现在,这个简单的方法不适用于 SNI,但它可以帮助您入门。
我假设 "from a web address" 表示 HTTPS。然后你可以只使用 net/http
.
require 'net/http'
cert = Net::HTTP.start(host, '443', use_ssl: true) { |http| http.peer_cert }
如果设置了 http_proxy
env var,这也适用于代理服务器。