111 lines
3.7 KiB
Markdown
111 lines
3.7 KiB
Markdown
---
|
|
title: Certificates TLS robustes avec acme.sh
|
|
subtitle: 384-bit de https
|
|
lang: fr
|
|
slug: "acme-sh-tls-cert"
|
|
createdAt: "2022-06-08T14:24:06.000Z"
|
|
excerpt: La sécurité avec des courbes.
|
|
tags: ["sécurité"]
|
|
---
|
|
|
|
## 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](https://tls.imirhil.fr/)
|
|
|
|
Vous pouvez en apprendre (beaucoup) plus [ici](https://crypto.stackexchange.com/questions/1190/why-is-elliptic-curve-cryptography-not-widely-used-compared-to-rsa) 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](https://github.com/acmesh-official/acme.sh)
|
|
|
|
```bash
|
|
# 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.
|
|
|
|
```bash
|
|
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](https://github.com/acmesh-official/acme.sh/wiki/dnsapi) de fournisseurs DNS.
|
|
|
|
### Definir la clé api
|
|
|
|
Suivez la [documentation](https://github.com/acmesh-official/acme.sh/wiki/dnsapi) pour votre fournisseur DNS, généralement:
|
|
|
|
```bash
|
|
export PROVIDER_Key="YOUR_API_KEY"
|
|
```
|
|
|
|
### Émettre le certificat
|
|
|
|
```bash
|
|
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.
|
|
|
|
```bash
|
|
acme.sh --issue --standalone -d domain.tld --keylength ec-384
|
|
```
|
|
|
|
## Exemples
|
|
|
|
### Multi domaines standalone
|
|
|
|
```bash
|
|
acme.sh --issue --standalone -d domain.tld -d www.domain.tld -d subdomain.domain.tld --keylength ec-384
|
|
```
|
|
|
|
### Wildcard domaine DNS
|
|
|
|
```bash
|
|
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%](https://caniuse.com/?search=tls%201.) avec 1.2).
|
|
|
|
### HSTS
|
|
|
|
Utiliser le header [strict transport security](https://scotthelme.co.uk/hsts-the-missing-link-in-tls/).
|
|
|
|
```
|
|
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](https://tls.imirhil.fr/ciphers), en la comparant avec celle de la compatibilité (d'anciens ?) [navigateurs](https://tls.imirhil.fr/suite).
|
|
|
|
J'ai ensuite demandé à [Aeris](https://twitter.com/aeris22), le créateur de [tls.imirhil.fr](https://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
|
|
```
|