Infraestructura de clave pública
Generar un certificado digital
Para que una Autoridad Certificante (AC) genere un certificado, antes se debe presentar una solicitud de certificado (archivo con extensión .csr)
PASO 1
Para generar el archivo csr, se debe generar una clave privada. Hacer esto con OpenSSL es muy simple:
openssl genrsa -out pk_german.key 2048
PASO 2
Ahora generamos el archivo csr con OpenSSL:
openssl req -new -key pk_german.key -subj "/C=AR/O=LabSis/CN=Wiki/serialNumber=xxxxxxxx" -out pedido_german.csr
PASO 3
Enviar el archivo csr a la AC para la generación de certificado.
X.509
Es el formato estándar para especificar certifcados de claves públicas.
En el paso 2 definimos el subj (asunto del certificado X.509) y se expresó en notación DN (Distinguished Name). Esta notación se compone de campos y cada uno de ellos define un concepto, por ejemplo, C es el Country, O es la Organization, CN es el Common Name.
Enlaces de referencia:
https://www.openssl.org/docs/man1.0.2/man1/openssl-genrsa.html
Herramienta OpenSSL
La herramienta OpenSSL es una herramienta que permite generar claves públicas y privadas como así también certificados e incluso se puede llegar a implementar una PKI.
Página oficial: https://www.openssl.org/
Certificados X.509
Con un certificado digital X.509 uno podría autenticarse si ese fue emitido por una Autoridad Certificante.
Existen diferentes formatos de archivo para codificado a un certificado digital X.509:
- .DER: El certificado está en formato binario (también usado .cer).
- .PEM: El certificado está codificado en Base64 y encerrado entre "-----BEGIN CERTIFICATE-----" y "-----END CERTIFICATE-----" (también usado .crt).
Generar claves privadas y públicas
A continuación todos los ejemplos se realizarán con la herramienta OpenSSL.
Claves privadas
Se pueden generar claves privadas cifradas y no cifradas:
Para generar una clave privada no cifrada:
openssl genrsa -out no_cifrada.key 2048
Para generar una clave privada cifrada:
openssl genrsa -des3 -out cifrada.key 2048
En realidad lo que hemos estado generando son un par de claves (pública y privada). Existe una forma de "extraer" la clave pública del archivo generado anteriormente.
Claves públicas
Para "extraer" una clave pública:
openssl rsa -in no_cifrada.key -out public.pem -outform PEM -pubout
Para cifrar un contenido con la clave pública:
echo "Mi secreto" > archivo.txt
openssl rsautl -encrypt -inkey public.pem -pubin -in archivo.txt -out cifrado.cif
Luego para descifrar el contenido con la clave privada:
openssl rsautl -decrypt -inkey no_cifrada.key -in cifrado.cif -out original.txt
Enlaces de referencias:
https://www.devco.net/archives/2006/02/13/public_-_private_key_encryption_using_openssl.php