Créer et installer des certificats SSL
L'astuce pour notre environnement local de développement est d'être sa propre autorité de certification , et de générer les certificats pour ses sites locaux.
On utiliseopenssl
pour ce faire.
La création du premier certificat SSL se déroulera en 3 étapes:
1. Création d'une autorité de certification
2. Génération du certificat SSL X509 pour votre site
3. Configuration d'Apache
1. Création d'une autorité de certification
1.1 Mise en place du répertoire
Tous les fichiers de configuration, key, certificat.. seront placés dans le répertoire /srv/ssl
.
- Nous allons créer un répertoire
/srv/ssl
- Créer les sous répertoires
certs
,crl
,newcerts
etprivate
- Un fichier
serial
avec uniquement “01” à l'intérieur qui donne le numéro du prochain certificat - Un fichier
index.txt
dans lequel seront enregistrés les informations pour chaque certificat - Notre fichier de configuration ssl
openssl.cnf
(copie du fichier/usr/lib/ssl/openssl.cnf
).
$ sudo mkdir -p /srv/ssl $ cd /srv/ssl srv/ssl $ sudo mkdir certs crl newcerts private srv/ssl $ echo 01 | sudo tee serial srv/ssl $ sudo touch index.txt srv/ssl $ sudo cp /usr/lib/ssl/openssl.cnf
1.2 Configuration
On informe openssl
que le répertoire à utiliser est notre répertoire /srv/ssl
en éditant le fichier /srv/ssl/openssl.cnf
$ sudo gedit /srv/ssl/openssl.cnf
Au niveau du “paragraphe” [CA_default]
à la ligne dir = ..
on renseigne notre répertoire /srv/ssl
[CA_default] dir = /srv/sslIl est aussi possible de modifier d'autres valeurs, nom, pays….etc
1.3 Création de la clé privé de l'autorité de certification
La commande est assez longue, et il faudra se trouver et mémoriser une phrase passe.
La phrase passe sera nécessaire à chaque fois qu'on voudra certifier une clé SSL pour un de nos sites.
Cette procédure crée la clé privée de l'autorité de certification, c'est à dire elle génère le fichier /srv/ssl/private/cakey.pem
.
$ cd /srv/ssl /srv/ssl $ sudo openssl genrsa -des3 -out private/cakey.pem 4096
Il faut alors taper la phrase passe quand elle est demandée
2. Création d'un certificat pour monsite.fr
2.1 Modification du fichier openssl.cnf
Plusieurs modifications sont à apporter dans le fichier /srv/ssl/openssl.cnf
(ou bien il faudrait créer un fichier de configuration par domaine)
$ cd /srv/ssl srv/ssl $ sudo gedit /srv/ssl/openssl.cnf
- Décommenter la ligne
req_extensions = v3_req
- Dans la section
[ v3_req ]
ajouter la lignesubjectAltName = @alt_names
- Plus loin, ou à la fin, ajouter une section
[ alt_names]
:
[ alt_names ] DNS.1 = monsite.fr
2.2 Création d'une clé
Ici on va créer deux fichiers :
- la clé privée
/srv/ssl/monsite.fr/monsite.fr.key.pem
- et un clé sans phrase passe
/srv/ssl/monsite.fr/monsite.fr.key.nopass.pem
On commence par créer le répertoire /srv/ssl/monsite.fr
, où seront enregistrées les clés de monsite.fr
/srv/ssl$ sudo mkdir monsite.fr /srv/ssl$ cd monsite.fr
On génère la clé privée de monsite.fr, ( il sera demandé une phrase passe à retenir!, celle de monsite.fr)
/srv/ssl/monsite.fr $ sudo openssl genrsa -des3 -out monsite.fr.key.pem 4096 Generating RSA private key, 4096 bit long modulus ...............................................................++ ..................................++ e is 65537 (0x010001) Enter pass phrase for monsite.fr.test.key.pem: Verifying - Enter pass phrase for monsite.fr.key.pem:
Puis, On créé une clé sans mot de passe
/srv/ssl/monsite.fr $ sudo openssl rsa -in monsite.fr.key.pem -out monsite.fr.key.nopass.pem Enter pass phrase for monsite.fr.key.pem: writing RSA key
2.3 Création du certificat pour cette clé
On crée ici le fichier /srv/ssl/monsite.fr/monsite.fr.csr.pem
, certificat pour la clé de notre domaine monsite.fr.
La phrase passe, la deuxième, celle de monsite.fr.key.pem
, est demandée,
Dans Common Name
on met le domaine, mais ce n'est pas obligatoire car il utilise les alt_names
du fichier /srv/ssl/openssl.cnf
par défaut
Il ne faut pas donner de mot de passe à la fin de la procédure.
/srv/ssl/monsite.fr$ sudo openssl req -config ../openssl.cnf -new -key monsite.fr.key.pem -out monsite.fr.csr.pem Enter pass phrase for monsite.fr.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) [Some-State]:France Locality Name (eg, city) []:Paris Organization Name (eg, company) [Organisation]:Mon organisation Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:monsite.fr Email Address []:pointal@truc.fr Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
2.4 Signature de la demande
On crée ici le fichier /srv/ssl/monsite.fr/monsite.fr.cert.pem
Il s'agit de valider notre certificat par l'autorité de certification, créée en 1.
Tout d'abord, nous avons une petite modification à apporter au fichier /srv/ssl/openssl.cnf
$ sudo gedit /srv/ssl/openssl.cnf
Dans la section [ CA_default ]
on décommente la ligne copy_extensions = copy
On peut alors signer la demande, cette fois-ci, la petite phrase de l'autorité, celle du début, ( la clé /srv/ssl/private/cakey.pem
) sera demandée,
Sinon, on répond Y
$ cd /srv/ssl/monsite.fr /srv/ssl/monsite.fr $ sudo openssl ca -config ../openssl.cnf -policy policy_anything -out monsite.fr.cert.pem -infiles monsite.fr.csr.pem Using configuration from ../openssl.cnf Enter pass phrase for /srv/ssl/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 2 (0x2) Validity Not Before: Jan 23 09:34:35 2018 GMT Not After : Jan 23 09:34:35 2019 GMT Subject: countryName = FR stateOrProvinceName = France localityName = Paris organizationName = Mon organisation organizationalUnitName = commonName = monsite.fr emailAddress = pointal@truc.fr X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 44:2C:5F:39:94:FA:DA:1F:1D:F6:74:E0:3A:3C:CF:9D:B2:90:45:0F X509v3 Authority Key Identifier: keyid:D5:58:B3:DF:12:40:2C:41:18:F5:36:22:F9:C9:88:20:59:46:8E:5F X509v3 Subject Alternative Name: DNS:monsite.fr X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment Certificate is to be certified until Jan 23 09:34:35 2019 GMT (365 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
3. Configuration de Apache
3.1 Activation du mode SSL de Apache
$ sudo a2enmod ssl
3.2 Enregistrement du site sur Apache
Il suffit de créer un nouveau site parmi ceux enregistrés dans /etc/apache2/sites-available
qui écoute le port 443
On indiquera dans le ficher l'adresse du certificat et de la clé
$ sudo gedit /etc/apache2/sites-available/monsite.fr-ssl.conf
<VirtualHost *:443> ServerName monsite.fr DocumentRoot /var/www/monsite.fr SSLEngine On SSLCertificateFile /srv/ssl/monsite.fr/monsite.fr.cert.pem SSLCertificateKeyFile /srv/ssl/monsite.fr/monsite.fr.key.nopass.pem SSLProtocol all -SSLv2 <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/monsite.fr> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost>
Il faut ensuite activer le site et redémarrer Apache
$ sudo a2ensite monsite.fr-ssl $ sudo service apache2 restart
Et enfin, on peut accéder au site [ https://monsite.fr](https://monsite.fr), en acceptant une exception de sécurité.
Contact
Elisabeth Pointal
elisabeth.pointal@free.fr
CV
Page perso