我正在尝试理解SSL。
我在本地主机上设置了一个Jetty服务器,并使用Keytool生成了自己的证书。
现在当我访问https://localhost:8443/时,会出现无法信任此证书的错误。
我使用以下命令:
keytool -export -alias pongus -keystore keystore -file certfile.cer
创建证书,我认为这就是客户端需要用来验证服务器的证书。(这可能是我非常错误的地方!)
我有以下Ruby代码:
require 'net/https'
require 'openssl'
require 'open-uri'
puts 'yay' if File.exists?('certfile.cer')
uri = URI.parse("https://localhost:8443/")
http_session = Net::HTTP.new(uri.host, uri.port)
http_session.use_ssl = true
http_session.verify_mode = OpenSSL::SSL::VERIFY_PEER
http_session.ca_file = 'certfile.cer'
res = http_session.start do |http|
# do some requests here
http.get('/')
end
这会打印出“yay”,所以certfile.cer文件确实存在。
但是我遇到了错误
/Applications/NetBeans/NetBeans 6.8.app/Contents/Resources/NetBeans/ruby2/jruby-1.4.0/lib/ruby/1.8/net/http.rb:586 warning: can't set verify locations
/Applications/NetBeans/NetBeans 6.8.app/Contents/Resources/NetBeans/ruby2/jruby-1.4.0/lib/ruby/1.8/net/http.rb:586:in `connect': certificate verify failed (OpenSSL::SSL::SSLError)
你有什么想法我做错了什么吗?
编辑
我希望能够确保我连接到正确的服务器,并且服务器可以保证我连接到它,没有任何篡改。我正在开发服务器和客户端。