2. Outline
Librer´ıa OpenSSL
Autoridad Certificadora
Generaci´on de claves
Firma digital
Cifrado h´ıbrido
Librer´ıa OpenSSL
Autoridad Certificadora
Creaci´on de una AC
Generaci´on de certificados
Extracci´on de la clave p´ublica
Generaci´on de claves
Generaci´on de claves
Generaci´on de petici´on
Firma digital
Generaci´on
Verificaci´on
Cifrado h´ıbrido
Generaci´on de una clave de sesi´on
Cifrado de clave y datos
Descifrado
Juan Manuel Garc´ıa Garc´ıa PKI con OpenSSL
3. Outline
Librer´ıa OpenSSL
Autoridad Certificadora
Generaci´on de claves
Firma digital
Cifrado h´ıbrido
Librer´ıa OpenSSL
Es una implementaci´on de c´odigo abierto de los protocolos
SSL y TLS.
Implementa una librer´ıa de funciones criptogr´aficas b´asicas.
Proporciona varias herramientas de criptograf´ıa.
Existen wrappers para varios lenguajes de programaci´on.
Juan Manuel Garc´ıa Garc´ıa PKI con OpenSSL
4. Outline
Librer´ıa OpenSSL
Autoridad Certificadora
Generaci´on de claves
Firma digital
Cifrado h´ıbrido
Creaci´on de una AC
Generaci´on de certificados
Extracci´on de la clave p´ublica
Creaci´on de una AC
1. Se copian los scripts:
$ cp /usr/lib/ssl/misc/CA.pl .
$ cp /usr/lib/ssl/openssl.cnf .
2. Se crea la nueva AC:
$ ./CA.pl -newca
3. Podemos verificar que existe la clave privada:
$ cat demoCA/private/cakey.pem
Juan Manuel Garc´ıa Garc´ıa PKI con OpenSSL
5. Outline
Librer´ıa OpenSSL
Autoridad Certificadora
Generaci´on de claves
Firma digital
Cifrado h´ıbrido
Creaci´on de una AC
Generaci´on de certificados
Extracci´on de la clave p´ublica
Generaci´on de certificados
1. Se genera una petici´on:
$ openssl req -new -keyout newreq.pem
-out newreq.pem -days 365
2. La AC firma la petici´on:
$ openssl ca -out newcert.pem -infiles newreq.pem
3. Podemos verificar el certificado recien creado:
$ openssl verify -CAfile demoCA/cacert.pem
newcert.pem
Juan Manuel Garc´ıa Garc´ıa PKI con OpenSSL
6. Outline
Librer´ıa OpenSSL
Autoridad Certificadora
Generaci´on de claves
Firma digital
Cifrado h´ıbrido
Creaci´on de una AC
Generaci´on de certificados
Extracci´on de la clave p´ublica
Extracci´on de la clave p´ublica
1. Se extrae la clave p´ublica de un certificado digital mediante:
$ openssl x509 -in newcert.pem -pubkey -noout
Juan Manuel Garc´ıa Garc´ıa PKI con OpenSSL
7. Outline
Librer´ıa OpenSSL
Autoridad Certificadora
Generaci´on de claves
Firma digital
Cifrado h´ıbrido
Generaci´on de claves
Generaci´on de petici´on
Generaci´on de claves
1. Se genera una clave privada:
$ openssl genrsa -out clave.pem 2048
2. Se puede ver el contenido de la clave:
$ openssl rsa -in clave.pem -text -noout
3. Y se puede extraer la clave p´ublica:
$ openssl rsa -in clave.pem -pubout
-out clavepub.pem
Juan Manuel Garc´ıa Garc´ıa PKI con OpenSSL
8. Outline
Librer´ıa OpenSSL
Autoridad Certificadora
Generaci´on de claves
Firma digital
Cifrado h´ıbrido
Generaci´on de claves
Generaci´on de petici´on
Generaci´on de petici´on
1. Se genera una petici´on con la llave creada:
$ openssl req -new -key clave.pem
-out newreq.pem -days 365
2. Podemos verificar la petici´on:
$ openssl req -in newreq.pem -verify
3. La autoridad debe firmar la petici´on como vimos previamente.
Juan Manuel Garc´ıa Garc´ıa PKI con OpenSSL
9. Outline
Librer´ıa OpenSSL
Autoridad Certificadora
Generaci´on de claves
Firma digital
Cifrado h´ıbrido
Generaci´on
Verificaci´on
Generaci´on de firma digital
1. Se genera el hash de los datos:
$ openssl dgst -md5 -binary -out data.md5 data
2. Se firma el hash con la clave privada:
$ openssl rsautl -sign -in data.md5
-inkey clave.pem -out data.sig
3. En el archivo data.sig est´a la firma digital.
Juan Manuel Garc´ıa Garc´ıa PKI con OpenSSL
10. Outline
Librer´ıa OpenSSL
Autoridad Certificadora
Generaci´on de claves
Firma digital
Cifrado h´ıbrido
Generaci´on
Verificaci´on
Verificaci´on de la firma
1. Se calcula el hash de los datos:
$ openssl dgst -md5 -hex data
2. Lo anterior debe ser igual a la salida de lo siguiente:
$ openssl rsautl -in data.sig -verify -hexdump
-inkey clavepub.pem -pubin
Juan Manuel Garc´ıa Garc´ıa PKI con OpenSSL
11. Outline
Librer´ıa OpenSSL
Autoridad Certificadora
Generaci´on de claves
Firma digital
Cifrado h´ıbrido
Generaci´on de una clave de sesi´on
Cifrado de clave y datos
Descifrado
Generaci´on de una clave de sesi´on
1. Se genera una clave aleatoria:
$ openssl rand -out clave_AB 32
2. Se revisa la clave generada:
$ hexdump clave_AB
Juan Manuel Garc´ıa Garc´ıa PKI con OpenSSL
12. Outline
Librer´ıa OpenSSL
Autoridad Certificadora
Generaci´on de claves
Firma digital
Cifrado h´ıbrido
Generaci´on de una clave de sesi´on
Cifrado de clave y datos
Descifrado
Cifrado de clave y datos
1. Se cifran los datos con la clave sim´etrica:
$ openssl enc -aes-256-cbc -in data -out data.enc
-K .... -iv 00
2. Se cifra la clave de sesi´on con la clave p´ublica:
$ openssl rsautl -encrypt -inkey clavepub.pem
-in clave_AB -out clave_AB.enc -pubin
3. Se envian entonces clave AB.enc y data.enc al destinatario.
Juan Manuel Garc´ıa Garc´ıa PKI con OpenSSL
13. Outline
Librer´ıa OpenSSL
Autoridad Certificadora
Generaci´on de claves
Firma digital
Cifrado h´ıbrido
Generaci´on de una clave de sesi´on
Cifrado de clave y datos
Descifrado
Descifrado
1. Se extrae la clave de sesi´on:
$ openssl rsautl -decrypt -inkey clave.pem
-in clave_AB.enc -hexdump
2. Se utiliza la clave de sesi´on para descifrar los datos:
$ openssl enc -aes-256-cbc -in data.enc -out data
-d -K .... -iv 00
Juan Manuel Garc´ıa Garc´ıa PKI con OpenSSL