OpenSSL
Installation d'OpenSSL
Installation à partir des packages
# apt-get install openssl
Installation à partir des sources
Pré-requis
Thank you for your comprehension.
Installation
$ cd /data/src/ $ wget http://www.openssl.org/source/openssl-1.0.0a.tar.gz $ tar xzvf openssl-1.0.0a.tar.gz $ cd openssl-1.0.0a/ $ ./config --prefix=/usr/local --openssldir=/usr/local/openssl $ make $ sudo make install
Génération de certificats X509 avec OpenSSL
Abréviations
CA
- CA : Certification Authority, autorité de certification
CSR
- CSR : Certificate Signing Request, demande de certificat
CRL
- CRL : Certificate Revocation List, liste de révocation de certificats
DER
- DER : Definite Encoding Rules
- Utilisé pour encoder des certificats X509 en notation ASN.1
- Extensions usuelles : .der, .cer, .crt, .cert
PEM
- PEM : Privacy Enhanced Mail
- Peut contenir des clés privées, des clés publiques et des certificats X509.
- Le format PEM est du DER encodé en base64 auquel sont ajoutés des en-têtes en ASCII.
- Extensions usuelles : .pem, .cer, .crt, .cert
Construction de l'arborescence
Construire l'arborescence suivante :
/root `-- ssl |-- ca # Certificat de l'autorité racine | |-- certs | |-- index.txt | |-- newcerts | `-- serial |-- cassl # Certificats de l'autorité intermédiaire | |-- certs # et du serveur | |-- index.txt | |-- newcerts | `-- serial `-- openssl.cnf
A l'aide des commandes suivantes :
# mkdir -p /root/ssl/ # cd /root/ssl/ # mkdir -p ca/newcerts # Répertoire recueillant les certificats # émis par CA ROOT # touch ca/index.txt # Base de données des certificats émis # echo '01' > ca/serial # Numéro de série, initialisé à 1. # Incrémenté par la suite # mkdir -p cassl/newcerts # touch cassl/index.txt # echo '01' > cassl/serial
Création du fichier de configuration openssl.cnf
Créer, dans le répertoire /root/ssl/ le fichier openssl.cnf en y reportant les lignes suivantes :
[ ca ] default_ca = CA_default [ CA_default ] dir = . certs = $dir/ca/certs new_certs_dir = $dir/ca/newcerts database = $dir/ca/index.txt certificate = $dir/ca/ca.pem serial = $dir/ca/serial private_key = $dir/ca/ca.key default_days = 365 default_md = sha1 preserve = no policy = policy_match [ CA_ssl_default ] dir = . certs = $dir/cassl/certs new_certs_dir = $dir/cassl/newcerts database = $dir/cassl/index.txt certificate = $dir/cassl/cassl.pem serial = $dir/cassl/serial private_key = $dir/cassl/cassl.key default_days = 365 default_md = sha1 preserve = no policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match localityName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] distinguished_name = req_distinguished_name [ req_distinguished_name ] countryName = Pays countryName_default = FR stateOrProvinceName = Departement stateOrProvinceName_default = Eure-et-Loir localityName = Ville localityName_default = Chartres organizationName = Organisation organizationName_default = Aldeid commonName = Nom ou URL commonName_max = 64 emailAddress = Adresse Email emailAddress_max = 40 [CA_ROOT] nsComment = "CA Racine" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always basicConstraints = critical,CA:TRUE,pathlen:1 keyUsage = keyCertSign, cRLSign [CA_SSL] nsComment = "CA SSL" basicConstraints = critical,CA:TRUE,pathlen:0 subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always issuerAltName = issuer:copy keyUsage = keyCertSign, cRLSign nsCertType = sslCA [SERVER_RSA_SSL] nsComment = "Certificat Serveur SSL" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always issuerAltName = issuer:copy subjectAltName = DNS:www.webserver.com, DNS:www.webserver-bis.com basicConstraints = critical,CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment nsCertType = server extendedKeyUsage = serverAuth [CLIENT_RSA_SSL] nsComment = "Certificat Client SSL" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always issuerAltName = issuer:copy subjectAltName = critical,email:copy,email:[email protected],email:[email protected] basicConstraints = critical,CA:FALSE keyUsage = digitalSignature, nonRepudiation nsCertType = client extendedKeyUsage = clientAuth
Génération du certificat racine (root CA)
Afin de générer une bi-clé RSA (avec passphrase), entrez la commande suivante :
# openssl genrsa -out ca/ca.key -des3 2048
L'étape suivante consiste en la génération du root CA auto-signé :
# openssl req -new \ -x509 \ # Génération d'un certificat autosigné, # et non d'une simple requête -key ca/ca.key \ # La clé publique est extraite du bi-clé précédente -out ca/ca.pem \ # Le certificat est copié -config ./openssl.cnf \ # Utilisation du fichier de configuration créé -extensions CA_ROOT # La section CA_ROOT est utilisée (cf Annexe) Enter pass phrase for ca/ca.key:<<passphrase>> You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Pays [FR]:<<ENTER>> Departement [Eure-et-Loir]:<<ENTER>> Ville [Chartres]:<<ENTER>> Organisation [Aldeid]:<<ENTER>> Nom ou URL []:Sebastien Damaye Adresse Email []:[email protected]
L'étape qui suit est optionnelle mais permet de s'assurer du bon fonctionnement des opérations précédentes:
# openssl x509 -in ca/ca.pem -text -noout
Elle permet d'afficher des informations sur le certificat racine.
Maintenant que le certificat racine est généré, nous allons maintenant générer un certificat de l'autorité intermédiaire SSL.
Certificat de l'autorité intermédiaire SSL
Afin de générer une bi-clé RSA (avec passphrase), entrez la commande suivante :
# openssl genrsa -out cassl/cassl.key -des3 2048
La commande suivante permet de générer la demande de certificat :
# openssl req -new \ # Génération d'une demande de certificat -key cassl/cassl.key \ -out cassl/cassl.crs \ -config ./openssl.cnf
Ce certificat va être signé par l'autorité root (CA_ROOT), CA par défaut dans openssl.cnf.
# openssl ca -out cassl/cassl.pem \ -config ./openssl.cnf \ -extensions CA_SSL \ -infiles cassl/cassl.crs # Demande de certificat à signer
Si l'opération s'est correctement déroulée :
- Le certificat signé par CA_ROOT correspond à cassl/cassl.pem
- Une copie du certificat est créée dans ca/newcerts/01.pem
- Les fichiers ca/serial et ca/index.txt sont mis à jour
Nous allons maintenant générer un certificat serveur.
Génération du certificat serveur
Génération d'un bi-clé RSA :
# openssl genrsa -out cassl/serverssl.key -des3 1024
Demande de certificat :
# openssl req -new \ -key cassl/serverssl.key \ -out cassl/serverssl.crs \ -config ./openssl.cnf
Ce certificat va être signé par l'autorité CA_SSL.
# openssl ca -config ./openssl.cnf \ -name CA_ssl_default \ # Le certificat utilisé pour signer # la requête est celui de CA SSL -extensions SERVER_RSA_SSL \ -infiles cassl/serverssl.crs
Vérifions que le certificat est généré correctement :
- Le certificat serveur correspond au fichier cassl/newcerts/01.pem
- Les fichiers cassl/serial et cassl/index.txt sont mis à jour