いくつかのローカルRubyの助けを借りて、私はこの問題に対する2つの異なるアプローチを発見しました。
最初のアプローチはここではSO-HTTPS URL server certificate in Rubyと答えています。 peer_client
オプションをHTTPClient
とすると、暗号化された証明書を取得できます。意図どおりに動作します。
私はこのブログでpostを実行し、OpenSSL
とsocket
というアプローチを使用しました。それはまたかなりうまくいく。私はウェブサイトのSSL証明書を読んで、必要な情報を抽出して表示することができました。
require 'socket'
require 'openssl'
tcp_client = TCPSocket.new("example.com", 443)
ssl_client = OpenSSL::SSL::SSLSocket.new(tcp_client)
ssl_client.connect
cert = OpenSSL::X509::Certificate.new(ssl_client.peer_cert)
ssl_client.sysclose
tcp_client.close
certprops = OpenSSL::X509::Name.new(cert.issuer).to_a
issuer = certprops.select { |name, data, type| name == "O" }.first[1]
results = {
:valid_on => cert.not_before,
:valid_until => cert.not_after,
:issuer => issuer,
:valid => (ssl_client.verify_result == 0)
}
は、一方が他方よりも優れているか否かの質問を頼む:ここ
は、上記のブログ記事からコードスニペットです。私は今のところ知っているRubyデベロッパーほど深くない。私はOpenSSLオプションを使うことに決めました。これまでのところ私のニーズにはうまくいきました。