Come verificare, analizzare ed elaborare i risultati del tag keygen HTML5?

2

Sto esaminando l'attributo Keygen HTML5 e ho scoperto che invia questi dati su un modulo POST al server. Ecco un esempio di POST:

MIICQDCCASgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCXZtZkfOZOvCaMGVeFqCyhZdvs1NAP2+SwgE7Bz+JxSqVVkPAF+vyQ6dUvUNv2xtgeXnKt5Vz6lO8CoF3W9lsdKjLZWAPYfnAbjmoXHGFFY5uxFCyLUZAi+wrPmH2yorzJDTLC07hAfxb3XFRX6OSCYKUnF4L1g+5PtCxkQGaQ0Nd8K9GWffzAw915H7zsADB4TqK4vkyOItJ5RXaI+G+l9rb7yQeK6cd7P6OaIpWJctErv6m/BIlTuMOtYlZig29VWqc/0/J++QS49pbNrKULf+2GUheQ1JleA9wzy5ECUfkfboU0NoZt1Co9MSOJ0J+dSND4zs09kFNawFF1bXtHAgMBAAEWADANBgkqhkiG9w0BAQQFAAOCAQEAJwemsDE/5s3cYTv72sZ4ScKfxw0ROorxcmmmml3v1o9kepCirI9DmNlGWk5yVaAfP647YkLVF8xitdqr0c2ixboihoPsYuQH7h5CLFWv42SKddH5QzsfM/3JVwvxDw38v6kgWNcl1kTiz/1vXZZYBasjfmuosW4IGtZYS/JY6Zjq11BFi8dBvzGEyKu6eppssDZRJ/JGPuTudWiZqsVhxyW6pdz8weHpEBnUAFUdyGOyKJj5BqTRyuYbo/VKNxdcIo1Grs1VW2rD+0iEFv9Pwz4WEMZt9QSCiQkP2cIKsSrvpR5/6a8JA7fXndf6cEVJOgS1r+ewx9f3KJhuqbwJsA==

Quando analizzo questo utilizzando un parser ASN.1 contiene

  • Una chiave RSA (oid 1.2.840.113549.1.1.1),
  • Un hash MD5 (oid 1.2.840.113549.1.1.4)
  • Una stringa di 2048 bit che è la firma.

Ulteriori indagini rivelano che probabilmente è chiamata Chiave pubblica firmata e sfida (SPKAC) formato e questo formato è accettato dal server Microsoft CA.

Domanda

  1. I documenti keygen su Mozilla e keygen docs at w3 non specifica un formato di ritorno dopo il POST. Cosa dovrei restituire?
  2. Dopo l'esecuzione di keygen, (vedi i collegamenti su in fondo a questa pagina ) Non vedo un certificato nel mio negozio locale. Dov'è?
  3. La mia comprensione è che Keygen è usato per creare un certificato del browser. Quali passaggi logici devo completare per completare questo processo?
posta random65537 03.01.2013 - 14:00
fonte

2 risposte

2
  1. The keygen docs at Mozilla, and the keygen docs at w3 don't specify a return format after the POST. What should I return?

Il motivo per cui queste informazioni non sono elencate è perché l'elemento KeyGen invia un SPKAC al server e una volta CSR ( Richiesta di firma del certificato) viene generato e inviato a una CA (autorità di certificazione) e un x.509 certificato client firmato deve essere restituito al client che ha creato la chiave privata.

Un tipico evento procedurale per la gestione di SPKAC dall'elemento KeyGen sarebbe il seguente:

  1. L'utente specifica una "sfida" unica che viene codificata all'interno dell'SPKAC generato da KeyGen (chiave pubblica firmata e sfida ASN.1 valore).
  2. L'elemento KeyGen genera una chiave privata che viene quindi archiviata nell'archivio certificati del browser.
  3. Una chiave pubblica viene quindi derivata dalla chiave privata.
  4. La chiave pubblica derivata & la sfida inviata dall'utente viene quindi codificata come una stringa formattata ASN.1 SPKAC (vedere il 'formato di richiesta certificato' sotto).
  5. Viene quindi creata una CSR (vedere di seguito) e inviata a un'autorità di certificazione rispettabile.
  6. La CA genera un certificato x.509 che può essere utilizzato per l'autenticazione pass-wordless (purché il server Web sia configurato per farlo)

L'impostazione di base dell'intestazione "Content-Type" su "application / x-x509-user-cert" costringerà il browser a caricarlo nel suo archivio di certificati.

  1. After keygen is run, (see links at the bottom of this page) I don't see a certificate in my local store. Where is it?

KeyGen non genera un certificato. Genera una chiave privata. La chiave pubblica è derivata dalla chiave privata (che non è accessibile dall'archivio certificati del browser, né dall'API del motore JS) quindi codificata come SPKAC.

L'SPKAC deve essere utilizzato all'interno di una CSR (Certificate Signing Request) e un esempio del quale sarebbe simile all'esempio seguente, la CSR più tradizionale può essere mostrata qui e vedi qui per i riferimenti :

SPKAC=MIIBXjCByDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3L0IfUijj7+A8CPC8
EmhcdNoe5fUAog7OrBdhn7EkxFButUp40P7+LiYiygYG1TmoI/a5EgsLU3s9twEz3
hmgY9mYIqb/rb+SF8qlD/K6KVyUORC7Wlz1Df4L8O3DuRGzx6/+3jIW6cPBpfgH1s
VuYS1vDBsP/gMMIxwTsKJ4P0CAwEAARYkYzBkZjFlYjctMTU0NC00MWVkLWFmN2Et
ZDRkYjBkNDc5ZjZmMA0GCSqGSIb3DQEBBAUAA4GBALEiapUjaIPs5uEdvCP0gFK2q
ofo+4GpeK1A43mu28lirYPAvCWsmYvKIZIT9TxvzmQIxAfxobf70aSNlSm6MJJKmv
urAK+Bpn6ZUKQZ6A1m927LvctVSYJuUi+WVmr0fGE/OfdQ+BqSm/eQ3jnm3fBPVx1
uwLPgjC5g4EvGMh8M
CN=Joe Snuffy
OU=Snake Oil, LLC
O=Department of pricing
L=City name
ST=State or province
C=United States
[email protected]
  1. My understanding is that Keygen is used to create a Browser Certificate. What logical steps do I need to complete in order to finish this process?

L'intero processo per l'utilizzo di un elemento keygen per un'autentica autenticazione del certificato client all'interno di applicazioni Web è il seguente:

  1. All'interno di un pannello di amministrazione di un'applicazione Web (utilizzando un account esistente) l'utente ha la possibilità di creare un certificato client (x.509) da utilizzare per l'autenticazione. Carica l'elemento KeyGen SPKAC insieme a un modulo che fornisce i seguenti attributi (tutto nella parentesi corrisponde all'esempio CSR precedente):

    • organizationalUnitName (OU)
    • organizationName (O)
    • localityName (L)
    • stateOrProvinceName (ST)
    • countryName (C)
    • indirizzo email (E)
    • commonName (CN)
  2. Una volta che il modulo viene fornito al server viene generato un CSR. Deve quindi essere fornito a una CA (autorità di certificazione) per la firma.

  3. Una volta firmato, il client riceve una notifica per accedere nuovamente all'applicazione web, in quel momento può essere utilizzata l'intestazione x.509 "content-type" per forzare il certificato nell'archivio certificati del browser.
  4. Finché il server Web è configurato per farlo, può forzare il client a inviare certificati x.509 per l'autenticazione del certificato client. La documentazione del server web Apache fornisce queste informazioni .

Alcune note aggiuntive riguardo l'SPKAC; la stringa di verifica fornita deve essere univoca per ogni certificato del client dell'utente. Un esempio di impostazione di questo in base all'input dell'utente sarebbe il seguente snippit:

<script>
/* Gather up our form & its elements */
var form = document.getElementById("myForm")
  , challenge = document.getElementById("challenge")
  , spkac = document.getElementById("spkac");

/* Add an event handler to move the value from the 'challenge' input
   to the keygen element challenge attribute */
form.addEventListener("blur", setSpki, true);

/* Our function which sets the challenge */
function setSpki(){
  spkac.setAttribute('challenge', challenge.value());
}
</script>

Questo è essenziale perché una volta che il certificato client firmato è nell'archivio del browser, chiunque usi quel browser può potenzialmente accedere al proprio account.

La sfida fornita durante l'iniziale SPKAC dovrebbe essere utilizzata come una forma secondaria di prova di proprietà per la chiave privata corrispondente alla chiave privata utilizzata per l'SPKAC.

Ad esempio; l'utente si disconnette, chiude il browser e distrugge la sessione autenticata. Un utente malintenzionato si siede sullo stesso terminale e tenta di usare x.509 per fornire l'autenticazione e viene quindi richiesto per la sfida.

    
risposta data 17.05.2015 - 18:21
fonte
1

Sembra che la risposta risieda nel link w3 aggiornato che ho appena trovato. In particolare

This specification does not specify how the private key generated is to be used. It is expected that after receiving the SignedPublicKeyAndChallenge (SPKAC) structure, the server will generate a client certificate and offer it back to the user for download; this certificate, once downloaded and stored in the key store along with the private key, can then be used to authenticate to services that use TLS and certificate authentication.

Il processo di salvataggio del certificato nell'archivio locale dipende da ciascun browser. (IE utilizza l'archivio di Windows, alcuni altri browser hanno il loro negozio privato)

La convalida del certificato del browser implicherebbe la verifica della corrispondenza tra la catena CA e la radice CA interna e l'associazione del certificato browser con l'utente.

Se l'applicazione è progettata per consentire all'utente di disporre di più certificati per un singolo account, questa relazione molti a uno deve essere monitorata per utente. (Questo è utile se l'autenticazione reciproca della sessione TLS è considerata la caratteristica principale dei certificati del browser e l'autenticazione basata su form (anche multifattoriale) viene eseguita in aggiunta a questo)

    
risposta data 03.01.2013 - 14:18
fonte