Certificats SSL

Créer les certificats de l'autorité CA

Pour créer les certificats SSL, il est nécessaire d'une autorité de certification. Il est possible d'acheter un certificat SSL généré par une autorité de confiance ou bien d'en fabriquer un soi-même en utilisant OpenSSL.
Ce tutoriel utilise la plupart des paramètres définis par défaut du fichier de configuration d'OpenSSL de la distribution FreeBSD. En modifiant celui-ci, cela permettra d'optimiser la génération des certificats.
Ce fichier est utilisé par OpenSSL pour préconfigurer les réponses aux questions qui sont posées.

/etc/ssl/openssl.cnf
----------------------- dir = /root/sslCA # Where everything is kept default_days = 3650 # how long to certify for countryName_default = FR stateOrProvinceName_default = FRANCE localityName_default = Ville... 0.organizationName_default = Nom de Société -----------------------

Modifier les deux premiers paramètres indiqués dans le fichier ci-dessus, les autres étant optionnels.

Préparer le contexte de travail défini dans le fichier ci-dessous

# cd /root
# mkdir sslCA && chmod 700 sslCA
# cd /root/sslCA
# mkdir certs private newcerts
# echo 1000 > serial
# touch index.txt

Générer le certificat de l'autorité CA

# openssl req -new -x509 -days 3650 -extensions v3_ca \
? -keyout private/cakey.pem -out cacert.pem \
? -config /etc/ssl/openssl.cnf
Generating a 1024 bit RSA private key
...........++++++
.........................................................................++++++
writing new private key to 'private/cakey.pem'
Enter PEM pass phrase:
ce que vous voulez mais ne pas oublier!
Verifying - Enter PEM pass phrase:
ce que vous voulez mais ne pas oublier!
-----
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.
-----
Country Name (2 letter code) [FR]:
State or Province Name (full name) [FRANCE]:
Locality Name (eg, city) [Vile...]:
Organization Name (eg, company) [Nom de Société]:
Organizational Unit Name (eg, section) []:CA (société)
Common Name (e.g. server FQDN or YOUR name) []:host.example.com     
Email Address []:Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.

Préparer les questions qui vont servir à créer les certificats SSL

# cd ~root/sslCA
# openssl req -new -nodes -out example-req.pem \
? -keyout private/example-key.pem \
? -config /etc/ssl/openssl.cnf
Generating a 1024 bit RSA private key
.++++++
.++++++
writing new private key to 'private/example-key.pem'
-----
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.
-----
Country Name (2 letter code) [FR]:
State or Province Name (full name) [FRANCE]:
Locality Name (eg, city) [ESSONNE]:
Organization Name (eg, company) [Nom de Société]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:* Obligatoire
Email Address []:Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:* Facultatif
An optional company name []:

Compléter le champ Common Name avec : *.example.com pour le domaine et tous ses sous-domaines ou bien hostname.example.com pour être plus restrictif.
S'il y a un mot de passe pour le champ A challenge password, à chaque démarrage du serveur Apache il sera nécessaire de le resaisir.

Générer les certificats SSL pour un serveur web

# openssl ca -config /etc/ssl/openssl.cnf \
? -out example-cert.pem -infiles example-req.pem
Enter pass phrase for /root/sslCA/private/cakey.pem:ce que vous voulez mais ne pas oublier!
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 4097 (0x1001)
        Validity
            Not Before: Aug 21 07:03:59 2014 GMT
            Not After : Aug 18 07:03:59 2024 GMT
        Subject:
            countryName               = FR
            stateOrProvinceName       = FRANCE
            organizationName          = Nom de Société
            commonName                = *.example.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                C8:4F:C5:EF:AA:75:24:E3:8E:17:22:EC:FE:31:BB:70:D1:FD:83:DA
            X509v3 Authority Key Identifier: 
                keyid:E6:90:AB:A4:50:9D:3E:30:38:58:67:D9:5D:FE:BC:12:93:23:AF:1C

Certificate is to be certified until Aug 18 07:03:59 2024 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Utiliser les certificats pour un site

Copier les fichiers

# mkdir /etc/ssl/apache
# cp ~/sslCA/example-cert.pem /etc/ssl/apache/
# cp ~/sslCA/private/example-key.pem /etc/ssl/apache/

Editer le fichier

/usr/local/etc/apache22/extra/httpd-vhosts.conf
<VirtualHost _default_:443> SSLEngine on SSLCertificateFile "/etc/ssl/apache/example-cert.pem" SSLCertificateKeyFile "/etc/ssl/apache/example-key.pem" ServerName example.com:443 ServerAlias www.example.com DocumentRoot "/usr/local/www/example.com" <Directory "/usr/local/www/example.com"> Options Indexes FollowSymLinks AllowOverride All Order Allow,Deny Allow from all </Directory> ErrorLog "/var/log/apache/example.com-error.log" TransferLog "/var/log/apache/example.com-access.log" </VirtualHost>