我正在尝试使用stdlib中的OpenSSL从web地址/ uri下载证书,然后在警报应用程序中使用它。
目前,我实际上是使用s_client调用openssl可执行文件并解析响应以获取证书但是当我有一个完整的lib来处理这个时,它只是觉得愚蠢/笨拙(那个我肯定已经知道了。)
我花了一些时间试图用Ruby包围我的openssl源代码,但我觉得它被它击败了;互联网似乎充斥着许多红宝石试图绕过他们的SSL(wince),而不是OpenSSL本身的有用信息,所以我也没有太多运气。
有人能指出我正确的方向吗?也许通过文档或类似的东西能够处理这个特定的任务?如果你有一个更好的例子,但我更愿意尝试自己解决这个问题。
提前致谢。
答案 0 :(得分:6)
# 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一起使用,但它会让你开始。
答案 1 :(得分:0)
我假设“来自网址”是指HTTPS。然后,您可以只使用net/http
。
require 'net/http'
cert = Net::HTTP.start(host, '443', use_ssl: true) { |http| http.peer_cert }
如果设置了http_proxy
env var,这在代理服务器之后也可以工作。