Mittlerweile gibt es eine große Auswahl an Bots für das ACME Protokoll, mit dem man (zum Beispiel bei LetsEncrypt) TLS Zertifikate signieren lassen kann. Als Java-Entwickler hatte ich auf Basis der Bibliothek ACME4j meine eigene Lösung gebaut, die aber nur mit allen Versionen der Bibliothek und alten Versionen des ACME Protokolls arbeitet.
Aus der Basis ACME4j gibt es auch einen fertigen ACME Client: PJAC, den Porunov Java ACME Client.
Wenn man Zertifikate signieren will, benötigt man einen Account bei Anbieter. Die Authetifizierung erfolgt über einen Public Key, den wir in diesem Schritt erzeuge und nutzen.
openssl genrsa -out $HOME/pjac/account.key 2048
java -jar acme_client.jar --log-dir $HOME/pjac --command register --account-key $HOME/pjac/account.key \\ --with-agreement-update --email webmaster@example.com
openssl req -newkey rsa:2048 -days 370 -nodes -sha256 -out example.com.csr -keyout example.com.key
OpenSSL stellt einige Rückfragen nach Land, Ort und der Organisationseinheit. Wichtig ist, dass wir bei der Frage nach dem Common Name unsere Domain für das Zertifikat angeben! Im Beispiel ist das example.com.
java -jar acme_client.jar --log-dir $HOME/pjac --command order-certificate \\
--account-key $HOME/pjac/account.key --work-dir $HOME/pjac --csr example.com.csr \\
--well-known-dir /var/www/example.com/.well-known/acme-challenge --one-dir-for-well-known
Schreibrechte unter /var/www/wolke.jalin.de/.well-known/acme-challenge/ vorausgesetzt.
java -jar acme_client.jar --log-dir $HOME/pjac --command verify-domains \\
--account-key $HOME/pjac/account.key --work-dir $HOME/pjac --csr example.com.csr
java -jar acme_client.jar --log-dir $HOME/pjac --command generate-certificate \\
--account-key $HOME/pjac/account.key --work-dir $HOME/pjac --csr example.com.csr \\
--cert-dir /etc/nginx/...
Die Option --cert-dir zeigt auf den Pfad, in den das Zertifikat und die Zertifikats-Chain gespeichert werden. Wir benötigen Schreibrechte.
Die Namen der Download-Dateien sind: