Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

code:server:lamp:ssl [14/06/2018 20:38]
elisabeth [3. Configuration de Apache]
code:server:lamp:ssl [15/06/2018 22:22]
Ligne 1: Ligne 1:
-{{htmlmetatags>​metatag-robots=(index,​follow) metatag-author=(Elisabeth Pointal) metatag-keywords=(certificat SSL) metatag-description=(Créer des certificats SSL X509 pour votre environnement local Apache2.)}} 
  
-====== 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 utilise ''​openssl''​ 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. [[#​creation_d_un_certificat_pour_monsitefr | Génération du certificat SSL X509 pour votre site]] 
->  3. [[#​configuration_de_apache | 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''​ et ''​private''​ 
-  - 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''​). 
-<​code>​ 
-$ 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 
-</​code>​ 
- 
-==== 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''​ 
- 
-<​code>​ 
-$ sudo gedit /​srv/​ssl/​openssl.cnf 
-</​code>​ 
-Au niveau du "​paragraphe"​ ''​[CA_default]''​ à  la ligne ''​dir = ..''​ on renseigne notre répertoire ''/​srv/​ssl'' ​ 
-<sxh txt; title: /​srv/​ssl/​openssl.cnf>​ 
-[CA_default] 
-dir = /srv/ssl 
-</​sxh>  ​ 
-Il 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''​. 
-<​code>​ 
-$ cd /srv/ssl 
-/srv/ssl $ sudo openssl genrsa -des3 -out private/​cakey.pem 4096 
-</​code>​ 
-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) 
-<​code>​ 
-$ cd /srv/ssl 
-srv/ssl $ sudo gedit /​srv/​ssl/​openssl.cnf 
-</​code>​ 
-  -  Décommenter la ligne ''​req_extensions = v3_req''​ 
-  -  Dans la section ''​[ v3_req ]''​ ajouter la ligne ''​subjectAltName = @alt_names''​ 
-  -  Plus loin, ou à la fin, ajouter une section ''​[ alt_names]'': ​   ​ 
-<sxh txt>[ alt_names ]  ​ 
-DNS.1 = monsite.fr</​sxh>​ 
- 
- 
-==== 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** 
-<​code>​ 
-/srv/ssl$ sudo mkdir monsite.fr 
-/srv/ssl$ cd monsite.fr 
-</​code>​ 
- 
-On génère la clé privée de **monsite.fr**,​ ( il sera demandé une phrase passe à retenir!, celle de **monsite.fr**) 
-<​code>​ 
-/​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:​ 
-</​code>​ 
- 
-Puis, On créé une clé sans mot de passe 
- 
-<​code>​ 
-/​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 
-</​code> ​ 
-==== 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. 
- 
-<​code>​ 
-/​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 []: 
-</​code>​ 
- 
-==== 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''​ 
-<​code>​ 
- $ sudo gedit /​srv/​ssl/​openssl.cnf 
-</​code>​ 
-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 
-<​code>​ 
-$ 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 
-</​code>​ 
-===== 3. Configuration de Apache ===== 
-==== 3.1 Activation du mode SSL de Apache ==== 
-<​code>​ 
-$ sudo a2enmod ssl 
-</​code>​ 
-==== 3.2 Enregistrement du site sur Apache ==== 
- 
-Il suffit de créer un nouveau site parmi ceux enregistré dans ''/​etc/​apache2/​sites-available''​ qui écoute le port 443  ​ 
- 
-On indiquera dans le ficher l'​adresse du certificat et de la clé 
- 
-<​code>​ 
-$ sudo gedit /​etc/​apache2/​sites-available/​monsite.fr-ssl.conf 
-</​code>​ 
-<sxh txt> 
-<​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>​ 
-</​sxh>​ 
- 
-Il faut ensuite activer le site et redémarrer Apache 
-<​code>​ 
-$ sudo a2ensite monsite.fr-ssl 
-$ sudo service apache2 restart 
-</​code>​ 
- 
-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>​\\ 
-[[http://​elisabeth.pointal.org/​cv|CV ]]\\ 
-[[http://​elisabeth.pointal.org|Page perso ]]