2012-02-08 8 views
13

Czy można zażądać wygenerowania klucza klienta w przeglądarce i wysłać jawny klucz publiczny do urzędu certyfikacji serwera? Następnie instalujesz podpisany certyfikat w przeglądarce użytkownika?Generowanie poświadczeń po stronie klienta w przeglądarce i podpisywanie na serwerze

Scenariusz:

  1. użytkownik otworzy https://examle.com/ strona, tożsamość serwera jest weryfikowana
  2. Użytkownik żąda utworzenia konta
  3. parę kluczy jest generowana w przeglądarce użytkownika, a nie ujawniła się z serwerem/CA
  4. pubkey jest wysyłany na serwer w celu podpisania
  5. Serwer podpisuje klucz i generuje certyfikat
  6. Certyfikat jest wysyłany do klienta i instalowany w przeglądarce razem z kluczem prywatnym

Następnym razem, gdy klient łączy się z serwerem, jego tożsamość jest weryfikowana na podstawie certyfikatu klienta.

Byłoby miło, gdyby serwer mógł wymusić/podpowiedzieć klientowi, aby chronić swój klucz prywatny za pomocą szyfrowania hasłem.

Widziałem bankowość online za pomocą apletu Java do tego zadania. Czy można to zrobić używając rodzimych możliwości przeglądarki? Apache/PHP lub Node.js byłoby mile widziane.

Odpowiedz

14

Tak, jest to możliwe. Jednak nie ma rozwiązań opartych na różnych przeglądarkach.

  • Internet Explorer, trzeba będzie korzystać z niektórych formantów ActiveX przy użyciu X509Enrollment.CX509EnrollmentWebClassFactory lub CEnroll.CEnroll, w zależności od tego, czy jest uruchomiony w systemie Windows XP lub Vista/7. Spowoduje to wygenerowanie żądania certyfikatu PKCS # 10 (które może być potrzebne do zawinięcia między tradycyjnymi ogranicznikami.)
  • Dla reszty powinieneś być w stanie użyć znacznika <keygen />. Jest to starszy tag Netscape, nie oficjalnie HTML przed, ale wprowadzono go do HTML 5 (chociaż MS powiedział, że nie będzie obsługiwać go w swoich implementacjach) .To wygeneruje strukturę SPKAC (podobną do CSR) .
  • Dla Firefox (chociaż obsługuje keygen), możesz użyj CRMF functions.

Here is an example script że należy zrobić większość pracy dla ActiveX lub generatora kodów.

Kiedy serwer wysyła certyfikat w zamian (ewentualnie później), przeglądarka powinna zaimportować go do swojego sklepu i powiązać z kluczem prywatnym wygenerowanym w czasie żądania.

Sposób ochrony klucza prywatnego zależy od przeglądarki lub bazowego mechanizmu magazynu certyfikatów. W Firefoksie powinno być na przykład hasło główne na urządzeniu zabezpieczającym.

Po stronie serwera można zaimplementować własny urząd certyfikacji przy użyciu różnych narzędzi. OpenSSL i BouncyCastle mogą obsługiwać PKCS # 10 i SPKAC. Oto BouncyCastle-based example (powiązane z powyższym skryptem) i some code for CRMF.

Jeśli potrzebujesz gotowego rozwiązania, może Cię zainteresować coś takiego, jak OpenCA.

+0

Jak używać klucza prywatnego do deszyfrowania danych (w przypadku znaczników HTML5/kegen)? – MhdSyrwan

+2

Element '' jest uznany za przestarzały zgodnie z [W3C] (http://w3c.github.io/html/sec-forms.html#elementdef-keygen), [WHATWG] (https: //html.spec.whatwg .org/multipage/forms.html # the-keygen-element) i [MDN] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/keygen) i jest celowo wyłączony w Chrome od wersji 49. –

Powiązane problemy