sudo apt install libnss3-tools sudo cp homelab.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates sudo chmod a+r /usr/local/share/ca-certificates/
Pour que le certificat soit aussi reconnu dans Firefox et Thunderbird, il faut exécuter le script suivant (source) :
sudo apt install libnss3-tools # pour certutil readonly certificateFile="/usr/local/share/ca-certificates/homelab.crt" readonly certificateName="Homelab" find ~/.mozilla* ~/.thunderbird -name "cert9.db" | while read -r certDB do certDir=$(dirname "${certDB}"); echo "install '${certificateName}' in ${certDir}" certutil -A -n "${certificateName}" -t "TCu,Cuw,Tuw" -i ${certificateFile} -d ${certDir} done
openssl genrsa -out server.key 1024
CSR: Certificate Signing Request
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt # ou openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes # génère un .pem
openssl x509 -req -in myserver.csr -out myserver.crt -CA superfish.pem -CAkey superfish.key -CAcreateserial -CAserial mysuperfish.srl
sudo openssl s_server -accept 443 -cert server.pem
-WWW sert les fichiers présents dans le dossier courant-key <private key>: permet de spécifier la clé privée-cert <certificate.crt>: permet de spécifier le certificat du serveuropenssl s_client -connect 192.168.12.1:443
Permet d'obtenir le certificat du serveur (entre les balises CERTIFICATE) et d'interagir ensuite avec le serveur (appuyer deux fois sur ENTREE !)
openssl x509 -noout -dates -in cert.pem
sudo curl -fsSL https://packages.smallstep.com/keys/apt/repo-signing-key.gpg -o /etc/apt/trusted.gpg.d/smallstep.asc && \ echo 'deb [signed-by=/etc/apt/trusted.gpg.d/smallstep.asc] https://packages.smallstep.com/stable/debian debs main' \ | sudo tee /etc/apt/sources.list.d/smallstep.list sudo apt update sudo apt install step-ca step-cli step ca init sudo step-ca $(step path)/config/ca.json step ca provisioner add acme --type ACME --x509-default-dur=$((30*24))h sudo useradd --user-group --system --home /etc/step-ca --shell /bin/false step sudo setcap CAP_NET_BIND_SERVICE=+eip $(which step-ca) sudo mv $(step path) /etc/step-ca # put password in /etc/step-ca/password.txt sudo chmod 400 /etc/step-ca/password.txt # edit and adapt paths in /etc/step-ca/config/defaults.json # edit and adapt paths in /etc/step-ca/config/ca.json sudo chown -R step:step /etc/step-ca # create the service in /etc/systemd/system/step-ca.service sudo systemctl daemon-reload sudo systemctl status step-ca sudo systemctl enable --now step-ca sudo journalctl --follow --unit=step-ca
Ici, on utilise Certbot pour automatiser la récupération d'un certificat pour l'interface web de PiHole :
sudo apt install certbot sudo certbot certonly -n --standalone -d pihole.homelab --server https://ca.homelab/acme/acme/directory sudo cat /etc/letsencrypt/live/pihole.homelab/privkey.pem /etc/letsencrypt/live/pihole.homelab/fullchain.pem | sudo tee /etc/pihole/tls.pem sudo service pihole-FTL restart
Après la commande, Certbot va automatiquement créer un timer Systemd pour deux fois par jour renouveler les certificats. Pour que le certificat renouvelé soit pris en compte par PiHole, créer le script /etc/letsencrypt/renewal-hooks/deploy/pihole (lui donner l'autorisation en exécution) :
#!/bin/sh -eu found=0 for domain in $RENEWED_DOMAINS do if [ "$domain" = "pihole.homelab" ] then found=1 fi done if [ "$found" = "0" ] then exit 0 fi cp /etc/pihole/tls.pem /etc/pihole/tls.pem.old cat /etc/letsencrypt/live/pihole.homelab/privkey.pem /etc/letsencrypt/live/pihole.homelab/fullchain.pem > /etc/pihole/tls.pem service pihole-FTL restart
Un bug dans la version 4.0.0 de Certbot considère que renew_before_expiry vaut toujours 30 jours. Si les certificats ont une durée de validité de 30 jours, cela signifie qu'ils sont renouvelés à chaque fois. Pour contourner le bug, il faut préciser la durée de renouvellement dans /etc/letsencrypt/renewal/domain.conf :
renew_before_expiry = 10 days