Я занимаюсь разработкой веб-приложения, которое проходит проверку подлинности с использованием 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.
Надеюсь, кто-нибудь сможет мне помочь или рассказать о драгоценном камне, который работает так, как мне нужно.
Спасибо.