Différences entre versions de « Https »

De Mi caja de notas

(Page créée avec « {{:iwc:https}} »)
 
 
(29 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
{{:iwc:https}}
+
* Certificat SSL installé sur le [[domaine]] `ducamp.me` le [[2019-307]] pour un accès [[https]] : `http://ducamp.me` redirige vers `https://ducamp.me`
 +
* Sous-domaines accessibles en https : `https://github.ducamp.me`.  (Tableau de bord SSL https://admin.gandi.net/certificate/6d6c111c-cec8-11e7-8ab8-00163e6dc886/)
 +
 
 +
 
 +
----
 +
''Cette page a démarré sur [[iwc:https]] et migrera après traduction sur [[iwc:https-fr]]
 +
 
 +
'''<dfn>HTTPS</dfn>''' est l'abréviation de '''Hypertext Transfer Protocol Secure''', littéralement « protocole de transfert hypertexte sécurisé », supporté par les serveurs web (comme [[Apache]] & [[nginx]]) et les navigateurs. HTTPS est la combinaison du Protocole de Transfert Hypertexte (HTTP) avec une couche de chiffrement comme les protocoles SSL/TLS.
 +
 
 +
== Pourquoi ==
 +
Pourquoi ?
 +
* '''Confidentialité par défaut'''. Tim Bray a posté sur le fait de servir son site via https (https://www.tbray.org/ongoing/When/201x/2012/12/02/HTTPS)
 +
** "Ce blog n'est pas très controversé, mais si les choses "controversées" sont privées, alors la vie privée est elle-même suspecte.
 +
** "Parce que je peux, c'est la seule petite partie de l'Internet où j'ai le contrôle complet." (https://willnorris.com/2012/12/all-https-all-the-time)
 +
* '''Réduire la persécution politique/religieuse/sociale.''' Si l'employeur d'un lecteur, une école/université, une communauté religieuse ou la famille suivent l'usage du net, activer le HTTPS/SSL veut dire qu'ils ne peuvent pas voir quelles sont les pages spécifiques qui ont été vues sur ce site. C'est un bon outil (loin d'être parfait) pour se protéger contre les "petits adversaires" —persécuteurs politiques, des membres de la famille homophobes, des communautés religieuses intolérantes à la critique ou à la libre pensée— de voir quelles sont les pages d'un site Web particulier que quelqu'un est en train de regarder.
 +
** [[iwc:User:Tommorris.org|tommorris]] : Si je me trompe de cybersécurité, certains de mes amis pourraient ne pas avoir de maisons.
 +
* '''Gains de performance''' à utiliser HTTP/2 (https://www.httpvshttps.com). La plupart des vendeurs de navigateurs ont décidé de n'implémenter que HTTP/2 au lieu de TLS, i.e. <code>https://</code>. [http://http2.github.io/faq/#does-http2-require-encryption]
 +
* '''Rang de recherche.''' Google classe désormais les sites https plus haut que les sites non-https (http://googleonlinesecurity.blogspot.co.uk/2014/08/https-as-ranking-signal_6.html)
 +
* '''Intégrité de pubication.''' Si vos pages sont distribuées via https, les ISP's, ou quiconque au milieu, ne peuvent pas injecter de contenu et des headers dans votre site - c'est à dire :
 +
** 2014-09-08 [http://arstechnica.com/tech-policy/2014/09/why-comcasts-javascript-ad-injections-threaten-security-net-neutrality/ Comcast Wi-Fi serving self-promotional ads via JavaScript injection] - thus injecting Comcast JS into pages on YOUR site when viewed by people on Comcast Wi-Fi. Si votre site [[HTTPS#Level_5_security|REQUIERT HTTPS (niveau 5 en-dessous)]] alors il empêche cette injection.
 +
* '''Réduire le traçage niveau opérateur'''
 +
** 2014-10-24 [http://arstechnica.com/security/2014/10/verizon-wireless-injects-identifiers-link-its-users-to-web-requests/ Verizon Wireless injecte des identificateurs qui lient ses utilisateurs à des requêtes Web] en ajoutant un en-tête HTTP <code>X-UIDH</code> aux requêtes clients (toutes les requêtes http téléphone/browser/app y compris celles par connexion à partir d'un ordinateur portable, peut-être aussi les mifis). <br/>'''Testez (essayez) pour voir si votre périphérique/réseau envoie X-UIDH :'''
 +
 
 +
*** http://uidh.crud.net/
 +
*** http://students.cs.uri.edu/~ben/test.php
 +
*** SECURE: https://students.cs.uri.edu/~ben/test.php
 +
**** NE DEVRAIT PAS envoyer X-UIDH néanmoins...
 +
** 2014-10-30 [http://www.propublica.org/article/somebodys-already-using-verizons-id-to-track-users Quelqu'un Utilise Déjà l'ID de Verizon pour Traquer les Utilisateur] - notez que AT&T faisait quelque chose de similaire, et a confirmé : <blockquote>AT&T's [...] acknowledges that it would be impossible to insert the identifier into web traffic if it were encrypted using HTTPS, but offers an easy solution – to instruct web servers to force phones to use an unencrypted connection.</blockquote> Par conséquent pour empêcher les opérateurs de suivre les visiteurs d'un site web, votre site doit avoir un  [[Https#Niveau_5_sécurité|HTTPS (niveau 5 en-dessous)]] (2015-01-15 vérifié avec & sans par {{aaronpk}} & {{benthatmust}}). Néanmoins une requête HTTP sur votre site (avant redirection) enverra encore le header (par conséquent traçable par un opérateur).
 +
** 2015-01-14 [http://www.propublica.org/article/zombie-cookie-the-tracking-cookie-that-you-cant-kill Zombie Cookie: The Tracking Cookie That You Can’t Kill]
 +
* '''Authenticité des commentaires.''' Si vous avez reçu un commentaire via un site web https vous pouvez être plus sûr qu'il est vraiment envoyé de la part de la personne.
 +
* '''HTTPS est maintenant requis pour un certain nombre d'APIs utiles'''. Chrome requiert le HTTPS pour les APIs de plein écran, device motion et d'orientation, getUserMedia, geolocation, service workers et plus encore. Voir [https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts Secure Contexts on Mozilla.org] pour les détails sur les APIs qui requièrent un  "contexte de sécurité" (c'est à dire HTTPS ou des WebSockets sécurisés).
 +
 
 +
__TOC__
 +
 
 +
== Comment faire ==
 +
* [https://blog.heckel.xyz/2015/12/04/lets-encrypt-5-min-guide-to-set-up-cronjob-based-certificate-renewal/ Let's Encrypt — Un guide de 5 min pour paramétrer le renouvellement de certificat] décrit comment régler SSL/TLS avec renouvellement automatique de certificat en utilisant le client [https://github.com/kuba/simp_le simp_le]  (utilise le serveur web Apache pour l'exemple)
 +
* [https://konklone.com/post/switch-to-https-now-for-free Switch to HTTPS now for free] décrit comment régler SSL sur votre site personnel avec  [[StartSSL]] (remarquez que le guide traite principalement de l'utilisation de nginx comme serveur)
 +
** Instructions spécifiques-Dreamhost pour régler le certificat StartSSL : http://wiki.dreamhost.com/Secure_Hosting#Option_4
 +
 
 +
=== Obtenir un certificat ===
 +
Acheter ou obtenir des certificats SSL gratuits <em>aujourd'hui</em>
 +
* [[letsencrypt|Let's Encrypt]] est une autorité ouverte de certificat, gratuite, automatisée, qui existe pour le bénéfice public. Sponsorisée par  [[Mozilla]] et l'[https://www.eff.org Electronic Frontier Foundation], parmi d'autres, Let’s Encrypt automatise et vous évite les maux de crâne, et permet aux opérateurs de site d'activer et de gérer HTTPS avec de simples commandes.
 +
* [[StartSSL]] offre des certificats SSL gratuits pour les domaines uniques. Si vous vérifiez votre identité, ils vous permettent aussi d'enregistrer des certs gratuits wildcard. '''Néanmoins''', en 2016 il a été retiré du certificat racine de Mozilla et d'Apple. cf [[iwc:StartSSL#Criticism]]
 +
* [https://www.namecheap.com/ssl-certificates/comodo.aspx namecheap.com] offre des certificats SSL domaine-unique pour $7.95/year et des certificats wildcard pour $85/year
 +
* GlobalSign offre des [https://www.globalsign.com/ssl/ssl-open-source/ certificats wildcard gratuits] (!) pour les projets open source.
 +
* [https://ssls.com/ ssls.com] a des certificats SSL bon marché provenant de plusieurs fournisseurs. En date du 2014/03/08, un certificat PositiveSSL valait $4.99/an pour un engagement sur 5 ans. Ils fournissent aussi des [https://www.ssl.com/certificates/free certificats SSL *gratuits* SSL pour des périodes de 90 jours].
 +
* [http://www.cacert.org/ CAcert] est une organisation à but non lucratif qui fournit des certificats wildcard gratuits. Malheureusement le certificat racine n'est [http://wiki.cacert.org/InclusionStatus pas inclus] par défaut dans la majorité des systèmes d'exploitation et navigateurs. Ces certs sont généralement utilisés dans la communauté GNU.
 +
* [https://aws.amazon.com/blogs/aws/new-aws-certificate-manager-deploy-ssltls-based-apps-on-aws/ Amazon Web Services] fournit des certificats SSL gratuits qui peuvent être utilisés avec d'autres services Amazon. Il n'y a pas d'installation requise autre que de cliquer dans l'interface web.
 +
* WoSign est une autorité de certification qui offre des certificats validés pour les domaines. '''Néanmoins''', en 2016 elle a été retirée du certificat racine de Mozilla et Apple. Voir [[iwc:StartSSL#Criticism]]
 +
 
 +
==== Valider votre Achat ====
 +
Les fournisseurs de certificats SSL exigent quelque forme de validation de vous, votre domaine, et votre propriété du domaine.
 +
 
 +
'''Génération CSR — '''
 +
Une "Certificate Signing Request" doit être générée pour votre site. Par exemple, sur un fournisseur d'hébergement qui utilise Cpanel, le "Manager SSL/TLS" a une section "Certificate Signing Requests".
 +
 
 +
'''Approuver Email — '''
 +
[https://www.ssls.com ssls.com] asks for an "Approver Email" from a list of administration email addresses and Domain Registration email addresses. Choose one that you use, and receive the Domain Control Validation email, which contains a link and a "validation code". Click the link and enter the code to verify that you own the domain.
 +
 
 +
'''Certificate Email — '''
 +
[https://www.ssls.com ssls.com] send the certificate to the "Administrator Email" that you specified during the purchase process. This certificate is used in the process below.
 +
 
 +
=== Gérer ===
 +
Quand vous aurez terminé avec votre achat, vous aurez un ou plusieurs fichiers pour chaque certificat :
 +
* Le certificat lui-même, par ex. '''snarfed.org.ssl.crt'''.
 +
* La clé privée que vous avez utilisée pour générer le certificat, par ex. '''id_rsa-2048'''.
 +
* Facutltatif : Votre certificat intermédiaire d'[http://en.wikipedia.org/wiki/Certificate_authority Autorité de Certification] par ex., '''sub.class1.server.ca.pem'''.
 +
* Facultatif : Votre racine de CA, par ex. '''ca.pem'''. En espérant que vous aurez choisi une Autorité de Certification dont le cert racine soit distribué avec la plupart des OS/navigateurs ; si c'était le cas, vous pouvez ignorer cela. (Si ce n'est pas le cas, vous devriez réétudier !)
 +
 
 +
Tous ces fichiers sont généralement au format [http://en.wikipedia.org/wiki/X.509 X.509] mis à part la clé privée, qui est RSA ou tout autre format de clé privée.
 +
 
 +
La ligne de commande <code>openssl</code> est votre amie pour inspecter et modifier les certificats. Par exemple pour avoir l'info concernant un cert :
 +
 
 +
<pre>openssl x509 -text -in snarfed.org.ssl.crt</pre>
 +
 
 +
Si votre CA vous a fourni un cert intermédiaire, vous devrez le fournir à votre serveur web avec votre propre cert. Pour les serveurs qui n'acceptent qu'un fichier unique, vous devrez concaténer les certs, par ex. :
 +
 
 +
<pre>cat snarfed.org.ssl.crt sub.class1.server.ca.pem > snarfed.org.unified.ssl.crt</pre>
 +
 
 +
As another example, it seems like this command line should verify that a cert is valid:
 +
 
 +
<pre>openssl verify -verbose -CAfile ca.pem snarfed.org.unified.ssl.crt</pre>
 +
 
 +
...but [[User:snarfed.org]] gets this error:
 +
 
 +
<pre>error 20 at 0 depth lookup:unable to get local issuer certificate</pre>
 +
 
 +
You will get the "error 20" error above when openssl is unable to locate the root or intermediate certificates in your chain - if you are on Linux, or know where your OS stores the certificate list, you can run:
 +
 
 +
<pre>openssl verify -verbose -CApath /etc/ssl/certs snarfed.org.unified.ssl.crt</pre>
 +
 
 +
If you have gnutls command line tools installed, you can verify self-signed certs:
 +
 
 +
<pre>certtool -e --infile snarfed.org.unified.ssl.crt</pre>
 +
 
 +
=== Réglages ===
 +
 
 +
L'IETF a un [http://datatracker.ietf.org/doc/draft-ietf-uta-tls-bcp/?include_text=1 document avec des recommandations pour un Usage Sûr des TLS et DTLS].
 +
 
 +
Mozilla a un outil génial pour construire la Configuration SSL pour différents outils :  [https://mozilla.github.io/server-side-tls/ssl-config-generator/ Mozilla SSL Configuration Generator].
 +
 
 +
https://cipherli.st est une anti-sèche rapide pour la configuration Apache, nginx et Lighttpd TLS.
 +
 
 +
[https://testssl.sh testssl.sh] est un outil ligne de commande pour visualiser vos configurations TLS.
 +
 
 +
==== Apache ====
 +
[[Apache]] est vraiment facile. [https://www.insecure.ws/2013/10/11/ssltls-configuration-for-apache-mod_ssl/ Voici un bon post "how-to".] TL;DR: Put the certificate files somewhere your Apache user can read, then set the <code>SSLCertificate*</code> config directives, e.g.:
 +
 
 +
<pre>
 +
SSLCertificateKeyFile /home/ryan/.ssh/id_rsa-2048
 +
SSLCertificateFile /home/ryan/www/snarfed.org.ssl.crt
 +
SSLCACertificateFile /home/ryan/www/sub.class1.server.ca.pem
 +
</pre>
 +
 
 +
[[User:ShaneHudson.net]] - As well as the certificates and keys, it is also useful to have forward secrecy and HSTS. I used the following lines in httpd.conf, the articles I found them in are in the FAQs further below. This went from C to A+ on the SSL test.
 +
 
 +
<pre>
 +
SSLProtocol all -SSLv2 -SSLv3
 +
    SSLHonorCipherOrder on
 +
    SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
 +
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
 +
</pre>
 +
 
 +
==== App Engine ====
 +
Si vous servez sur l'[[AppEngine]] intégré de Google du domaine <code>appspot.com</code>, vous y êtes presque ! Ajoutez simplement  <code>secure: always</code> (ou <code>optional</code>) aux handler(s) dans votre <code>app.yaml</code> ou tout autre fichier de configuration d'app, et vous pourrez accéder à votre app sur https. [https://developers.google.com/appengine/docs/python/config/appconfig#Python_app_yaml_Secure_URLs Détails ici.]
 +
 
 +
Si vous utilisez la runtime Java sur App Engine, ajoutez ce stanza à votre fichier <code>web.xml</code>.
 +
 
 +
<nowiki>
 +
<?xml version="1.0" encoding="ISO-8859-1"?>
 +
<web-app
 +
  ...>
 +
 
 +
  <security-constraint>
 +
    <web-resource-collection>
 +
      <url-pattern>/*</url-pattern>
 +
    </web-resource-collection>
 +
    <user-data-constraint>
 +
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
 +
    </user-data-constraint>
 +
  </security-constraint>
 +
</nowiki>
 +
 
 +
You may additionally want to send a [https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security HSTS header] to further improve security. In java, the easiest way from a servlet running on AppEngine is to add this header to all responses when running on the production server.
 +
 
 +
<nowiki>
 +
import com.google.appengine.api.utils.SystemProperty;
 +
 
 +
...
 +
 
 +
      if (SystemProperty.environment.value() ==
 +
          SystemProperty.Environment.Value.Production) {
 +
          // force ssl for six months.
 +
          response.addHeader("Strict-Transport-Security", "max-age=15768000");
 +
      }</nowiki>
 +
 
 +
If you also deliver static content, you may want to enable the HSTS header here as well. An example stanza within your <code>appengine-web.xml</code> file might look like this.
 +
 
 +
<nowiki>
 +
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
 +
...
 +
    <static-files>
 +
    <include path="/static/**" >
 +
      <http-header name="Strict-Transport-Security" value="max-age=15768000"/>
 +
...</nowiki>
 +
 
 +
 
 +
 
 +
 
 +
 
 +
If you're on a custom domain, you can use either SNI or a VIP. [https://developers.google.com/appengine/docs/ssl Details here.] You'll need to [https://developers.google.com/appengine/docs/ssl#uploading_and_configuring_certificates upload your SSL cert files] to the Google Apps control panel for your domain, then add and configure SNI or VIP slots in App Engine.
 +
 
 +
==== nginx ====
 +
We can setup nginx to listen on port 443 with our SSL sertificate quite easily:
 +
 
 +
<pre>
 +
server {
 +
    listen 443 ssl;
 +
    server_name example.org;
 +
 
 +
    ssl_certificate /path/to/unified.crt;
 +
    ssl_certificate_key /path/to/my-private-decrypted.key;
 +
 
 +
    //usual nginx config here like location blocks
 +
}
 +
</pre>
 +
 
 +
For more detailed nginx config instructions see the page on [[nginx]]
 +
 
 +
=== Test ===
 +
==== Production ====
 +
Le [https://www.ssllabs.com/ssltest/ Test Serveur de Qualys] est un moyen facile de tester le certificat SSL sur votre site. Voir par exemple la  [https://www.ssllabs.com/ssltest/analyze.html?d=www.brid.gy&s=74.125.198.121 carte de compte-rendu pour brid.gy], ou en comparaison  celle de [https://www.ssllabs.com/ssltest/analyze.html?d=jonnybarnes.uk&hideResults=on jonnybarnes.uk] qui a des résultats légèrement différents.
 +
 
 +
[https://shaaaaaaaaaaaaa.com shaaaaaaaaaaaaa.com] vérifiera si votre SSL Cert utilise SHA-1 ou SHA-2 et explique pouquoi ça devient de plus en plus important.
 +
 
 +
https://securityheaders.io testera la dureté d'en-tête de sécurité du serveur web et offre des raisons
 +
 
 +
[https://observatory.mozilla.org Observatory] par [[Mozilla]] vérifie différents aspects de sécurité d'un site et donne un score, en plus d'agréger les résultats à partir de tiers qui scannent les sites tels que https://securityheaders.io.
 +
 
 +
[https://testssl.sh testssl.sh] est un script ligne de commande qui peut tourner localement pour vérifier les certificats et configurations TLS.
 +
 
 +
Vous pouvez utiliser <code>openssl s_client</code> pour debuger les problèmes de connexion, par exemple :
 +
 
 +
<pre>openssl s_client -connect snarfed.org:443</pre>
 +
 
 +
If your server uses SNI, you'll need to provide the hostname too:
 +
 
 +
<pre>openssl s_client -servername www.brid.gy -connect www.brid.gy:443</pre>
 +
 
 +
Here's an example of debugging a single SSL issue:
 +
 
 +
* https://github.com/aaronpk/webmention.io/issues/14
 +
* https://github.com/snarfed/bridgy/issues/20
 +
* http://indiewebcamp.com/irc/2014-01-04#t1388872084
 +
 
 +
Brand new StartSSL certificates may give an OCSP validation error for 6-24 hours after purchase. This seems to only affect Firefox and resolves itself when the certificate propagates to the validation server[https://forum.startcom.org/viewtopic.php?f=15&t=2654]. Firefox users can disable the check temporarily with Edit > Preferences > Advanced > Certificates > Validation, and uncheck "Use the Online Certificate Status Protocol"
 +
 
 +
==== Local ====
 +
Au moment de développer un site web localement, il peut être utile de pouvoir tester le site via https. Par exemple, au moment d'écrire un client OAuth, quelques fournisseurs ne redirigeront pas une page qui n'utilise pas https.
 +
 
 +
Le moyen le plus facile de faire ça est de rediriger temporairement votre site vers votre propre localhost (juste pour vous) et d'utiliser votre cert de site. Ajoutez juste une ligne comme ceci à votre fichier hosts :
 +
 
 +
<pre>127.0.0.1 snarfed.org</pre>
 +
 
 +
This is obviously temporary, though. For a more permanent setup, you can either generate a self-signed SSL certificate for your testing domain (localhost, etc) or you can create your own SSL certificate authority and sign the certificate with that.
 +
 
 +
Pour aider sur ce point, [[User:aaronparecki.com|aaronpk]] a créé une autorité racine "IndieWebCamp" qui peut signer des certificats pour les domaines finissant par ".dev".
 +
 
 +
* https://ssl.indieweb.org/
 +
 
 +
Vous pouvez ajouter une ligne vers votre fichier hosts pour votre domaine test comme :
 +
 
 +
<pre>127.0.0.1  mondomaine.dev</pre>
 +
 
 +
Et ensuite vous pouvez utiliser le  [https://ssl.indieweb.org/ certificat d'autorité IndieWebCamp] pour générer un cert SSL.
 +
 
 +
=== Renew ===
 +
A few things to be aware of when you need to renew your certificates.
 +
 
 +
Because all of the browsers now share lists of certificates that are invalid and/or broken as part of [https://en.wikipedia.org/wiki/OCSP_stapling OCSP stapling] you should renew your certificate at least two days prior to it expiring and then update your server with the certificate at least a day before. This allows the various OCSP lists to update before you touch your server - if you do not you may get some customers whose browsers have an older list and your certificate will not pass their OCSP check, which is different than it being on the revocation list.
 +
 
 +
[https://letsmonitor.org Let's Monitor] is a free service to monitor your sites and alert you via SMS or email when your certificates are out of date or aren't working.
 +
 
 +
==Trucs, astuces et bonnes pratiques ==
 +
 
 +
* pour éviter des alertes de contenus mixés, remplacez chaque lien entrant http:// et https:// ( votre domaine ) vers seulement le préfixe // . Ceci est supporté dans tous les navigateurs modernes et retrouvera automatiquement le protocole quand vous voudrez accéder à la page.
 +
 
 +
== Posts concernant HTTPS ==
 +
* [https://www.howsmyssl.com/ Hows my SSL] est un outil qui note votre propre sécurité de navigateurs avec les sites HTTPs. Par exemple si votre navigateur utilise les schémas de chiffrage connus pour être faibles. En outre regardez le  [https://plus.google.com/app/basic/stream/z13rfxdois3ptbvba04chrnjfxa3iv1xi3c post Google+ de Kyle Isom] sur une meilleure configuration de Firefox.
 +
* [https://community.qualys.com/blogs/securitylabs/2013/08/05/configuring-apache-nginx-and-openssl-for-forward-secrecy Configuring Apache Nginx and OpenSSL for Forward-Secrecy] Cette page a les instructions exactes pour savoir comment activer forward-secrecy. Cela peut booster les résultats de tests de C vers A.
 +
* [https://waterpigs.co.uk/articles/the-other-side-of-https-support/ The Other Side of HTTPS Support] traite d'ajouter le support HTTPS pour les clients qui ne sont pas liés avec tous les certificats intermédiaires requis.
 +
* [https://annevankesteren.nl/2014/09/tls-first-steps TLS: First Steps], [https://annevankesteren.nl/2014/09/tls-startssl TLS: issues with StartSSL], [https://annevankesteren.nl/2014/09/tls-dreamhost TLS: issues with Dreamhost], [https://annevankesteren.nl/2014/09/tls-hsts TLS: Deploy HSTS], [https://annevankesteren.nl/2014/09/tls-next-steps TLS: next steps] sont une série d'articles courts d'[https://annevankesteren.nl/ Anne van Kesteren] documentant son processus pour installer TLS sur Dreamhost
 +
* {{rhiaro}} a écrit  [http://rhiaro.co.uk/2015/12/https-terrible HTTPS on shared hosting with letsencrypt] (successful) et  [http://rhiaro.co.uk/2015/12/https-what HTTPS with nginx reverse proxy to serve sites in multiple docker containers] (inconclusive/failed)
 +
* {{aaronpk}} a écrit sur son essai réussi sur [http://aaronparecki.com/articles/2015/12/07/1/letsencrypt installer https sur nginx avec letsencrypt]
 +
* {{emmak}} a écrit sur son installation de [http://notenoughneon.com/2016/4/28/letsencrypt-for-node-js HTTPS avec LetsEncrypt et Node]
 +
* …
 +
 
 +
== Niveaux IndieMark ==
 +
Les niveaux [[IndieMark]] du support HTTPS recommandé pour votre propre site web, en tant que partie du composant sécurité
 +
 
 +
 
 +
=== Niveau 1 sécurité ===
 +
Niveau 1 - '''Don't do the wrong thing'''. (what's the minimal "not wrong thing"?). Possible reasonable behaviors:
 +
* '''Refuser la connexion''', parce que si vous ne support pas SSL, généralement vous n'écoutez pas le 443, ainsi les clients ne peuvent pas se connecter. Défi : l'utilisateur n'a pas idée de ce qui ne va pas, ni la façon de corriger ça (c'est à dire essayer de nouveau le site avec "http:").
 +
 
 +
'''Pourquoi ?'''
 +
* Éviter une expérience-utilisateur trompeuse.
 +
 
 +
'''Exemples IndieWeb'''
 +
* ... ajoutez-vous ici vous-même avec la date de votre Niveau 1 vérifié !
 +
 
 +
 
 +
=== Niveau 2 sécurité ===
 +
Niveau 2 - '''Sécurisez l'admin de votre site''' - supporter https pour vos pages d'UI de connexion/admin avec un certificat auto-signé.
 +
* Vos page(s) admin :
 +
*# DOIVENT être disponible sur https
 +
*# DEVRAIENT rediriger automatiquement de http à https, afin que vous ne vous connectiez pas accidentellement en clair sur http (c'est à dire envoyer vos identifiants login et mot de passe de votre site en clair)
 +
*# DEVRAIT inclure le [http://en.wikipedia.org/wiki/HTTP_cookie#Secure_cookie marqueur de sécurité] ([http://php.net/manual/en/session.configuration.php#ini.session.cookie-secure détails PHP]) au moment de régler les cookies de session/credential, de telle façon que les cookies ne fuirent pas sur d'autres (probablement non-admin) requêtes http (c'est à dire permettre les attaques de réutilisation de cookie style Firesheep)
 +
 
 +
'''Pourquoi ?'''
 +
* '''Sécurité pour l'accès-en-écriture pour votre site !''' Autrement n'importe qui peut hacker votre CMS et poster des choses à votre place (par exemple utiliser un outil comme Firesheep pour aspirer vos cookies de connexion de session, et les ré-utiliser pour avoir accès à vos pages admin.
 +
 
 +
'''Comment faire'''
 +
* Comment faire que vos '''admin page(s) soient disponibles sur https :'''
 +
** installez un certificat auto-signé (voyez avec votre fournisseur d'[[hébergement web]] pour les détails)
 +
** naviguez explicitement (par ex. en tapant) vers la version <kbd>https://</kbd> de votre site.
 +
* Comment rediriger votre UI admin '''de http à https automatiquement :'''
 +
** faites que Admin Wordpress utilise SSL : http://codex.wordpress.org/Administration_Over_SSL
 +
** faire que vos propres autres logiciels utilisent SSL sur Apache en utilisant .htaccess (dérivé de  [http://codex.wordpress.org/Administration_Over_SSL#Rewrite_Rules_For_The_Insecure_Host ctte référence WP]), par ex. pour votre URL admin <samp>example.com/my-adm/</samp><blockquote style="white-space:pre;margin-left:-5em"><code style="background:none"># HTTPS-only my-adm<br/>RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)\ HTTP/ [NC]<br/>RewriteCond %{HTTPS} !=on [NC]<br/>RewriteRule ^/?(my-adm/) <nowiki>https://example.com%{REQUEST_URI}%{QUERY_STRING}</nowiki> [R=301,QSA,L]</code></blockquote> où:
 +
*** <samp>example.com</samp> est votre domaine personnel, et
 +
*** <samp>my-adm/</samp> est le chemin vers votre UI admin web login.
 +
N.B. vérificateur utile du fichier htaccess : [http://htaccess.madewithlove.be htaccess checker] - vous laisse coller dans votre fichier htaccess et allez à l'URL test en utilisant des URLs échantillons.
 +
* Comment '''sécuriser vos cookies''', par ex. in PHP :
 +
** régler différents params de session avant d'appeler session_start() : <blockquote style="white-space:pre"><code style="background:none">ini_set("session.cookie_httponly", 1);<br/>ini_set("session.use_only_cookies", 1);<br/>ini_set("session.cookie_secure", 1);<br/>session_start();</code></blockquote>
 +
** nettoyez vos cookies dans votre navigateur, utilisez votre login pour vous connecter sur votre site web, puis double-cliquez pour vérifier que vos cookies soient sûres, par exemple dans Firefox :
 +
*** choisissez '''Preferences...''' dans le menu Firefox.
 +
*** clicquez onglet '''Privacy'''
 +
*** clicquez '''Show Cookies...'''
 +
*** enter your domain name into the dialog's search box
 +
*** sélectionnez la cookie réglée par votre code, par ex. "PHPSESSID"
 +
*** L'info sous la liste des cookies devrait afficher : <blockquote style="background:#efe">Send For: Encrypted connections only</blockquote> Si ce n'était pas le cas, ou si cela dit quelque chose comme <blockquote  style="background:#fee">Send For: Any type of connection</blockquote> alors la cookie n'est pas sûre.
 +
 
 +
 
 +
Note : Si vous réglez un vrai cert SSL pour l'ensemble de votre domaine et servez votre interface d'admin provenant du même domaine, vous êtes parvenu au Niveau 3.
 +
 
 +
'''Exemples IndieWeb'''
 +
* {{t}} pour tantek.com sur son interface admin [[Falcon]] sur https://tantek.com/falcon/ [http://tantek.com/2014/143/t1/setup-self-signed-ssl-certificate-site-admin since 2014-05-23], et redirige l'UI d'admin de domaine de http vers https automatiquement et sécurise la cookie de sessions depuis 2014-09-02.
 +
* ...
 +
* ... ajoutez-vous ici avec la date à laquelle vous avez atteint le Niveau 2 !
 +
 
 +
=== Niveau 3 sécurité ===
 +
Niveau 3 - '''Servez facultativement sur toutes vos pages''' - fournissez votre front-end à la fois sur http et https avec un cert provenant d'un CA certifié, mais pas nécessairement du contenu externe, par conséquent vous pourriez encore avoir des avertissements de contenus mélangés.
 +
 
 +
'''Pourquoi ?'''
 +
* Vous pouvez lier à partir de profils [[silo]] vers votre site via https
 +
* Vous pouvez commencer par utiliser (requis!) votre URL https pour les connexions [[IndieAuth]]  (par ex. le wiki)
 +
* Vos lecteurs peuvent accéder en sécurité à votre site sans pop-up d'avertissement étrange.
 +
* La [[privacy]] pour vos lecteurs (ce qu'ils choisissent de lire)[http://www.tbray.org/ongoing/When/201x/2012/12/02/HTTPS]
 +
 
 +
'''Exemples IndieWeb'''
 +
* [[User:pauloppenheim.com|Paul Oppenheim]] sur https://pauloppenheim.com/ (cert de dreamhost qui utilise comodo) depuis 2012-01.
 +
* Tim Bray on https://www.tbray.org/ [http://www.tbray.org/ongoing/When/201x/2012/12/02/HTTPS since 2012-12-02].
 +
* {{aaronpk}} sur https://aaronparecki.com/ depuis 2013-11-10
 +
* [[User:Dunlaps.net|Darius Dunlap]] sur https://dunlaps.net/darius [https://dunlaps.net/darius/2014/03/25/indieweb-update/ depuis 2014-03-07] (à [[2014/SF|IndieWebCampSF]]).
 +
** Niveau 2 : avant, cert auto-signé sur son interface d'admin [[WordPress]] sur https://dunlaps.net/darius/wp-login.php since YYYY-YY-YY.
 +
* {{gRegor}} sur https://gregorlove.com depuis 2014-07-08
 +
* [[User:waterpigs.co.uk|Barnaby Walters]] sur waterpigs.co.uk supporte TLS en utilisant StartSSL, redirige automatiquement mais sert encore du contenu mixé passif en date du 2014-09-15 (était précédemment en niveau 2 avec un cert-auto-signé)
 +
* ...
 +
* ... ajoutez-vous vous-même ici avec la date quand vous avez atteint le Niveau 3 !
 +
 
 +
'''Exemples IndieWeb''' avec http vers des redirections https (qui ont encore besoin d'être réparées d'alertes de contenus mélangés) - nous recommandons explicitement de '''ne pas rediriger vos pages http vers https à moins que vous ne soyez sûr de ne pas avoir d'alertes de contenus mixés'''.
 +
* 2014-??-?? Indiewebcamp.com itself
 +
 
 +
=== Niveau 4 sécurité ===
 +
Niveau 4 - '''Icône verrou ou mieux au moment de servir https''' - soyez certain qu'il y ait au moins une icône de cadenas prêt du https dans  la barre d'adresse. Servez tout (page d'accueil, permaliens, images) sur https quand l'utilisateur requête https. Éliminez les alertes de contenus mixés (par ex un triangle avec un point d'exclamation prêt du https dans la barre d'URL).
 +
 
 +
'''Pourquoi ?'''
 +
* Eviter de montrer au lecteur un message d'alerte ou une icône de triangle dans la barre d'adresse du navigateur.
 +
* Si vous permettez l'accès http ou https à votre site, et que votre accès https *manque* le message d'avertissement de contenu mixé, vous aidez au moins vos visiteurs https.
 +
* Eliminer les avertissements de contenu-mixé est important parce que ces avertissements rendent le https inefficace. L'utilisateur n'a pas d'idée combien une page, ses images, scripts ou textes créés à partir des scripts viennent d'une connexion encapsulate http.
 +
* Eviter le contenu http/https qui est bloqué par défaut sur Firefox & Chrome. Voir : https://blog.mozilla.org/security/2013/05/16/mixed-content-blocking-in-firefox-aurora/, https://code.google.com/p/chromium/issues/detail?id=81637
 +
 
 +
'''Exemples IndieWeb par ordre d'implémentation'''
 +
* 2014-12-31 {{kylewm}} sur https://kylewm.com
 +
* ... (likely indiewebcamp.com once its mixed content warnings are fixed)
 +
 
 +
 
 +
'''FAQ :''' <br/>
 +
'''Comment vous assurez-vous que le contenu externe est sur https ?''' c'est à dire si j'ai un avatar pour un commentaire de {{t}} il sera sur http parce qu'il utilise http.
 +
* Quand vous recevez une web mention, téléchargez l'image provenant de la [[h-card]] et servez-la sur votre propre serveur.
 +
* Alternativement, utilisez un proxy https d'image comme https://github.com/atmos/camo (utilisé par GitHub)
 +
* A moins que ce ne soit une mention [[Twitter]], auquel cas liez vers :
 +
** <code><nowiki>https://twitter.com/nomutilisateur/image_profil</nowiki></code>
 +
** Voir [[Twitter#Profile_Image_URLs]] pour en savoir plus sur les images de profil Twitter.
 +
 
 +
=== Niveau 5 sécurité ===
 +
Level 5 - '''Rediriger tout vers https''' - envoie les redirection à partir de http -> https. par ex. vos pages ont toujours automatiquement une icône de verrou dans la barre d'adresse du navigateur (et pas d'avertissements).
 +
 
 +
'''Pourquoi ?'''
 +
* Toutes vos URLs de site seront cohérentes.
 +
* Les utilisateurs recevront du contenu que vous avez décidé de leur servir
 +
* Tous les avantages vers une sécurité internet plus large de servir toujours https (documenté en intro tout en haut)
 +
 
 +
'''Exemples IndieWeb par ordre d'implémentation'''
 +
* 2014-??-?? [[User:snarfed.org|Ryan Barrett]] on https://snarfed.org/ (via HSTS header)
 +
* 2014-05-23 [[User:kartikprabhu.com|Kartik Prabhu]] on https://kartikprabhu.com/ (via 301 redirect)
 +
* [[User:David.shanske.com|David Shanske]] on https://david.shanske.com/ since 2014-12-25.
 +
** At Level 3 from 2014-08-29
 +
** Was at Level 4 for a bit, but did not note date.
 +
** All posts, resources, including external user pics.
 +
** Caveat: There may be some older posts with embedded images from http that still give the mixed content warning. I think I have them all
 +
*** Dropped down to B...updated ciphers and added a custom DHE parameter. As of 2016-02-14 am back at A+.
 +
* 2015-06-19 [[User:Scottgruber.me|Scott Gruber]] on https://scottgruber.me Installed renewal cert on 2016-04-18.
 +
* ...
 +
* ... add yourself here with the date you reached Level 5!
 +
 
 +
'''Vérifiez la barre d'adresse du navigateur''' où votre URL est affichée et assurez-vous :
 +
* Il y a une icône de verrou avant (en face de) l'URL dans la barre d'adresse
 +
* Il n'y a pas d'icône triangle d'avertissement (en face) de l'URL dans la barre d'adresse
 +
 
 +
'''Pourquoi mon site avance si lentement ?'''
 +
* I found that moving my https redirect into httpd instead of .htaccess, and explicitly setting it to go to www meant it would be faster and wouldn't go through multiple redirects. [http://stackoverflow.com/questions/14958544/mod-rewrite-directives-work-in-htaccess-but-ignored-in-httpd-conf This SO question] came in handy for getting httpd to redirect. ~ [[User:shanehudson.net|Shane Hudson]]
 +
 
 +
'''Pourquoi suis-je seulement en A et non A+ ?'''
 +
* Vous devez activer HSTS. [https://raymii.org/s/tutorials/HTTP_Strict_Transport_Security_for_Apache_NGINX_and_Lighttpd.html Cet article] aidera. ~ [[User:shanehudson.net|Shane Hudson]]
 +
 
 +
=== Niveau 6 sécurité ===
 +
Niveau 6 - '''Correct ciphers, support forward secrecy''', etc. per https://www.ssllabs.com/ssltest/ (all previous levels required, i.e. document method of http to https redirection)
 +
 
 +
'''Pourquoi ?'''
 +
* HTTPS is good, better with forward secrecy: http://news.netcraft.com/archives/2013/06/25/ssl-intercepted-today-decrypted-tomorrow.html
 +
* Some ciphers are not safe, some are slower than others and SSL breaches are dangerous: https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
 +
 
 +
'''Exemples IndieWeb'''
 +
* [[User:Bear.im|Bear]] on https://bear.im since [https://bear.im/bearlog/2013/177/nginx-ssl-config-for-forward-secrecy since 2013-06-26] (http->https via 301 and [https://www.ssllabs.com/ssltest/analyze.html?d=bear.im A+ w/PFS from ssltest]). As of [https://shaaaaaaaaaaaaa.com/check/bear.im 2014-09-23 site certificate signed with SHA-2].
 +
* [[User:willnorris.com|Will Norris]] on https://willnorris.com/ (See https://www.ssllabs.com/ssltest/analyze.html?d=willnorris.com and note: http to https via 301 redirect) [https://willnorris.com/2013/11/improving-my-https-support since 2013-11-25]
 +
** Level 4 (all https all the time) before that [https://willnorris.com/2012/12/all-https-all-the-time since 2012-12-16]
 +
* [[User:Petermolnar.eu|Péter Molnár]] on https://petermolnar.eu/ (See https://www.ssllabs.com/ssltest/analyze.html?d=petermolnar.eu) since 2014-MM-DD.
 +
* [[User:jonnybarnes.uk|Jonny Barnes]] on https://jonnybarnes.uk/ (via 301 redirect, A+ on ssllabs: https://www.ssllabs.com/ssltest/analyze.html?d=jonnybarnes.uk&hideResults=on) since 2014-05-31
 +
* {{rascul}} on https://rascul.xyz (A+ on ssllabs: https://www.ssllabs.com/ssltest/analyze.html?d=rascul.xyz) since 2016-08
 +
* [[User:Retout.co.uk|Tim Retout]] on https://retout.co.uk/ (301 redirect + HSTS, A+ on ssllabs: https://www.ssllabs.com/ssltest/analyze.html?d=retout.co.uk&hideResults=on) since 2014-09-?? (or earlier)
 +
* 2014-09-06 [[User:Tommorris.org|tommorris.org]]
 +
** Embedded images are often still served on HTTP. Now A+ on SSL Labs!
 +
* [[User:shanehudson.net|Shane Hudson]] on https://www.shanehudson.net, 301 redirect and A+ on ssllabs. Jumped from no SSL to level 5 :D Since 2014-09-07
 +
* [[User:aralbalkan.com|Aral Balkan]] on aralbalkan.com - A+ rating since 2014-09-07. Previously: Level 4 since 2014-08-11.
 +
* [[User:marcus-povey.co.uk|Marcus Povey]] on marcus-povey.co.uk and mapkyca.com - A+, with 301 redirect and HSTS for many months on mapkyca.com and since 2015-06-19 on marcus-povey.co.uk
 +
* ...
 +
* ... add yourself here with the date you reached Level 6!
 +
 
 +
== Crittique ==
 +
=== Legacy Software and SNI Support ===
 +
A server has an IP address. It used to be that each server would host one website (domain) in HTTP/1. Then HTTP/1.1 introduced the Host header which allowed a server to host multiple domains. However, the connection needs to be encrypted before the Host header can be sent. So which certificate should the server send initially? When the wrong one is chosen we get issues. The solution to this problem is called Server Name Indication. SNI is supported by all modern browsers and cryptography libraries. OpenSSL is one of the most popular and has supported SNI since 2010 for example. However, we can run into issues when older software tries to interact with your site: http://indiewebcamp.com/irc/2015-12-06/line/1449416119493
 +
=== General X509 Criticism ===
 +
* <span class="h-cite"><time class="dt-published">2014-04-09</time> <span class="p-author h-card">Sean Doig</span>: <cite class="p-name">[http://lorddoig.svbtle.com/heartbleed-should-bleed-x509-to-death Heartbleed should bleed X.509 to death]</cite>, <span class="p-url">http://lorddoig.svbtle.com/heartbleed-should-bleed-x509-to-death</span></span>
 +
 
 +
=== Taxe de maintenance et fragilité du site ===
 +
Adding HTTPS to your site adds the extra maintenance tax of HTTPS certificate renewal (and updating).
 +
 
 +
As a result, if you fail to do this, or get it wrong, your site goes down.
 +
 
 +
Evidence:
 +
* https://twitter.com/kylewmahan/status/637351333436129280 <blockquote>Since getting into #indieweb stuff, I’ve seen way more sites go down because of an expired HTTPS cert than expired domain registration.</blockquote>
 +
 
 +
Let’s Encrypt are trying to fix this by making updating TLS certificates an automated process via their [https://github.com/letsencrypt/letsencrypt Let’s Encrypt client].
 +
 
 +
== En rapport ==
 +
* If you want to run ssh and https both on port 443 (so your ssh works even behind stingy "open" wifi or corp firewalls:
 +
** http://www.rutschle.net/tech/sslh.shtml (found by {{aaronpk}}, but no known indieweb users yet)
 +
** https://github.com/myfreeweb/443d (created and used by {{myfreeweb}})
 +
 
 +
== Sessions ==
 +
Sessions at IndieWebCamps about https:
 +
* 2014-03-07 [[2014/SF/https|IndieWebCampSF https]]
 +
 
 +
 
 +
== Voir aussi  ==
 +
* [[Apache]]
 +
* [[nginx]]
 +
 
 +
== Articles à lire ==
 +
* [Guide Switching http-https](https://www.smashingmagazine.com/2017/06/guide-switching-http-https/- ) Smashing Magazine - 2017-07

Version actuelle datée du 3 novembre 2019 à 17:58



Cette page a démarré sur iwc:https et migrera après traduction sur iwc:https-fr

HTTPS est l'abréviation de Hypertext Transfer Protocol Secure, littéralement « protocole de transfert hypertexte sécurisé », supporté par les serveurs web (comme Apache & nginx) et les navigateurs. HTTPS est la combinaison du Protocole de Transfert Hypertexte (HTTP) avec une couche de chiffrement comme les protocoles SSL/TLS.

Pourquoi

Pourquoi ?

  • Confidentialité par défaut. Tim Bray a posté sur le fait de servir son site via https (https://www.tbray.org/ongoing/When/201x/2012/12/02/HTTPS)
    • "Ce blog n'est pas très controversé, mais si les choses "controversées" sont privées, alors la vie privée est elle-même suspecte.
    • "Parce que je peux, c'est la seule petite partie de l'Internet où j'ai le contrôle complet." (https://willnorris.com/2012/12/all-https-all-the-time)
  • Réduire la persécution politique/religieuse/sociale. Si l'employeur d'un lecteur, une école/université, une communauté religieuse ou la famille suivent l'usage du net, activer le HTTPS/SSL veut dire qu'ils ne peuvent pas voir quelles sont les pages spécifiques qui ont été vues sur ce site. C'est un bon outil (loin d'être parfait) pour se protéger contre les "petits adversaires" —persécuteurs politiques, des membres de la famille homophobes, des communautés religieuses intolérantes à la critique ou à la libre pensée— de voir quelles sont les pages d'un site Web particulier que quelqu'un est en train de regarder.
    • tommorris : Si je me trompe de cybersécurité, certains de mes amis pourraient ne pas avoir de maisons.
  • Gains de performance à utiliser HTTP/2 (https://www.httpvshttps.com). La plupart des vendeurs de navigateurs ont décidé de n'implémenter que HTTP/2 au lieu de TLS, i.e. https://. [1]
  • Rang de recherche. Google classe désormais les sites https plus haut que les sites non-https (http://googleonlinesecurity.blogspot.co.uk/2014/08/https-as-ranking-signal_6.html)
  • Intégrité de pubication. Si vos pages sont distribuées via https, les ISP's, ou quiconque au milieu, ne peuvent pas injecter de contenu et des headers dans votre site - c'est à dire :
  • Réduire le traçage niveau opérateur

Comment faire

Obtenir un certificat

Acheter ou obtenir des certificats SSL gratuits aujourd'hui

  • Let's Encrypt est une autorité ouverte de certificat, gratuite, automatisée, qui existe pour le bénéfice public. Sponsorisée par Mozilla et l'Electronic Frontier Foundation, parmi d'autres, Let’s Encrypt automatise et vous évite les maux de crâne, et permet aux opérateurs de site d'activer et de gérer HTTPS avec de simples commandes.
  • StartSSL offre des certificats SSL gratuits pour les domaines uniques. Si vous vérifiez votre identité, ils vous permettent aussi d'enregistrer des certs gratuits wildcard. Néanmoins, en 2016 il a été retiré du certificat racine de Mozilla et d'Apple. cf iwc:StartSSL#Criticism
  • namecheap.com offre des certificats SSL domaine-unique pour $7.95/year et des certificats wildcard pour $85/year
  • GlobalSign offre des certificats wildcard gratuits (!) pour les projets open source.
  • ssls.com a des certificats SSL bon marché provenant de plusieurs fournisseurs. En date du 2014/03/08, un certificat PositiveSSL valait $4.99/an pour un engagement sur 5 ans. Ils fournissent aussi des certificats SSL *gratuits* SSL pour des périodes de 90 jours.
  • CAcert est une organisation à but non lucratif qui fournit des certificats wildcard gratuits. Malheureusement le certificat racine n'est pas inclus par défaut dans la majorité des systèmes d'exploitation et navigateurs. Ces certs sont généralement utilisés dans la communauté GNU.
  • Amazon Web Services fournit des certificats SSL gratuits qui peuvent être utilisés avec d'autres services Amazon. Il n'y a pas d'installation requise autre que de cliquer dans l'interface web.
  • WoSign est une autorité de certification qui offre des certificats validés pour les domaines. Néanmoins, en 2016 elle a été retirée du certificat racine de Mozilla et Apple. Voir iwc:StartSSL#Criticism

Valider votre Achat

Les fournisseurs de certificats SSL exigent quelque forme de validation de vous, votre domaine, et votre propriété du domaine.

Génération CSR — Une "Certificate Signing Request" doit être générée pour votre site. Par exemple, sur un fournisseur d'hébergement qui utilise Cpanel, le "Manager SSL/TLS" a une section "Certificate Signing Requests".

Approuver Email — ssls.com asks for an "Approver Email" from a list of administration email addresses and Domain Registration email addresses. Choose one that you use, and receive the Domain Control Validation email, which contains a link and a "validation code". Click the link and enter the code to verify that you own the domain.

Certificate Email — ssls.com send the certificate to the "Administrator Email" that you specified during the purchase process. This certificate is used in the process below.

Gérer

Quand vous aurez terminé avec votre achat, vous aurez un ou plusieurs fichiers pour chaque certificat :

  • Le certificat lui-même, par ex. snarfed.org.ssl.crt.
  • La clé privée que vous avez utilisée pour générer le certificat, par ex. id_rsa-2048.
  • Facutltatif : Votre certificat intermédiaire d'Autorité de Certification par ex., sub.class1.server.ca.pem.
  • Facultatif : Votre racine de CA, par ex. ca.pem. En espérant que vous aurez choisi une Autorité de Certification dont le cert racine soit distribué avec la plupart des OS/navigateurs ; si c'était le cas, vous pouvez ignorer cela. (Si ce n'est pas le cas, vous devriez réétudier !)

Tous ces fichiers sont généralement au format X.509 mis à part la clé privée, qui est RSA ou tout autre format de clé privée.

La ligne de commande openssl est votre amie pour inspecter et modifier les certificats. Par exemple pour avoir l'info concernant un cert :

openssl x509 -text -in snarfed.org.ssl.crt

Si votre CA vous a fourni un cert intermédiaire, vous devrez le fournir à votre serveur web avec votre propre cert. Pour les serveurs qui n'acceptent qu'un fichier unique, vous devrez concaténer les certs, par ex. :

cat snarfed.org.ssl.crt sub.class1.server.ca.pem > snarfed.org.unified.ssl.crt

As another example, it seems like this command line should verify that a cert is valid:

openssl verify -verbose -CAfile ca.pem snarfed.org.unified.ssl.crt

...but User:snarfed.org gets this error:

error 20 at 0 depth lookup:unable to get local issuer certificate

You will get the "error 20" error above when openssl is unable to locate the root or intermediate certificates in your chain - if you are on Linux, or know where your OS stores the certificate list, you can run:

openssl verify -verbose -CApath /etc/ssl/certs snarfed.org.unified.ssl.crt

If you have gnutls command line tools installed, you can verify self-signed certs:

certtool -e --infile snarfed.org.unified.ssl.crt

Réglages

L'IETF a un document avec des recommandations pour un Usage Sûr des TLS et DTLS.

Mozilla a un outil génial pour construire la Configuration SSL pour différents outils : Mozilla SSL Configuration Generator.

https://cipherli.st est une anti-sèche rapide pour la configuration Apache, nginx et Lighttpd TLS.

testssl.sh est un outil ligne de commande pour visualiser vos configurations TLS.

Apache

Apache est vraiment facile. Voici un bon post "how-to". TL;DR: Put the certificate files somewhere your Apache user can read, then set the SSLCertificate* config directives, e.g.:

SSLCertificateKeyFile /home/ryan/.ssh/id_rsa-2048
SSLCertificateFile /home/ryan/www/snarfed.org.ssl.crt
SSLCACertificateFile /home/ryan/www/sub.class1.server.ca.pem

User:ShaneHudson.net - As well as the certificates and keys, it is also useful to have forward secrecy and HSTS. I used the following lines in httpd.conf, the articles I found them in are in the FAQs further below. This went from C to A+ on the SSL test.

SSLProtocol all -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"

App Engine

Si vous servez sur l'AppEngine intégré de Google du domaine appspot.com, vous y êtes presque ! Ajoutez simplement secure: always (ou optional) aux handler(s) dans votre app.yaml ou tout autre fichier de configuration d'app, et vous pourrez accéder à votre app sur https. Détails ici.

Si vous utilisez la runtime Java sur App Engine, ajoutez ce stanza à votre fichier web.xml.

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 
   ...> 

  <security-constraint>
    <web-resource-collection>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
  </security-constraint>

You may additionally want to send a HSTS header to further improve security. In java, the easiest way from a servlet running on AppEngine is to add this header to all responses when running on the production server.

import com.google.appengine.api.utils.SystemProperty;

...

      if (SystemProperty.environment.value() ==
          SystemProperty.Environment.Value.Production) {
          // force ssl for six months.
          response.addHeader("Strict-Transport-Security", "max-age=15768000");
      }

If you also deliver static content, you may want to enable the HSTS header here as well. An example stanza within your appengine-web.xml file might look like this.

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
...
    <static-files>
    <include path="/static/**" >
      <http-header name="Strict-Transport-Security" value="max-age=15768000"/>
...



If you're on a custom domain, you can use either SNI or a VIP. Details here. You'll need to upload your SSL cert files to the Google Apps control panel for your domain, then add and configure SNI or VIP slots in App Engine.

nginx

We can setup nginx to listen on port 443 with our SSL sertificate quite easily:

server {
    listen 443 ssl;
    server_name example.org;

     ssl_certificate /path/to/unified.crt;
     ssl_certificate_key /path/to/my-private-decrypted.key;

     //usual nginx config here like location blocks
}

For more detailed nginx config instructions see the page on nginx

Test

Production

Le Test Serveur de Qualys est un moyen facile de tester le certificat SSL sur votre site. Voir par exemple la carte de compte-rendu pour brid.gy, ou en comparaison celle de jonnybarnes.uk qui a des résultats légèrement différents.

shaaaaaaaaaaaaa.com vérifiera si votre SSL Cert utilise SHA-1 ou SHA-2 et explique pouquoi ça devient de plus en plus important.

https://securityheaders.io testera la dureté d'en-tête de sécurité du serveur web et offre des raisons

Observatory par Mozilla vérifie différents aspects de sécurité d'un site et donne un score, en plus d'agréger les résultats à partir de tiers qui scannent les sites tels que https://securityheaders.io.

testssl.sh est un script ligne de commande qui peut tourner localement pour vérifier les certificats et configurations TLS.

Vous pouvez utiliser openssl s_client pour debuger les problèmes de connexion, par exemple :

openssl s_client -connect snarfed.org:443

If your server uses SNI, you'll need to provide the hostname too:

openssl s_client -servername www.brid.gy -connect www.brid.gy:443

Here's an example of debugging a single SSL issue:

Brand new StartSSL certificates may give an OCSP validation error for 6-24 hours after purchase. This seems to only affect Firefox and resolves itself when the certificate propagates to the validation server[2]. Firefox users can disable the check temporarily with Edit > Preferences > Advanced > Certificates > Validation, and uncheck "Use the Online Certificate Status Protocol"

Local

Au moment de développer un site web localement, il peut être utile de pouvoir tester le site via https. Par exemple, au moment d'écrire un client OAuth, quelques fournisseurs ne redirigeront pas une page qui n'utilise pas https.

Le moyen le plus facile de faire ça est de rediriger temporairement votre site vers votre propre localhost (juste pour vous) et d'utiliser votre cert de site. Ajoutez juste une ligne comme ceci à votre fichier hosts :

127.0.0.1	snarfed.org

This is obviously temporary, though. For a more permanent setup, you can either generate a self-signed SSL certificate for your testing domain (localhost, etc) or you can create your own SSL certificate authority and sign the certificate with that.

Pour aider sur ce point, aaronpk a créé une autorité racine "IndieWebCamp" qui peut signer des certificats pour les domaines finissant par ".dev".

Vous pouvez ajouter une ligne vers votre fichier hosts pour votre domaine test comme :

127.0.0.1   mondomaine.dev

Et ensuite vous pouvez utiliser le certificat d'autorité IndieWebCamp pour générer un cert SSL.

Renew

A few things to be aware of when you need to renew your certificates.

Because all of the browsers now share lists of certificates that are invalid and/or broken as part of OCSP stapling you should renew your certificate at least two days prior to it expiring and then update your server with the certificate at least a day before. This allows the various OCSP lists to update before you touch your server - if you do not you may get some customers whose browsers have an older list and your certificate will not pass their OCSP check, which is different than it being on the revocation list.

Let's Monitor is a free service to monitor your sites and alert you via SMS or email when your certificates are out of date or aren't working.

Trucs, astuces et bonnes pratiques

  • pour éviter des alertes de contenus mixés, remplacez chaque lien entrant http:// et https:// ( votre domaine ) vers seulement le préfixe // . Ceci est supporté dans tous les navigateurs modernes et retrouvera automatiquement le protocole quand vous voudrez accéder à la page.

Posts concernant HTTPS

Niveaux IndieMark

Les niveaux IndieMark du support HTTPS recommandé pour votre propre site web, en tant que partie du composant sécurité


Niveau 1 sécurité

Niveau 1 - Don't do the wrong thing. (what's the minimal "not wrong thing"?). Possible reasonable behaviors:

  • Refuser la connexion, parce que si vous ne support pas SSL, généralement vous n'écoutez pas le 443, ainsi les clients ne peuvent pas se connecter. Défi : l'utilisateur n'a pas idée de ce qui ne va pas, ni la façon de corriger ça (c'est à dire essayer de nouveau le site avec "http:").

Pourquoi ?

  • Éviter une expérience-utilisateur trompeuse.

Exemples IndieWeb

  • ... ajoutez-vous ici vous-même avec la date de votre Niveau 1 vérifié !


Niveau 2 sécurité

Niveau 2 - Sécurisez l'admin de votre site - supporter https pour vos pages d'UI de connexion/admin avec un certificat auto-signé.

  • Vos page(s) admin :
    1. DOIVENT être disponible sur https
    2. DEVRAIENT rediriger automatiquement de http à https, afin que vous ne vous connectiez pas accidentellement en clair sur http (c'est à dire envoyer vos identifiants login et mot de passe de votre site en clair)
    3. DEVRAIT inclure le marqueur de sécurité (détails PHP) au moment de régler les cookies de session/credential, de telle façon que les cookies ne fuirent pas sur d'autres (probablement non-admin) requêtes http (c'est à dire permettre les attaques de réutilisation de cookie style Firesheep)

Pourquoi ?

  • Sécurité pour l'accès-en-écriture pour votre site ! Autrement n'importe qui peut hacker votre CMS et poster des choses à votre place (par exemple utiliser un outil comme Firesheep pour aspirer vos cookies de connexion de session, et les ré-utiliser pour avoir accès à vos pages admin.

Comment faire

  • Comment faire que vos admin page(s) soient disponibles sur https :
    • installez un certificat auto-signé (voyez avec votre fournisseur d'hébergement web pour les détails)
    • naviguez explicitement (par ex. en tapant) vers la version https:// de votre site.
  • Comment rediriger votre UI admin de http à https automatiquement :
    • faites que Admin Wordpress utilise SSL : http://codex.wordpress.org/Administration_Over_SSL
    • faire que vos propres autres logiciels utilisent SSL sur Apache en utilisant .htaccess (dérivé de ctte référence WP), par ex. pour votre URL admin example.com/my-adm/

      # HTTPS-only my-adm
      RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)\ HTTP/ [NC]
      RewriteCond %{HTTPS} !=on [NC]
      RewriteRule ^/?(my-adm/) https://example.com%{REQUEST_URI}%{QUERY_STRING} [R=301,QSA,L]

      où:
      • example.com est votre domaine personnel, et
      • my-adm/ est le chemin vers votre UI admin web login.

N.B. vérificateur utile du fichier htaccess : htaccess checker - vous laisse coller dans votre fichier htaccess et allez à l'URL test en utilisant des URLs échantillons.

  • Comment sécuriser vos cookies, par ex. in PHP :
    • régler différents params de session avant d'appeler session_start() :

      ini_set("session.cookie_httponly", 1);
      ini_set("session.use_only_cookies", 1);
      ini_set("session.cookie_secure", 1);
      session_start();

    • nettoyez vos cookies dans votre navigateur, utilisez votre login pour vous connecter sur votre site web, puis double-cliquez pour vérifier que vos cookies soient sûres, par exemple dans Firefox :
      • choisissez Preferences... dans le menu Firefox.
      • clicquez onglet Privacy
      • clicquez Show Cookies...
      • enter your domain name into the dialog's search box
      • sélectionnez la cookie réglée par votre code, par ex. "PHPSESSID"
      • L'info sous la liste des cookies devrait afficher :

        Send For: Encrypted connections only

        Si ce n'était pas le cas, ou si cela dit quelque chose comme

        Send For: Any type of connection

        alors la cookie n'est pas sûre.


Note : Si vous réglez un vrai cert SSL pour l'ensemble de votre domaine et servez votre interface d'admin provenant du même domaine, vous êtes parvenu au Niveau 3.

Exemples IndieWeb

  • portrait Tantek Çelik pour tantek.com sur son interface admin Falcon sur https://tantek.com/falcon/ since 2014-05-23, et redirige l'UI d'admin de domaine de http vers https automatiquement et sécurise la cookie de sessions depuis 2014-09-02.
  • ...
  • ... ajoutez-vous ici avec la date à laquelle vous avez atteint le Niveau 2 !

Niveau 3 sécurité

Niveau 3 - Servez facultativement sur toutes vos pages - fournissez votre front-end à la fois sur http et https avec un cert provenant d'un CA certifié, mais pas nécessairement du contenu externe, par conséquent vous pourriez encore avoir des avertissements de contenus mélangés.

Pourquoi ?

  • Vous pouvez lier à partir de profils silo vers votre site via https
  • Vous pouvez commencer par utiliser (requis!) votre URL https pour les connexions IndieAuth (par ex. le wiki)
  • Vos lecteurs peuvent accéder en sécurité à votre site sans pop-up d'avertissement étrange.
  • La privacy pour vos lecteurs (ce qu'ils choisissent de lire)[3]

Exemples IndieWeb

Exemples IndieWeb avec http vers des redirections https (qui ont encore besoin d'être réparées d'alertes de contenus mélangés) - nous recommandons explicitement de ne pas rediriger vos pages http vers https à moins que vous ne soyez sûr de ne pas avoir d'alertes de contenus mixés.

  • 2014-??-?? Indiewebcamp.com itself

Niveau 4 sécurité

Niveau 4 - Icône verrou ou mieux au moment de servir https - soyez certain qu'il y ait au moins une icône de cadenas prêt du https dans la barre d'adresse. Servez tout (page d'accueil, permaliens, images) sur https quand l'utilisateur requête https. Éliminez les alertes de contenus mixés (par ex un triangle avec un point d'exclamation prêt du https dans la barre d'URL).

Pourquoi ?

  • Eviter de montrer au lecteur un message d'alerte ou une icône de triangle dans la barre d'adresse du navigateur.
  • Si vous permettez l'accès http ou https à votre site, et que votre accès https *manque* le message d'avertissement de contenu mixé, vous aidez au moins vos visiteurs https.
  • Eliminer les avertissements de contenu-mixé est important parce que ces avertissements rendent le https inefficace. L'utilisateur n'a pas d'idée combien une page, ses images, scripts ou textes créés à partir des scripts viennent d'une connexion encapsulate http.
  • Eviter le contenu http/https qui est bloqué par défaut sur Firefox & Chrome. Voir : https://blog.mozilla.org/security/2013/05/16/mixed-content-blocking-in-firefox-aurora/, https://code.google.com/p/chromium/issues/detail?id=81637

Exemples IndieWeb par ordre d'implémentation


FAQ :
Comment vous assurez-vous que le contenu externe est sur https ? c'est à dire si j'ai un avatar pour un commentaire de portrait Tantek Çelik il sera sur http parce qu'il utilise http.

  • Quand vous recevez une web mention, téléchargez l'image provenant de la h-card et servez-la sur votre propre serveur.
  • Alternativement, utilisez un proxy https d'image comme https://github.com/atmos/camo (utilisé par GitHub)
  • A moins que ce ne soit une mention Twitter, auquel cas liez vers :
    • https://twitter.com/nomutilisateur/image_profil
    • Voir Twitter#Profile_Image_URLs pour en savoir plus sur les images de profil Twitter.

Niveau 5 sécurité

Level 5 - Rediriger tout vers https - envoie les redirection à partir de http -> https. par ex. vos pages ont toujours automatiquement une icône de verrou dans la barre d'adresse du navigateur (et pas d'avertissements).

Pourquoi ?

  • Toutes vos URLs de site seront cohérentes.
  • Les utilisateurs recevront du contenu que vous avez décidé de leur servir
  • Tous les avantages vers une sécurité internet plus large de servir toujours https (documenté en intro tout en haut)

Exemples IndieWeb par ordre d'implémentation

  • 2014-??-?? Ryan Barrett on https://snarfed.org/ (via HSTS header)
  • 2014-05-23 Kartik Prabhu on https://kartikprabhu.com/ (via 301 redirect)
  • David Shanske on https://david.shanske.com/ since 2014-12-25.
    • At Level 3 from 2014-08-29
    • Was at Level 4 for a bit, but did not note date.
    • All posts, resources, including external user pics.
    • Caveat: There may be some older posts with embedded images from http that still give the mixed content warning. I think I have them all
      • Dropped down to B...updated ciphers and added a custom DHE parameter. As of 2016-02-14 am back at A+.
  • 2015-06-19 Scott Gruber on https://scottgruber.me Installed renewal cert on 2016-04-18.
  • ...
  • ... add yourself here with the date you reached Level 5!

Vérifiez la barre d'adresse du navigateur où votre URL est affichée et assurez-vous :

  • Il y a une icône de verrou avant (en face de) l'URL dans la barre d'adresse
  • Il n'y a pas d'icône triangle d'avertissement (en face) de l'URL dans la barre d'adresse

Pourquoi mon site avance si lentement ?

  • I found that moving my https redirect into httpd instead of .htaccess, and explicitly setting it to go to www meant it would be faster and wouldn't go through multiple redirects. This SO question came in handy for getting httpd to redirect. ~ Shane Hudson

Pourquoi suis-je seulement en A et non A+ ?

Niveau 6 sécurité

Niveau 6 - Correct ciphers, support forward secrecy, etc. per https://www.ssllabs.com/ssltest/ (all previous levels required, i.e. document method of http to https redirection)

Pourquoi ?

Exemples IndieWeb

Crittique

Legacy Software and SNI Support

A server has an IP address. It used to be that each server would host one website (domain) in HTTP/1. Then HTTP/1.1 introduced the Host header which allowed a server to host multiple domains. However, the connection needs to be encrypted before the Host header can be sent. So which certificate should the server send initially? When the wrong one is chosen we get issues. The solution to this problem is called Server Name Indication. SNI is supported by all modern browsers and cryptography libraries. OpenSSL is one of the most popular and has supported SNI since 2010 for example. However, we can run into issues when older software tries to interact with your site: http://indiewebcamp.com/irc/2015-12-06/line/1449416119493

General X509 Criticism

Taxe de maintenance et fragilité du site

Adding HTTPS to your site adds the extra maintenance tax of HTTPS certificate renewal (and updating).

As a result, if you fail to do this, or get it wrong, your site goes down.

Evidence:

Let’s Encrypt are trying to fix this by making updating TLS certificates an automated process via their Let’s Encrypt client.

En rapport

Sessions

Sessions at IndieWebCamps about https:


Voir aussi

Articles à lire