我正在通過域列表循環查看a)是否有443個偵聽器和b)收集ssl證書過期,簽名算法和公用名。所有擁有443監聽器的域名都會報告正確的SSL證書(與Chrome報告相匹配),但是,有一個域名無法正確報告 - myproair.com會爲parkinsonsed.com報告證書 - 任何想法?OpenSSL :: X509 ::顯示錯誤域證書的證書
# ssl cert lookup
begin
timeout(1) do
tcp_client = TCPSocket.new("#{instance["domain"]}", 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
#http://ruby-doc.org/stdlib-2.0/libdoc/openssl/rdoc/OpenSSL/X509/Certificate.html
date = Date.parse((cert.not_after).to_s)
row.push("#{date.strftime('%F')} #{cert.signature_algorithm} #{cert.subject.to_a.select{|name, _, _| name == 'CN' }.first[1]}".downcase.ljust(57))
end
rescue SocketError
row.push("down".ljust(57))
rescue Errno::ECONNREFUSED
row.push("connection refused".ljust(57))
rescue Errno::ECONNRESET
row.push("connection reset".ljust(57))
rescue Timeout::Error
row.push("no 443 listener".ljust(57))
rescue Exception => ex
row.push("error: #{ex.class}".ljust(57))
end
更新:這是我的工作版本:
$ ruby --version
ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin14]
$ openssl version
OpenSSL 0.9.8zc 15 Oct 2014
我驗證了SNI擴展在ClientHello
使用發送OpenSSL的s_client
與-connect
,-tls1
和-servername
選項。
OpenSSL的0.9。 8只支持TLS 1.0(而不是1.1或1.2)。您應該自己構建OpenSSL,並將其安裝在'/ usr/local'或'/ usr/local/ssl'中,並儘可能使用它。例如,你可以從命令行運行'/ usr/local/ssl/bin/openssl s_client ...'。請參閱OpenSSL wiki上的[編譯和安裝](http://wiki.openssl.org/index.php/Compilation_and_Installation)。我編寫了Mac OS X指令,所以我知道它們的工作原理。 – jww
相關:[Ruby OpenSSL :: SSL :: SSLContext SNI servername_cb Not Working](http://stackoverflow.com/q/30238304)。 – jww