Rubycas-server + app na http

Pracuje teraz nad rozbudowaną wersją aplikacji, którą opracowałem w tamtym roku. Aplikacji wykorzystuje połączenie m.in z serwerem CAS

Aby sprawdzić czy aplikacja jest dobrze skonfigurowana do działania z CASem postawiłem lokalnie serwer CASa, wykorzystałem do tego RubyCAS-Server. Do logowania w aplikacji wykorzystuję Devisa, a do logowania z zewnętrznych serwisów wykorzystuje Omniauth (dla CASa - gem ‘omniauth-cas’).

  1. Klikam w link, który przekierowuje mnie na stronę CASa
  2. Wpisuję login, hasło a następnie klikam Zaloguj
  3. Pojawia mi się następujący komunikat na stronie:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

W logach serwera CASa:

ERROR OpenSSL::SSL::SSLError: SSL_accept returned=1 errno=0 state=SSLv3 read client certificate A: tlsv1 alert unknown ca

W tym momencie aplikacja uruchomiona jest na http a serwer CASa na https i może z powodu braku certyfikatu po stronie aplikacji występuje taki błąd. Czy jest możliwość logowania przez CASa dla aplikacji uruchomionej na http ?

Przy konfiguracji RubyCAS-Server musiałem stworzyć dla niego certyfikat bo inaczej serwer CASa nie chciał się uruchomić, teraz CAS się aplikacja serwera CASa się uruchamia i pokazuje że ma dobry certyfikat, więc certyfikat serwera CASa raczej nie jest problemem.

Nie mam pojęcia jak to będzie w przypadku CAS ale podejrzewam jedno z:

a) ruby jest skompilowany bez / z błędną obsługą SSL. Często się to zdarza jak brakuje libopenssl-dev (albo podobnie) w systemie i instalujesz ze źródeł (np, rvm)
b) certyfikat który wygenerowałeś jest certyfikatem używanym przez serwer HTTPS. Jeśli sam go sobie wygenerowałeś, instytucja certyfikująca jest nieznana systemowi klienckiemu i odrzuca taki certyfikat jako podejrzany. Musisz albo zainstalować certyfikat SSL wygenerowany przez któregoś ze znanych dostawców (Thawte albo coś innego), albo zainstalować wygenerowany certyfikat na serwerze-kliencie CAS. https://help.ubuntu.com/community/OpenSSL#Using_PKCS.2312_Certificates_in_Client_Applications

Po odłożeniu na bok autoryzacji przez CAS, w końcu problem powrócił. Sytuacja wygląda tak:

  • uruchomiony jest rubycas-server na na porcie 4000 (http://0.0.0.0:4000)
  • wygenerowałem mu certyfikat zawierający również klucz prywatny (cert.pem)
  • w aplikacji klienckiej używam devisa + omniauth z takimi ustawieniem:
config.omniauth :cas, host: '0.0.0.0:4000'

po zalogowaniu na serwerze CAS i przekierowaniu do aplikacji nadal pojawiają się wyżej wymienione błędy, czyli:
w aplikacji wyskakuje mi błąd:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify faile

a w logach serwera CAS:

SSL_accept returned=1 errno=0 state=SSLv3 read client certificate A: tlsv1 alert unknown ca

Nie wiem czy powodem tego problemu może być fakt że aplikacji uruchomiona jest na http a nie https. Ruby ma obsługę SSLa.
Certyfikat, sam wygenrowałem, gdyż jest on potrzebny w trybie development na produkcji mam już certyfikat, który ma łączyć się z właściwym serwerem CAS, nie mam możliwoście wejścia, z poza domeny produkcjnej, na CASa produkcyjnego.

Podany link niestety nie działa

Na szczęście jest google cache http://webcache.googleusercontent.com/search?q=cache:LWcxReGhvdgJ:https://help.ubuntu.com/community/OpenSSL/+&cd=1&hl=en&ct=clnk

przejrzałem ten tekst jednak dalej jestem w tej kwestii zielony (w kwestii ssl):

Trace mojej aplikacji:

~/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:799:in `connect' ~/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:799:in `block in connect' ~/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/timeout.rb:54:in `timeout' ~/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/timeout.rb:99:in `timeout' ~/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:799:in `connect' ~/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:755:in `do_start' ~/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/net/http.rb:744:in `start' omniauth-cas (0.0.6) lib/omniauth/strategies/cas/service_ticket_validator.rb:85:in `get_service_response_body' omniauth-cas (0.0.6) lib/omniauth/strategies/cas/service_ticket_validator.rb:32:in `user_info' omniauth-cas (0.0.6) lib/omniauth/strategies/cas.rb:63:in `callback_phase' omniauth (1.0.3) lib/omniauth/strategy.rb:204:in `callback_call' omniauth (1.0.3) lib/omniauth/strategy.rb:166:in `call!' omniauth (1.0.3) lib/omniauth/strategy.rb:148:in `call' sass (3.2.0) lib/sass/plugin/rack.rb:54:in `call' warden (1.2.1) lib/warden/manager.rb:35:in `block in call' warden (1.2.1) lib/warden/manager.rb:34:in `catch' warden (1.2.1) lib/warden/manager.rb:34:in `call' actionpack (3.2.8) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call' rack (1.4.1) lib/rack/etag.rb:23:in `call' rack (1.4.1) lib/rack/conditionalget.rb:25:in `call' actionpack (3.2.8) lib/action_dispatch/middleware/head.rb:14:in `call' actionpack (3.2.8) lib/action_dispatch/middleware/params_parser.rb:21:in `call' actionpack (3.2.8) lib/action_dispatch/middleware/flash.rb:242:in `call' rack (1.4.1) lib/rack/session/abstract/id.rb:205:in `context' rack (1.4.1) lib/rack/session/abstract/id.rb:200:in `call' actionpack (3.2.8) lib/action_dispatch/middleware/cookies.rb:339:in `call' activerecord (3.2.8) lib/active_record/query_cache.rb:64:in `call' activerecord (3.2.8) lib/active_record/connection_adapters/abstract/connection_pool.rb:473:in `call' actionpack (3.2.8) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call' activesupport (3.2.8) lib/active_support/callbacks.rb:405:in `_run__1813209692860048239__call__2849554788346757959__callbacks' activesupport (3.2.8) lib/active_support/callbacks.rb:405:in `__run_callback' activesupport (3.2.8) lib/active_support/callbacks.rb:385:in `_run_call_callbacks' activesupport (3.2.8) lib/active_support/callbacks.rb:81:in `run_callbacks' actionpack (3.2.8) lib/action_dispatch/middleware/callbacks.rb:27:in `call' actionpack (3.2.8) lib/action_dispatch/middleware/reloader.rb:65:in `call' actionpack (3.2.8) lib/action_dispatch/middleware/remote_ip.rb:31:in `call' actionpack (3.2.8) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call' actionpack (3.2.8) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call' railties (3.2.8) lib/rails/rack/logger.rb:26:in `call_app' railties (3.2.8) lib/rails/rack/logger.rb:16:in `call' actionpack (3.2.8) lib/action_dispatch/middleware/request_id.rb:22:in `call' rack (1.4.1) lib/rack/methodoverride.rb:21:in `call' rack (1.4.1) lib/rack/runtime.rb:17:in `call' activesupport (3.2.8) lib/active_support/cache/strategy/local_cache.rb:72:in `call' rack (1.4.1) lib/rack/lock.rb:15:in `call' actionpack (3.2.8) lib/action_dispatch/middleware/static.rb:62:in `call' railties (3.2.8) lib/rails/engine.rb:479:in `call' railties (3.2.8) lib/rails/application.rb:223:in `call' rack (1.4.1) lib/rack/content_length.rb:14:in `call' railties (3.2.8) lib/rails/rack/log_tailer.rb:17:in `call' rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service' ~/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service' ~/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run' ~/.rbenv/versions/1.9.3-p194-perf/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
certyfikat którego używam jest pod adresem http://rubycas-server.googlecode.com/files/rubycas-server-demo.pem

Próbowałeś już ustawiać scieżkę do certyfikatów (:ca_path => ‘/etc/ssl/certs’) ?

Rails.application.config.middleware.use OmniAuth::Builder do provider :cas, :host => 'cas.yourdomain.com', :ssl => true, :ca_path => '/etc/ssl/certs' end

w konfiguracji devisa mam dokładnie wpisane:

Devise.setup do |config| config.omniauth :cas, host: '0.0.0.0:4000', ssl: true, ca_path: '...' end
w ca_path mam podaną ścieżkę do katalogu z certyfikatem pem tym pobranym ze strony projektu rubycas-server. Niestety nadal wyskakuje taki błąd.

EDIT:
Znalazłem pośrednie rozwiązanie:

Devise.setup do |config| config.omniauth :cas, host: '0.0.0.0:4000', disable_ssl_verification: true end
Teraz normalnie mnie loguje przez CASa