Certificates TLS robustes avec acme.sh
384-bit de https
Attention
Je ne suis pas du tout un expert en sécurité. J’aime juste les trucs nouveaux et stylés des internets.
C’est pourquoi j’ai modifié mes certificats TLS par défaut pour utiliser la cryptographie à courbe elliptique (ECC) au lieu de RSA. J’ai maintenant un joli 100/100 sur tls.imirhil.fr
Vous pouvez en apprendre (beaucoup) plus ici et sur les liens cités (en anglais).
Prérequis
Installer acme.sh
Pour des raisons de simplicité et d’automatisation, j’utilise acme.sh
# pour utiliser le mode standalone, il peut être nécessaire d'installer en sudo
curl https://get.acme.sh | sh -s email=mail@domain.tld
Changer l’authorité par défaut
Par défaut, acme.sh utilise ZeroSSL pour signer les certificats. Il faut changer ce paramètre pour Let’s Encrypt car, d’après acme.sh, ils sont les seuls à proposer des certificats ECC.
acme.sh --set-default-ca --server letsencrypt
Utiliser l’api DNS
Si vous en avez la possibilité, la façon la plus simple de générer un certificat est via l’api de votre fournisseur DNS. acme.sh supporte énormément de fournisseurs DNS.
Definir la clé api
Suivez la documentation pour votre fournisseur DNS, généralement:
export PROVIDER_Key="YOUR_API_KEY"
Émettre le certificat
acme.sh --issue -d domain.tld --dns dns_provider --keylength ec-384
Utiliser le mode standalone
Si vous n’avez pas accès aux réglages DNS, le mode standalone permet de lancer un serveur web temporaire qui s’occupe de toutes les vérifications.
Le port 80
doit être disponible.
acme.sh --issue --standalone -d domain.tld --keylength ec-384
Exemples
Multi domaines standalone
acme.sh --issue --standalone -d domain.tld -d www.domain.tld -d subdomain.domain.tld --keylength ec-384
Wildcard domaine DNS
acme.sh --issue -d domain.tld -d '*.domain.tld' --dns dns_provider --keylength ec-384
Étapes supplémentaires
Le certificat ECC seul ne suffira pas à obtenir un score élevé/parfait.
Version TLS
Limiter la version TLS à 1.2 et 1.3 (voire uniquement 1.3 vu la différence de compatibilité de 5% avec 1.2).
HSTS
Utiliser le header strict transport security.
Strict-Transport-Security: max-age=31536000; includeSubDomains
Suite cryptographique
Utiliser une suite cryptographique récente et robuste. C’est ici que mes connaissances deviennent limitées… J’ai encore un peu de mal à comprendre quelles suites fonctionnent bien et pourquoi.
J’avais basé ma première suite sur cette liste, en la comparant avec celle de la compatibilité (d’anciens ?) navigateurs.
J’ai ensuite demandé à Aeris, le créateur de tls.imirhil.fr, ses conseils sur cette suite. Il m’a recommandé d’utiliser :
ECDHE+AES:ECDHE+CHACHA20
Afin d’atteindre un score de 100/100, il est possible de restreindre un peu plus la suite comme ceci :
ECDHE+AES256:ECDHE+CHACHA20