• sécurité

Certificates TLS robustes avec acme.sh

384-bit de https

Publié le :

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