Salta el contingut
 

OpenSSL

Joan Puigcerver Ibáñez

j.puigcerveribanez@edu.gva.es

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

OpenSSL

OpenSSL és una eina de programari que implementa protocols criptogràfics de seguretat de capa de transport (SSL) i seguretat de la capa de transport (TLS), així com altres funcionalitats relacionades amb la criptografia:

  • Xifrat de dades
  • Generació de certificats
  • Signatura de fitxers
  • Verificació de certificats
  • Gestió de claus privades i públiques

Alguns conceptes bàsics relacionats amb SSL i la criptografia són:

  • Clau privada i pública: La criptografia asimètrica utilitza un parell de claus:

    • Una clau pública: que es pot compartir amb tothom.
    • Una clau privada: que s'ha de mantenir en secret.
  • Certificats: són fitxers que demostren l’autenticitat d’una entitat (normalment un servidor o una pàgina web). Inclouen informació sobre la clau pública d’una entitat i estan signats per una entitat certificadora (CA).

  • Hashing: Transformació d'un missatge o fitxer en un valor únic de mida fixa (hash). Un hash serveix per verificar la integritat de les dades, però no pot utilitzar-se per recuperar les dades originals.

    Aquest procés és la base de la signatura digital.

Instal·lació

sudo apt install openssl
sudo dnf install openssl

Certificats digitals

Els certificats són fitxers que contenen la clau pública d'una entitat i estan signats per una entitat certificadora (CA).

Els certificats contenen la següent informació:

  • País (C): Codi de dos lletres del país.
  • Estat o província (ST): Nom de l'estat o província.
  • Localitat (L): Nom de la localitat.
  • Organització (O): Nom de l'organització.
  • Unitat organitzativa (OU): Nom de la unitat organitzativa, departament, etc.
  • Nom comú (CN): Nom de l'entitat.
  • Adreça de correu electrònic (emailAddress): Adreça de correu electrònic de l'entitat.

Generar un certificat autosignat

Un certificat autosignat és un certificat que s'ha signat amb la seva pròpia clau privada.

openssl req -x509 -newkey rsa:4096 -keyout privkey.pem -out cert.pem -days 365

Aquesta comanda genera un certificat autosignat a cert.pem que conté la clau pública i la clau privada corresponent a privkey.pem.

Info

Les dades del certificat es demanen a l'usuari a través d'un qüestionari o be es poden passar com a arguments a la comanda.

openssl req -x509 -newkey rsa:4096 -keyout privkey.pem -out cert.pem -days 365 \
    -subj "/C=XX/ST=XXXXX/L=XXXXX/O=XXXXX/CN=XXXXX/emailAddress=XXXXX@XXXXX"

Veure la informació d'un certificat

Per veure la informació d'un certificat, cal utilitzar la comanda x509.

openssl x509 -in cert.pem -text -noout

Exportar la clau pública d'un certificat

Per exportar la clau pública d'un certificat, cal utilitzar la comanda x509 amb l'opció -pubkey.

openssl x509 -in cert.pem -pubkey -noout > pubkey.pem

Signar un document

Per signar un document, cal utilitzar la clau privada del signant.

openssl dgst -sha256 -sign privkey.pem -out document.sig document.txt

Aquesta comanda genera una signatura del document en el fitxer document.sig utilitzant l'algorisme SHA-256.

Advertència

El contingut de document.sig no és llegible, ja que s'emmagatzema directament en format binari.

Si es desitja transformar la signatura en un format llegible, podem transformar el format binari a base64.

openssl base64 -in document.sig -out document.sig.base64

O en una única comanda:

openssl dgst -sha256 -sign privkey.pem document.txt | openssl base64 -out document.sig.base64

Verificar una signatura

Per verificar una signatura, cal utilitzar la clau pública del signant.

openssl dgst -sha256 -verify pubkey.pem -signature document.sig document.txt

Aquesta comanda verifica la signatura del document document.sig

Nota

En cas de haver convertit la signatura a base64, caldrà convertir-la novament a format binari abans de verificar-la.

openssl base64 -d -in document.sig.base64 -out document.sig.base64

O en una única comanda:

openssl base64 -d -in document.sig.base64 | openssl dgst -sha256 -verify pubkey.pem -signature /dev/stdin document.txt

Encriptació asimètrica amb RSA

OpenSSL permet encriptar i desencriptar fitxers amb l'algorisme RSA.

Generar claus

Abans de poder encriptar o desencriptar un fitxer, cal generar un parell de claus privada i pública.

openssl genrsa -out private.pem 4096

Info

Les claus generades en un certificat també es poden utilitzar per encriptar i desencriptar.

Encriptar

El procés d'encriptació consisteix a xifrar un fitxer amb la clau pública del receptor del missatge.

openssl pkeyutl -encrypt -pubin -inkey pubkey.pem -in document.txt -out document.enc

Advertència

El fitxer encriptat document.enc no és llegible, ja que s'emmagatzema directament en format binari.

Si es desitja transformar el fitxer encriptat en un format llegible, podem transformar el format binari a base64.

openssl base64 -in document.enc -out document.enc.base64

O en una única comanda:

openssl pkeyutl -encrypt -pubin -inkey pubkey.pem -in document.txt | openssl base64 -out document.enc.base64

Desencriptar

Per desencriptar el fitxer, cal utilitzar la clau privada corresponent.

openssl pkeyutl -decrypt -inkey private.pem -in document.enc -out document.txt

Nota

En cas de haver convertit el fitxer encriptat a base64, caldrà convertir-lo novament a format binari abans de desencriptar-lo.

openssl base64 -d -in document.enc.base64 -out document.enc

O en una única comanda:

openssl base64 -d -in document.enc.base64 | openssl pkeyutl -decrypt -inkey privkey.pem -out document.txt

Autoritat de certificació (CA)

Una autoritat de certificació (CA) és una entitat de confiança que signa certificats per a altres entitats.

El funcionament d'una CA és el següent:

  • La CA genera un certificat autosignat que conté la seva clau pública.
  • La CA genera certificats per a altres entitats signant-los amb la seva clau privada.
    • Això vol dir que la CA certifica que el certificat generat correspon a l'entitat.
  • Les entitats poden utilitzar el certificat de la CA per encriptar dades o signar documents.
  • Les altres entitats poden verificar la signatura del certificat utilitzant la clau pública de la CA.

Certificat de l'autoritat de certificació

Per generar un certificat de l'autoritat de certificació (CA), cal seguir els passos següents:

  1. Generar un certificat autosignat per la CA.

    openssl req -x509 -newkey rsa:4096 -keyout ca-privkey.pem -out ca-cert.pem -days 365
    
    2. Exportar la clau pública de la CA.

    openssl x509 -in ca-cert.pem -pubkey -noout > ca-pubkey.pem
    

Generar un certificat d'una entitat signat per la CA

Per generar un certificat d'una entitat signat per la CA, cal seguir els passos següents:

  1. Generar una clau privada i una sol·licitud de signatura de certificat (CSR) per l'entitat.

    openssl req -newkey rsa:4096 -keyout entity-privkey.pem -out entity-csr.pem
    
  2. Signar el certificat de l'entitat amb la clau privada de la CA.

    openssl x509 -req -in entity-csr.pem -CA ca-cert.pem -CAkey ca-privkey.pem -CAcreateserial -out entity-cert.pem -days 365
    

Verificar un certificat signat per la CA

Per verificar un certificat signat per la CA, cal utilitzar la clau pública de la CA.

openssl verify -CAfile ca-cert.pem entity-cert.pem
📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.