Tag: sni

Net :: HTTP中的服务器名称指示支持?

我正在尝试让Ruby的Net::HTTP实现与SNI一起使用。 mail.google.com和gmail.com都位于相同的IP地址上,因此当通过SSL连接时,Google服务器需要知道要使用的证书。 默认情况下,它会返回mail.google.com证书,如果您尝试实施WebFinger,则会出现问题。 WebFinger要求您检索https://gmail.com/.well-known/host-meta以获取LRDD信息,但是,出于安全原因,validationSSL证书信息至关重要。 由于Google在这种情况下提供默认的mail.google.com证书,因此SSL post_connection_check失败。 这里正确的解决方案是为Net::HTTP启用服务器名称指示,但我不清楚如何使用OpenSSL的Ruby绑定。 其他人有想法吗? 您应该能够通过运行来查看问题: require ‘open-uri’ open(‘https://gmail.com/.well-known/host-meta’) { |f| f.read } 我还创建了一个使用早期版本的curl和OpenSSL来展示问题的要点: https://gist.github.com/7936ef38787092a22897

OpenSSL :: SSL :: SSLContext SNI servername_cb不工作

正如在OpenSSL :: X509 ::证书显示错误域证书中所引用的那样,我需要使用TLSv1或更高版本以及 服务器名称指示扩展。 即使通过SSLContext设置了ssl_version和servername_cb ,我仍然会获得myproair.com的错误证书。 begin timeout(1) do tcp_client = TCPSocket.new(“#{instance[“domain”]}”, 443) ssl_context = OpenSSL::SSL::SSLContext.new() ssl_context.ssl_version = :TLSv1 ssl_context.servername_cb = “https://#{instance[“domain”]}” ssl_client = OpenSSL::SSL::SSLSocket.new(tcp_client, ssl_context) 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 […]