2008-08-26 14 views
9

Chcę zrobić to, co robi myopenid - po zalogowaniu możesz kliknąć przycisk generujący certyfikat SSL; przeglądarka następnie pobiera ten certyfikat i przechowuje go. Kiedy później wrócisz do yourid.myopenid.com, twoja przeglądarka może używać swojego przechowywanego certyfikatu do uwierzytelniania, więc nigdy nie potrzebujesz hasła.Jak mogę obsługiwać uwierzytelnianie SSL Client Certificate?

Moje pytania są wymagane, aby to zadziałało? Jak generować certyfikaty? Jak mogę je zweryfikować, gdy zostaną mi przedstawione?

Mój stos jest szyny na Apache przy użyciu Pasażera, ale nie jestem zbyt szczegółowe.

Odpowiedz

8

Są one zwykle nazywane certyfikatami po stronie klienta.

Właściwie go nie używałem, ale zmodyfikowaną wersję restful-authentication można znaleźć tutaj here, która wygląda jak po tobie.

znalazłem to poprzez Dr. Nic's post

2

zależy od serwera, ale najprostszym rozwiązaniem wiem, przy użyciu Apache:

FakeBasicAuth

„Gdy ta opcja jest włączona, Subject Distinguished Name (DN) certyfikatu X509 klienta jest tłumaczony na nazwę użytkownika HTTP Basic Authorization, co oznacza, że ​​standardowe metody uwierzytelniania Apache mogą być używane do kontroli dostępu. Nazwa użytkownika jest tylko przedmiotem certyfikatu X509 klienta (można to ustalić, uruchamiając komendę OpenSSL openssl x509: openssl x509 -noout -subject -in certificate.crt). Należy pamiętać, że hasło nie jest otrzymywany z obsługą ... "

Nie jestem pewien szynach, ale zmienna środowiskowa zwykle REMOTE_USER powinny być dostępne w jakiś sposób.

1

Jeśli chcesz wygenerować certyfikaty, trzeba spowodować, że klient wygeneruje parę kluczy i wyśle ​​ci przynajmniej klucz publiczny, możesz to zrobić w Firefoksie przez wywołanie Javascript, to jest crypto.generateCRMFRequest. Zgaduję, że istnieją również metody specyficzne dla przeglądarki dostępne w innych przeglądarkach. po pierwsze, musisz dowiedzieć się, jak wydać certyfikat po uzyskaniu klucza publicznego:

Możesz coś napisać na serwerze z OpenSSL, ale ma wbudowaną obsługę CSR, a nie format CRMF, który będzie wysyłał Firefox. Więc musisz napisać kod, aby przekonwertować CRMF na CSR, co będzie wymagało pewnego rodzaju możliwości przetwarzania DER & hellip; Po prostu drapię powierzchnię tutaj — obsługa CA, nawet w przypadku aplikacji zabawkowej, nie jest banalna.

Rozwiązania SSO, takie jak rozwiązania OpenId i PKI, nakładają się na siebie i w PKI istnieje elegancja. Ale diabeł tkwi w szczegółach i istnieją dobre powody, dla których podejście to trwało długo, ale zostało przerwane jedynie w zastosowaniach rządowych i wojskowych.

Jeśli są Państwo zainteresowani realizacją tego, prosimy odpowiedzieć na kilka pytań dotyczących platformy, na której chcieliby Państwo rozwinąć swoją usługę urzędu certyfikacji.

+0

Możesz zamiast tego użyć elementu keygen, http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#the-keygen-element – hendry

0

Pracuję nad rozwiązaniem tego problemu. Chciałem zrobić to samo i wiem, że wielu innych właścicieli witryn chce tej funkcji, z lub bez zewnętrznego dostawcy.

Utworzono niezbędną konfigurację serwera i wtyczkę firefox do obsługi uwierzytelniania opartego na certyfikatach. Przejdź na stronę mypassfree.com, aby pobrać darmową wtyczkę firefox. Wyślij mi wiadomość e-mail (link na tej stronie) do konfiguracji serwera, ponieważ jeszcze jej nie spakowałem z miłym instalatorem.

konfiguracja serwera jest Apache2 + OpenSSL + Perl (ale można przepisać skrypty perla w dowolnym języku)

Jonathan

0

Można wygenerować certyfikat w przeglądarce klienta przy użyciu kodu specyficznego dla danej przeglądarki. Patrz: this question

Można również wygenerować certyfikaty klienta SSL po stronie serwera przy użyciu OpenSSL w Ruby (see this q). (To zadziała w dowolnej przeglądarce bez kodu specyficznego dla przeglądarki, ale twój serwer wygeneruje klucz prywatny klienta, który nie jest idealny dla krypto-purystów.)

Niezależnie od tego, jakiej metody użyjesz do ich wygenerowania, będziesz musiał skonfiguruj serwer WWW tak, aby wymagał certyfikatów klienta. Zobacz przykład the Apache docs.

+0

Generowanie CSR (lub odpowiednik) działa w najpopularniejszych przeglądarkach (IE, FF, Chrome, ...), ale kod jest specyficzny dla przeglądarki. Zobacz tę odpowiedź: http://stackoverflow.com/a/9198400/372643 – Bruno

+0

Świetna odpowiedź, Bruno - myślę, że to jest lepsza odpowiedź na to q niż jakiekolwiek obecnie tutaj :-) – Rich

Powiązane problemy