Я просто пытаюсь получить голову вокруг SSL.
Я настроил Гагатовый сервер на своем localhost и генерировал мое собственное использование сертификата Keytool.
Теперь, когда я перехожу к https://localhost:8443/, я добираюсь, банка не доверяют этой ошибке сертификата.
Я использую
keytool - экспорт - искажает pongus-keystore keystore - файл 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)
Какие-либо идеи, что я делаю неправильно?
Править
Я хочу получить его так, я гарантирую, что соединяюсь с правильным сервером, и сервер может гарантировать, что это - я соединяющийся с ним без любого промежуточного вмешательства. Я разрабатываю и сервер и клиент.
Ваш клиент нуждается в доступе к его закрытому ключу. Частный ключ не находится в сертификате, сертификат содержит только открытый ключ. Извините, я не знаю Ruby, но общая техника состоит в том, чтобы объединить закрытый ключ и сертификат в одном PKCS # 12, aka p12, файл и поставлять это в библиотеку Crypto.
Измените
http_session.verify_mode = OpenSSL::SSL::VERIFY_PEER
на
http_session.verify_mode = OpenSSL::SSL::VERIFY_NONE
, как только вы это сделаете, SSL будет работать должным образом. Я использовал это несколько раз в средах развития, всегда работает безупречно.