2012-07-29 8 views
16

Tengo dificultades para entender cómo usar <keygen>.¿Hay un ejemplo de keygen HTML5?

No pude encontrar la demostración, que se usa para la autenticación. Cuando agrego la etiqueta <keygen> al formulario, envía la clave pública.

¿Qué se debe hacer después de obtener la clave pública?

¿Puede alguien darme la aplicación de muestra que usa <keygen> y realiza la autenticación?

+0

¿Ha leído http://stackoverflow.com/questions/4501196/keygen-tag-in-html5? – atomicinf

+1

Sí, he leído el enlace de arriba. Mi pregunta es generar el certificado en el servidor y enviarlo nuevamente para la autenticación del usuario. Estoy buscando un ejemplo completo que genere el certificado usando la clave pública de keygen – swingmicro

+1

Luego habría visto: Esta especificación no especifica cómo se usará la clave privada generada. Se espera que después de recibir la estructura SignedPublicKeyAndChallenge (SPKAC), el servidor genere un certificado de cliente y lo vuelva a ofrecer al usuario para su descarga; este certificado, una vez descargado y almacenado en el almacén de claves junto con la clave privada, puede usarse para autenticarse en servicios que usan TLS y autenticación de certificado. – maxwellb

Respuesta

8

Mis explicaciones provienen de este PHP/Apache example. Es una explicación simplificada, mira el ejemplo original para más detalles.

El cliente genera una clave pública para el servidor y mantiene una clave privada.

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

La clave pública se extrae por el servidor:

$key = $_REQUEST['pubkey']; 

El servidor de construir un certificado de cliente:

$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); 

y lo envía de vuelta al cliente.

A continuación, puede configurar Apache para permitir el acceso a los clientes autenticados:

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> 
Cuestiones relacionadas