Installation de votre SSL + Top sécurité
Maintenant que vous avez acheté votre certificat SSL Business et que vous êtes prêt à l'installer sur votre serveur, voici quelques astuces pour obtenir la qualité optimale au niveau sécurité et ainsi éviter que votre site ne s'affiche pas sur certains navigateurs (Android etc.) à cause d'une alerte de sécurité !
Les ingrédients
Pour réaliser cette recette il vous faudra :
- La clé de votre certificat :
jacques.sh.key
; - Votre certificat :
jacques.sh.crt
; - Le bundle de votre certificat :
jacques.sh.bundle
.
Le premier ingrédient est facile à trouver puisque vous l'avez généré vous-même en même temps que votre Certificate Signing Request
(CSR
).
Le second, le certificat, vous est délivré par une autorité de certification telle que gandi par exemple (là où vous l'avez acheté tout simplement).
La dernier est plus difficile à avoir. Voici comment faire.
Le bon bundle
Le bundle c'est votre chaîne de certification. C'est tout simplement un fichier qui contient les certificats de la chaine les uns en dessous des autres.
La chaine de certification commence par votre certificat et se termine par un certicat root. Par contre le bundle ne contient ni votre certificat ni le certificat root mais seulements ceux qui sont intermédiaires.
C'est pour cette raison que ces certificats sont aussi appelés des « intermédiaires » car c'est tout simplement leur rôle.
En général il y a 3 ou 4 certificats (en comptant le vôtre et le root) dans la chaîne (exemple avec google).
Le problème c'est d'avoir les bons intermédiaires pour avoir le bon bundle !
Prenons l'exemple d'un certificat Business COMODO chiffré avec l'algorithme SHA2 :
jacques.sh.crt
: c'est le vôtre ;COMODOExtendedValidationSecureServerCA2.pem
: c'est le dernier intermédiaire ;COMODORSAAddTrustCA.crt
: c'est le second intermédiaire. Il est signé par unroot certificate
;AddTrust External CA Root.cer
: c'est le certificat root. Il est auto-signé et dans le « Trust Store », donc il ne lèvera pas d'exception de sécurité.
Au passage, les seuls certificats auto-signés qui sont acceptés par défaut par votre navigateur sont ceux qui sont dans le Trust Store.
Et dans le bundle on met quoi alors ? Et bien on prend les intermédiaires et on les concatène dans leur priorité croissante : le plus proche de votre certificat en premier.
-----BEGIN CERTIFICATE-----
[...]o/Br0Oksxgn
KKlHMd99SUW[...]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[...]bCBDQSBSb29
sHNA7qxcS1u[...]
-----END CERTIFICATE-----
De -----BEGIN CERTIFICATE-----
à -----END CERTIFICATE-----
c'est un certificat. Le premier est donc le contenu de COMODOExtendedValidationSecureServerCA2.pem
et le second le contenu de COMODORSAAddTrustCA.crt
.
On a notre jacques.sh.bundle
!
Le problème c'est : comment on sait qu'on ne s'est pas trompé ?
Un certificat est signé par un autre, sauf le root qui est auto-signé. Donc si on veut le « papa » d'un certificat, que ça soit un intermédiaire ou le certifiat final, il nous faut savoir qui l'a émis.
Pour ça on ouvre le certificat et on trouve le Common name
du Issuer
. En gros on veut le nom du certificat parent.
Voici un exemple avec un intermédiaire COMODO (présicément celui de notre exemple, le COMODORSAAddTrustCA.crt
) :
Le papa c'est donc AddTrust External CA Root
. Oh bah tiens, c'est le root !
Une fois votre certificat installé sur votre serveur avec son bundle, pensez à vérifier que tout est bon ici : https://www.sslshopper.com/ssl-checker.html
Ce site vous dira si votre chaîne n'est pas bonne.
On dit souvent qu'on a pas besoin d'inclure les intermédiaires. Mais il s'avère que certains navigateurs (surtout sur mobile) ne font pas de recherche pour trouver les certificats intermédiaires pour vous. Il faut les fournir !
Note : votre certificat doit être chiffré avec l'algorithme SHA2 car le SHA1 est en fin de vie. Par conséquent le SHA2 n'étant pas géré par tous les navigateurs à l'heure où j'écris ces lignes, il est possible que vous soyez obligé d'ajouter un intermédiaire "cross-signed" dans votre bundle. Plus d'infos ici sur les intermédiaires ici : http://wiki.gandi.net/fr/ssl/intermediate
Installation sur Apache
Là c'est super simple, il vous suffit de reproduire ça dans votre VirtualHost en changeant les chemins !
Évidemment n'oubliez pas de copier les fichiers sur votre serveur !
<IfModule mod_ssl.c>
# Activate SSL
SSLEngine on
# Certificates
SSLCertificateFile /etc/ssl/certs/jacques.sh/jacques.sh.crt
SSLCertificateKeyFile /etc/ssl/certs/jacques.sh/jacques.sh.key
SSLCertificateChainFile /etc/ssl/certs/jacques.sh/jacques.sh.bundle
</IfModule>
Et la sécurité dans tout ça ? Là on a notre certificat mais ça ne nous donne pas une note A+ sur SSL Labs !
On va ajouter quelques petits détails sous nos certificats :
# Security
SSLCipherSuite AES128+EECDH:AES128+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# More security - Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
Attention à la partie qui ne concerne que Apache >= 2.4 !
On a donc ceci dans notre VirtualHost :
<IfModule mod_ssl.c>
# Activate SSL
SSLEngine on
# Certificates
SSLCertificateFile /etc/ssl/certs/jacques.sh/jacques.sh.crt
SSLCertificateKeyFile /etc/ssl/certs/jacques.sh/jacques.sh.key
SSLCertificateChainFile /etc/ssl/certs/jacques.sh/jacques.sh.bundle
# Security
SSLCipherSuite AES128+EECDH:AES128+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# More security - Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
</IfModule>
Vous trouverez plus d'infos sur la partie sécurité sur Cipherli.st pour Apache/Nginx/Lighttpd/haproxy…
Avec la CipherSuite
ci dessus certains navigateurs comme IE8 sur Windows XP ne pourront pas afficher votre site. C'est un choix qui n'est pas anodin.
Vous pouvez utiliser le générateur de configuration SSL proposé par Mozilla pour avoir quelque chose qui vous convienne.
N'oublier pas de lancer un petit apache2ctl -t
avant de recharger la configuration.
Et en dernier, testez votre site sur ssllabs !