Как проверить SSL-соединение при вызове URI? - PullRequest
1 голос
/ 30 апреля 2010

Я занимаюсь разработкой веб-приложения, которое проходит проверку подлинности с использованием CAS (решение для единого входа: http://www.ja -sig.org / wiki / display / CAS / Home ).

В целях безопасности мне нужно две вещи для работы:

  • Связь между CAS и моим приложением должна быть безопасной
  • Мое приложение должно принять сертификацию, исходящую от CAS, чтобы я мог гарантировать, что отвечающий CAS является настоящим сервером CAS

Вот что я получил до сих пор:

uri = URI.parse("https://www.google.com/accounts")
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = (uri.scheme == 'https')
https.verify_mode = (OpenSSL::SSL::VERIFY_PEER)
raw_res = https.start do |conn|
  conn.get("#{uri.path}?#{uri.query}")
end

Это прекрасно работает в Mac OS X. Когда я пытаюсь получить небезопасный URI, возникает исключение, а когда я пытаюсь получить безопасный URI, он обычно позволяет мне, как и ожидалось.

Проблема начинается с развертывания приложения на сервере Linux. Я пробовал как в Ubuntu, так и в Red Hat. Независимо от того, какой URI я пытаюсь достичь, всегда возникает следующее исключение:

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
    from /usr/local/lib/ruby/1.8/net/http.rb:586:in `connect'
    from /usr/local/lib/ruby/1.8/net/http.rb:586:in `connect'
    from /usr/local/lib/ruby/1.8/net/http.rb:553:in `do_start'
    from /usr/local/lib/ruby/1.8/net/http.rb:542:in `start'
    from (irb):7

Я думаю, что это как-то связано с моим установленным пакетом OpenSSL, но я не уверен. Это мои установленные пакеты OpenSSL:

openssl.x86_64                              0.9.8e-12.el5              installed
openssl-devel.x86_64                        0.9.8e-12.el5              installed

Я тоже пытался использовать HTTParty, но он просто игнорирует сертификат SSL.

Надеюсь, кто-нибудь сможет мне помочь или рассказать о драгоценном камне, который работает так, как мне нужно.

Спасибо.

Ответы [ 2 ]

1 голос
/ 02 мая 2010

Могу поспорить, что есть разница в файле центров сертификации. Попробуйте установить https.ca_file для другого файла pem, , например, этот , и убедитесь, что CA вашего сертификата находится в этом списке.

Или, возможно, один или оба из этих часов машины не правы. (через эту страницу )

Убедитесь, что часы между Puppetmaster и клиент синхронизированы, если клиент позади, когда сертификат был сгенерирован, то клиент видит, что дата начала сертификат в будущем и поэтому недействителен. Просто для Ссылка вы можете узнать эту информацию из сертификата, используя следующее:

openssl x509 -text -noout -in /var/lib/puppet/ssl/certs/hostname.tld.pem | grep -A2 Срок действия

    Validity
        Not Before: Apr 19 23:21:29 2009 GMT
        Not After : Apr 18 23:21:29 2014 GMT
0 голосов
/ 19 ноября 2010

http.verify_mode = OpenSSL :: SSL :: VERIFY_NONE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...