Pytanie Czy istnieje przykład kodu klucza HTML5?


Mam trudności ze zrozumieniem, jak używać <keygen>.

Nie mogłem znaleźć dla niego wersji demo, która służy do uwierzytelniania. Kiedy dodaję <keygen> do formularza, wysyła klucz publiczny.

Co należy zrobić po uzyskaniu klucza publicznego?

Czy ktoś może mi podać przykładową aplikację, która używa <keygen> i czy uwierzytelnianie?


16
2017-07-29 17:22


pochodzenie


Czytałeś stackoverflow.com/questions/4501196/keygen-tag-in-html5? - atomicinf
Tak, przeczytałem powyższy link. Moje pytanie dotyczy generowania certyfikatu na serwerze i wysyłania go w celu uwierzytelnienia użytkownika. Szukam pełnego przykładu, który generuje certyfikat za pomocą klucza publicznego keygen - swingmicro
Wtedy zobaczyłbyś: Ta specyfikacja nie określa, w jaki sposób wygenerowany klucz prywatny ma zostać użyty. Oczekuje się, że po otrzymaniu struktury SignedPublicKeyAndChallenge (SPKAC) serwer wygeneruje certyfikat klienta i zaoferuje go użytkownikowi do pobrania; ten certyfikat, po pobraniu i zapisaniu w magazynie kluczy wraz z kluczem prywatnym, może być następnie użyty do uwierzytelnienia w usługach korzystających z uwierzytelniania TLS i certyfikatu. - maxwellb
Pełny przykład z PHP i Apache: lists.whatwg.org/pipermail/whatwg-whatwg.org/attachments/... - Ortomala Lokni
Lista whatwg wydaje się być niedostępna, ale jest zarchiwizowana: archive.is/WnBdK - max.weller


Odpowiedzi:


Mozilla ma tutaj kilka przykładów:

https://developer.mozilla.org/en-US/docs/HTML/Element/keygen


5
2018-01-11 17:30



Pamiętaj, że w międzyczasie został wycofany i usunięty - Robert de W


Moje wyjaśnienia pochodzą z tego PHP / Apache przykład. To uproszczone wyjaśnienie, spójrz na oryginalny przykład, aby uzyskać pełne szczegóły.

Klient generuje klucz publiczny dla serwera i zachowuje klucz prywatny.

<form>
   <keygen name="pubkey" challenge="randomchars">
   <input type="submit" name="createcert" value="Generate">
</form>

Klucz publiczny jest wyodrębniany przez serwer:

$key = $_REQUEST['pubkey'];

Serwer tworzy certyfikat klienta:

$command = "/usr/bin/openssl ca -config ".$opensslconf." -days ".$days." -notext -batch -spkac ".$certfolder.$uniq.".spkac -out ".$certfolder.$uniq." -passin pass:'".$capw."' 2>&1";
$output = shell_exec($command);

i odeślij go do klienta.

Następnie możesz skonfigurować Apache, aby umożliwić dostęp do uwierzytelnionych klientów:

SSLEngine on
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /etc/CA/certs-pub/domain.der
SSLCertificateKeyFile /etc/CA/certs-priv/domain.pem
SSLCACertificateFile /etc/CA/certs-pub/ca.pem
SSLCARevocationFile /etc/CA/crl/cacrl.pem
<Location /secure_area/>
  SSLVerifyClient require
  SSLVerifyDepth 1
</Location>

8
2018-06-16 11:26



Uwaga dla przyszłych czytelników: Nigdy nie należy wykonywać poleceń, które mają niesanizowane dane wejściowe. Mogliby zagrozić Twojemu serwerowi - Steel Brain