Receta para la creación de certificados de prueba desde cero
03/03/2010

Requisitos:
- Tener instalado OpenSSL
- Tener instalado la SUN JSDK
Creación de una Autoridad Certificadora:
- Genera clave privada de la CA
openssl dsaparam -out dsparam.pem 1024
openssl gendsa -des3 -out private/ca.key dsaparam.pem - Generar una petición de certificado para la propia CA
openssl req -new -key private/ca.key -out ca.csr - Generar el certificado de la CA firmado por la propia CA
openssl x509 -signkey private/ca.key -req -days 3650 -in ca.csr -out public/ca.crt
Creación de un certificado de servidor:
- Crear un almacén de claves con la clave privada del servidor (en CN especificar el dominio del servidor, ej. dominio.com y el resto dejarlo en blanco)
keytool -genkey -alias server -keystore private/server.ks -keyalg DSA -sigalg SHA1withDSA - Generar una petición de certificado
keytool -certreq -alias server -keystore private/server.ks -file server.csr - Generar un certificado firmado por la CA (si existe previamente el fichero “serial.txt” eliminar -CAcreateserial)
openssl x509 -req -days 360 -in server.csr -CA public/ca.crt -CAkey private/ca.key -CAcreateserial -CAserial serial.txt -out public/server.crt - Importar el certificado del CA en el almacén de claves del servidor
keytool -import -alias CA -file public/ca.crt -keystore private/server.ks - Importar el certificado del servidor en el almacén de claves
keytool -import -alias server -file public/server.crt -keystore private/server.ks
Creación de un certificado de cliente (con estructura de DNI electrónico):
- Generar la clave privada del cliente
openssl dsaparam -out dsaparam.pem 1024
openssl gendsa -des3 -out private/client.key dsaparam.pem - Crear un fichero “dnie.cnf” con el siguiente contenido
[ req ]
distinguished_name = req_distinguished_name[ req_distinguished_name ]
countryName = Pais (2 letras)
countryName_default = ES
countryName_min = 2
countryName_max = 2commonName = Apellido1 Apellido2, Nombre (AUTENTICACIÓN|FIRMA)
commonName_max = 64givenName = Nombre
surname = Apellido1
serialNumber = NNNNNNNNA (número de DNI con letra)
serialNumber_min = 9
serialNumber_max = 9 - Generar una petición de certificado
openssl req -config dnie.cnf -new -key private/client.key -out client.csr - Generar un certificado firmado por la CA (si no existe previamente el fichero “serial.txt” añadir -CAcreateserial)
openssl x509 -req -days 360 -in client.csr -CA public/ca.crt -CAkey private/ca.key -CAserial serial.txt -out public/client.crt - Generar un fichero pkcs12 para importar el certificado en el navegador
openssl pkcs12 -export -clcerts -in public/client.crt -inkey private/client.key -out private/client.p12 -name your_certificate_client_name
Creación de un truststore (un almacén de claves en el que ir guardar los certificados en los que el servidor “confía”):
- Crear un keystore
keytool -genkey -alias dummy -keyalg DSA -keystore private/truststore.ks - Borrar el alias summy para dejar un keystore “limpio”
keytool -delete -alias dummy -keystore private/truststore.ks - Importar el certificado del CA (de tal modo que cualquier certificado de cliente firmado por la CA sea válido)
keytool -import -alias CA -file public/ca.crt -keystore private/truststore.ks
Nota: Para poder consultar los certificados existentes en un keystore podemos utilizar el siguiente comando
keytool -v -list -keystore private/server.ks













09/01/2012 at 13:07
Buen post, solo aclarar q en el punto 1.2: (1-Creación de una Autoridad Certificadora: 2-Generar una petición de certificado para la propia CA)
Si os da el siguiente error:
Unable to load config info from /usr/local/ssl/openssl.cnf
basta con añadir el siguiente parametro: -config openssl.cnf
Quedaría así:
openssl req -new -key private/ca.key -out ca.csr -config openssl.cnf