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:

  1. Genera clave privada de la CA
    openssl dsaparam -out dsparam.pem 1024
    openssl gendsa -des3 -out private/ca.key dsaparam.pem
  2. Generar una petición de certificado para la propia CA
    openssl req -new -key private/ca.key -out ca.csr
  3. 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:

  1. 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
  2. Generar una petición de certificado
    keytool -certreq -alias server -keystore private/server.ks -file server.csr
  3. 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
  4. 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
  5. 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):

  1. Generar la clave privada del cliente
    openssl dsaparam -out dsaparam.pem 1024
    openssl gendsa -des3 -out private/client.key dsaparam.pem
  2. 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 = 2

    commonName = Apellido1 Apellido2, Nombre (AUTENTICACIÓN|FIRMA)
    commonName_max = 64

    givenName = Nombre

    surname = Apellido1

    serialNumber = NNNNNNNNA (número de DNI con letra)
    serialNumber_min = 9
    serialNumber_max = 9

  3. Generar una petición de certificado
    openssl req -config dnie.cnf -new -key private/client.key -out client.csr
  4. 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
  5. 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”):

  1. Crear un keystore
    keytool -genkey -alias dummy -keyalg DSA -keystore private/truststore.ks
  2. Borrar el alias summy para dejar un keystore “limpio”
    keytool -delete -alias dummy -keystore private/truststore.ks
  3. 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

One Response to “Receta para la creación de certificados de prueba desde cero”

  1. juan Says:

    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


Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.