Utilisation de acme.sh (mémo)

mar. 10 septembre 2024

ACME.SH est l’implémentation sous la forme minimaliste d’un script Shell du protocole ACME. Il est porté par l’ISRG (Internet Security Research Group) pour l’usage de leur service Let’s Encrypt qui fournit des certificats SSL gratuits. On peut donc mettre en place un service web utilisant un certificat reconnu dans une chaine de certification gratuitement. On reste cependant sur un service minimal : le certificat est valable 3 mois (il faut prévoir le renouvellement). Il n’y a pas de reconnaissance de l’identité du porteur du certificat (ce n’est pas adapté à des infras d’entreprises, d’associations, de collectifs… bref des organismes à vocations puliques ; mais là on fait du perso, donc osef).

En premier lieu on installe.

Sous Gentoo, pas de useflags particulier :

emerge acme-sh

En premier lieu il faut s’enregistrer (de toute façon en lançant les commandes d’après on sera rappelé à cette première étape qui est explicitement donné).

acme-sh --register-account -m monemail@maildomain.truc

On génère les certificats correspondants au domaine du site web. Via la répétition de l’argument "-d" on peut inclure autant de sous-domaine que l’on souhaite. Ici le domaine principale, suivis du sous-domaine www.

acme-sh --issue -d mondomaine.truc -d www.mondomaine.truc -w /var/www/localhost/htdocs

Les certificats générés ne sont pas utilisable par les applications comme les serveurs web. Il faut donc les "convertir". Mais la commande évoque plutôt une "installation". Si on copie manuellement les certificats générés, le chemin a peu d’importance.

acme-sh --install-cert -d mondomaine.truc --ecc --cert-file /chemin/cert.pem --key-file /chemin/key.pem --fullchain-file /chemin/fullchain.pem --ca-file /chemin/ca.pem

Bien qu’il y ait un fichier d’authorité de certification (le ca-file) je n’en ai pas trouvé l’utilité.

Pour un usage pour un serveur Lighttpd j’installe les fichiers dans le chemin de configuration du serveur : /etc/lighttpd/ssl.

Ici voici la configuration pour lighttpd. Il faut créer la section correspondante dans le fichier de configuration par défaut lighttpd.conf. L’adresse IP à la première ligne correspond à l’adresse IP local du seveur. 443 est le port par défaut utilisé pour HTTPS sur Internet.

$SERVER["socket"] == "192.168.1.4:443" {
        server.name = "mondomaine.truc"
        server.document-root = "/var/www/localhost/htdocs/"
        server.errorlog = "/var/log/lighttpd/http_error.log"
        accesslog.filename = "/var/log/lighttpd/http_access.log"
        ssl.engine = "enable"
        ssl.pemfile = "/etc/lighttpd/ssl/cert.pem"
        ssl.privkey = "/etc/lighttpd/ssl/key.pem"
        ssl.ca-file = "/etc/lighttpd/ssl/fullchain.pem"
}