OpenSSL

From aldeid
Jump to navigation Jump to search

Installation d'OpenSSL

Installation à partir des packages

# apt-get install openssl

Installation à partir des sources

Pré-requis

INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
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