From 0855d45d54e92d0637e939b2c23c8b93022e5e92 Mon Sep 17 00:00:00 2001 From: gcolpart Date: Fri, 21 Oct 2016 00:33:21 +0200 Subject: [PATCH] night review --- HowtoSSL.md | 98 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 64 insertions(+), 34 deletions(-) diff --git a/HowtoSSL.md b/HowtoSSL.md index dbfd259a..380aecad 100644 --- a/HowtoSSL.md +++ b/HowtoSSL.md @@ -3,32 +3,33 @@ title: Howto SSL categories: security web ... -SSL (Secure Sockets Layer) est un protocole de sécurisation des échanges réseau. -Cela se base sur un principe de clé privée et clé publique (certificat) signée par une autorité. -On parle désormais de SSL/TLS car les normes récentes ont renommé SSL en TLS (Transport Layer Security). +SSL (*Secure Sockets Layer*) est un protocole de sécurisation des échanges réseau. +Cela se base sur un principe de clé privée et clé publique (certificat) signée par une autorité de certification. +On parle désormais de **SSL/TLS** car les normes récentes ont renommé SSL en TLS (*Transport Layer Security*). ## Gestion clé privée / certificat -### Générer un .csr +### Générer une demande de certificat (CSR) + +Pour générer une clé privée non chiffrée (private.key) et sa demande de certificat associé (demande.csr) à transmettre à une autorité de certification : -Pour générer une clée privée non chiffrée (private.key) et sa demande de certificat associé (demande.csr) à transmettre à une autorité de certification : ~~~ $ openssl req -newkey rsa:2048 -sha256 -nodes -keyout private.key -out demande.csr ~~~ -À des fins "pédagogiques", on peut découper en 2 étapes, à savoir la génération de la clé privée (non chiffrée) et la demande de certificat : +À des fins pédagogiques, on peut découper la cette génération en 2 étapes, à savoir la génération de la clé privée et la demande de certificat : ~~~ $ openssl genrsa -out private.key 2048 $ openssl req -new -sha256 -key private.key -out demande.csr ~~~ -Pour générer une demande de certificat à partir d'un certificat existant (certificate.crt) : +Pour générer une demande de certificat à partir d'un certificat existant (certificat.crt) : ~~~ -$ openssl x509 -x509toreq -sha256 -in certificate.crt -out demande.csr -signkey private.key +$ openssl x509 -x509toreq -sha256 -in certificat.crt -out demande.csr -signkey private.key ~~~ ### Générer un certificat auto-signé @@ -48,7 +49,7 @@ Note : sous Debian, pour regénérer le certificat *snakeoil* (certificat autog ### Générer un certificat multi-domaines avec subjectAltName -Un certificat avec **subjectAltName** permet d'ajouter des noms de domaine secondaires (*subjectAltName*) en plus du nom de domaine principal (*Common Name*), ce qui est supporté par 99.9% des navigateurs récents. +Un certificat avec **subjectAltName** permet d'ajouter des noms de domaine secondaires (*subjectAltName*) en plus du nom de domaine principal (*Common Name*), ce qui est supporté par 99.9% des navigateurs récents (mais cela coûte cher chez les autorités de certification). Modifier une copie du fichier `/etc/ssl/openssl.cnf` avant de générer le certificat pour : @@ -88,6 +89,7 @@ Verifying - Enter PEM pass phrase: ### Changer le mot de passe d'une clé privée Il suffit de répéter les 2 étapes ci-dessus : + ~~~ $ openssl rsa -in private.pem -out private.key $ openssl rsa -in private.key -des3 -out private-new.pem @@ -211,7 +213,7 @@ Pour un service en HTTPS avec l'option SNI qui permet d'envoyer un nom de domain $ openssl s_client -CApath /etc/ssl/certs -servername ssl.example.com -connect 192.0.2.42:443 ~~~ -**Le certificat est conforme avec votre base locale de certificats CA si l'on obtient Verify return code: 0 (ok)** +**Le certificat est conforme avec votre base locale de certificats CA si vous obtenez `Verify return code: 0 (ok)` ** Si le code de retour est différent de 0, le certificat n'est pas conforme pour différentes raisons : @@ -237,37 +239,41 @@ D'autres outils également utiles : État du marche en 2015 : -Pour louer un certificat lié à **UN** nom de domaine : +Pour louer un certificat lié à **UN** enregistrement DNS : -* 0 EUR/ an : Let's Encrypt -* 0 EUR/ an : StartSSL Free : -* 6 EUR/ an : Comodo PositiveSSL : -* 12 EUR/ an : Gandi SSL standard : -* 99 EUR/ an : Thawte SSL123 : +* 0 EUR/an : Let's Encrypt +* 0 EUR/an : StartCom/StartSSL Free : +* 8.20 EUR/an : Comodo PositiveSSL : +* 12 EUR/an : Gandi SSL standard : +* 129 EUR/an : Thawte SSL123 : -* 65 EUR/ an : Comodo PositiveSSL : http://www.namecheap.com/ssl-certificates/comodo/positivessl-wildcard-certificate.aspx -* 120 EUR/ an : Gandi SSL standard : http://www.gandi.net/ssl/standard -* 449 eur/ an : Thawte SSL Wildcard : http://www.thawte.fr/ssl/wildcard-ssl-certificates/ +Pour louer un certificat « wildcard » (pour une infinité de sous-domaines du type `*.example.com`) : + +* 85.62 EUR/an : Comodo PositiveSSL : +* 120 EUR/an : Gandi SSL standard : +* 449 EUR/an : Thawte SSL Web Server Wildcard : Pour louer un certificat multi-domaines : -* Thawte +* 40 EUR/an (pour 3 enregistrements DNS) et jusqu'à 210 EUR/an (30 enregistrements DNS) : +* 129 EUR + <99 EUR/an : Thawte SSL123 avec SAN : Pour louer un certificat EV : -* Gandi -* Thawte +* 249 EUR/an : Thawte SSL Web Server avec EV : -### À propos de StartSSL +### À propos de StartCom/StartSSL -Il faut noter que *StartSSL Free* est bien gratuit mais a plusieurs inconvénients : +Il faut noter que l'offre *StartStartSSL Free* de StartCom est bien gratuite mais il y a plusieurs inconvénients : -* suite à des problèmes (TODO: mettre liens) Firefox envisage de supprimer les certificats CA de StartSSL en XXXX (TODO: mettre date et liens de référence) +* StarCom/StartSSL a été [racheté en 2016 par l'autorité de certification chinoise WoSign](https://www.wosign.com/english/News/WoSign_completed_equity_investment_to_StartCom_CA.htm) qui [a de nombreux problèmes selon la fondation Mozilla](https://wiki.mozilla.org/CA:WoSign_Issues)... ce qui a pour conséquence que [Mozilla envisage de retirer les certificats CA de StartSSL](https://groups.google.com/forum/?nomobile=true#!topic/mozilla.dev.security.policy/BV5XyFJLnQM), notamment [Firefox 51 devrait bannir les certificats émis par StartCom/StartSSL à partir du 21 octobre 2016 !!](https://bugzilla.mozilla.org/show_bug.cgi?id=1311832) * les certificats gratuits mentionnent les informations personnelles de la personne physique qui a créé le compte * la gestion du renouvellement est lourde (votre compte expire tous les ans, et vous ne pouvez le renouveler que quelques jours avant...) * vous pouvez créer uniquement des certificats liés à la personne physique qui a créé le compte (nom de domaine qui vous appartient personnellement ou appartient à votre société) : si vous créez plusieurs certificats pour le compte d'autres sociétés (vos clients par exemple) StartSSL finira pas rejeter vos demandes et vous devrez créer un compte pour chaque société * la révocation d'un certificat est payante (environ 20 EUR) -* différents problèmes et bugs, voir FAQ +* différents problèmes et bugs, voir [#FAQ]() + +L'avantage de StartSSL est que pour 150 EUR/an, vous pouvez obtenir la validation « Organization » (après une lourde procédure de vérifications) et créer ensuite une infinité de certificats Wildcard valables 3 ans. ### À propos de Let's Encrypt @@ -276,16 +282,33 @@ Il faut noter que *StartSSL Free* est bien gratuit mais a plusieurs inconvénien ## Sécurité et qualité des certificats -Faille -Apache -Nginx -A+ sur SSL LABS +### Failles de sécurité + +TODO + +#### Faille PODDLE + +TODO + +#### Faille FREAK + +TODO + +### Avoir A+ sur SSL LABS + +#### Configuration Apache + +TODO + +#### Configuration Nginx + +TODO ## FAQ -### Erreur "The OCSP server has no status for the certificate" avec nouveau certificat StartSSL +### Erreur "The OCSP server has no status for the certificate" avec StartSSL -Suite à la mise en place d'un certificat délivré par StartSSL, vous obtenez une erreur du type "An error occurred during a connection to ssl.example.com. The OCSP server has no status for the certificate. (Error code: sec_error_ocsp_unknown_cert) ? +Suite à la mise en place d'un nouveau certificat délivré par StartSSL, vous obtenez une erreur du type "An error occurred during a connection to ssl.example.com. The OCSP server has no status for the certificate. (Error code: sec_error_ocsp_unknown_cert) ? StartSSL semble mettre entre 6 et 12h à propager ses nouveaux certificats sur son serveur OCSP. Il faut donc patienter… @@ -293,7 +316,14 @@ StartSSL semble mettre entre 6 et 12h à propager ses nouveaux certificats sur s Il y a un bug avec l'interface d'administration StartSSL avec Firefox (Firefox embarque un mauvais certificat). Voir le bug report et une solution temporaire : -Il faut supprimer le certificat "StartCom? Certification Authority" de l'autorité StartCom de type "Securité personne" (Software Security Device) dans les préférences de Firefox (Avancée --> Certificat). - Certificat). Voir Une autre "astuce" est d'utiliser un autre navigateur… + +### Ajouter des certificats CA sous Debian + +Afin d'ajouter des certificats CA il faut copier les fichiers .crt dans `/usr/local/share/ca-certificates/` puis exécuter : + +~~~ +# dpkg-reconfigure ca-certificates +~~~