Wie initiiere ich die Erneuerung des Zertifikats, indem ich einfach das alte unter /shared/ssl lösche?
Ich glaube, es macht es immer, wenn es neu erstellt wird, daher ist es nicht notwendig, etwas zu löschen.
Das Zertifikat wurde gestern ausgestellt, daher benötigt es normalerweise ein --force in den LE-Skripten. Ich habe nun die alten Zertifikate umbenannt und teste einen Neuaufbau.
Anscheinend funktioniert das nicht, ich bekomme die zweite eingegebene Domain nicht: https://ssl-tools.net/webservers/rpg-foren.com
Es sieht auch nicht so aus, als wäre alles richtig ersetzt worden, der ecc-Datei fehlt die Subdomain:
cat /etc/runit/1.d/letsencrypt
#!/bin/bash
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf
issue_cert() {
LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh --issue $2 -d rpg-foren.com -d www.rpg-foren.com --keylength $1 -w /var/www/discourse/public
}
cert_exists() {
[[ "$(cd /shared/letsencrypt/rpg-foren.com$1 && openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer | grep "OK")"]]
}
########################################################
# RSA cert
########################################################
issue_cert "4096"
if ! cert_exists ""; then
# Try to issue the cert again if something goes wrong
issue_cert "4096" "--force"
fi
LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh \
--installcert \
-d rpg-foren.com \
-d www.rpg-foren.com --fullchainpath /shared/ssl/rpg-foren.com.cer \
--keypath /shared/ssl/rpg-foren.com.key \
--reloadcmd "sv reload nginx"
########################################################
# ECDSA cert
########################################################
issue_cert "ec-256"
if ! cert_exists "_ecc"; then
# Try to issue the cert again if something goes wrong
issue_cert "ec-256" "--force"
fi
LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh \
--installcert --ecc \
-d rpg-foren.com \
--fullchainpath /shared/ssl/rpg-foren.com_ecc.cer \
--keypath /shared/ssl/rpg-foren.com_ecc.key \
--reloadcmd "sv reload nginx"
if cert_exists "" || cert_exists "_ecc"; then
grep -q 'force_https' "/var/www/discourse/config/discourse.conf" || echo "force_https = 'true'" >> "/var/www/discourse/config/discourse.conf"
fi
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf -s stop
Ich habe gerade Folgendes manuell ausgeführt, jetzt passen die Zertifikate:
/shared/letsencrypt/acme.sh --issue --force -d rpg-foren.com -d www.rpg-foren.com --keylength 4096 -w /var/www/discourse/public --server letsencrypt
/shared/letsencrypt/acme.sh --issue --force -d rpg-foren.com -d www.rpg-foren.com --keylength ec-256 -w /var/www/discourse/public --server letsencrypt
/shared/letsencrypt/acme.sh --installcert -d rpg-foren.com -d www.rpg-foren.com --fullchainpath /shared/ssl/rpg-foren.com.cer --keypath /shared/ssl/rpg-foren.com.key --reloadcmd "sv reload nginx"
/shared/letsencrypt/acme.sh --installcert -d rpg-foren.com -d www.rpg-foren.com --fullchainpath /shared/ssl/rpg-foren.com_ecc.cer --keypath /shared/ssl/rpg-foren.com_ecc.key --reloadcmd "sv reload nginx"
Dies ist mein Rewrite für die Weiterleitung:
# tell letsencrypt what additional certs to get
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--keylength/
to: "-d www.rpg-foren.com --keylength"
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--fullchainpath/
to: "-d www.rpg-foren.com --fullchainpath"
- file:
path: /etc/nginx/conf.d/discourse_redirect.conf
contents: |
server {
listen 80;
listen 443 ssl;
server_name www.rpg-foren.com;
return 301 $scheme://rpg-foren.com$request_uri;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_certificate /shared/ssl/rpg-foren.com.cer;
ssl_certificate /shared/ssl/rpg-foren.com_ecc.cer;
ssl_certificate_key /shared/ssl/rpg-foren.com.key;
ssl_certificate_key /shared/ssl/rpg-foren.com_ecc.key;
ssl_session_tickets off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:1m;
}
Ist es möglich, dass ein Replace-Befehl nur einmal ausgeführt wird?
Scheint, als wäre das Zertifikat jetzt gültig?
Ich bin ziemlich sicher, dass Weiterleitungen woanders in der Kette gehandhabt werden und Sie nichts tun müssen, damit dies funktioniert. Ich würde diesen Teil wahrscheinlich aus Ihrer YML-Datei entfernen.
Es scheint jetzt wie erwartet zu funktionieren.
Ja, aber ich habe es manuell eingerichtet und nicht über den Hook, da der Hook es nicht richtig gemacht hat.
Sie meinen von der Subdomain www. zur Hauptdomain? Zumindest nicht über nginx. Dort ist keine URL definiert, sodass der Webserver auf alle eingehenden Domains reagiert.
.
Bei mir funktioniert es (siehe unten).
Ich meine, dass alles, was auf die Website aufgelöst wird, zur Hostnamen-Adresse umgeleitet wird. Bei jeder Standardinstallation können Sie die IP-Adresse eingeben und sie wird zum https://hostname umgeleitet. (Siehe unten)
Ich habe dies gerade eingerichtet, indem ich eine neue Standardinstallation mit https://dashboard.literatecomputing.com/ erstellt und zusätzlich extrahostname.myforum.us in das Feld domain2 oben eingefügt und den resultierenden after_ssl-Hook sofort nach hooks: in web_only.yml kopiert und eingefügt habe (und das getan habe, während das Skript den Datencontainer erstellte, sodass ich ihn nicht neu erstellen musste, nachdem er beim ersten Mal fertig war!).
Diese funktionieren alle wie erwartet:
- http://104.131.101.148
- https://test.myforum.us/
- http://test.myforum.us/
- https://extrahostname.myforum.us/
- http://nocert.myforum.us/
- https://nocert.myforum.us/ (schlägt mit ungültigem Zertifikat fehl, wird umgeleitet, wenn Sie es akzeptieren)
Ich werde die obige Website morgen oder wenn ich mich erinnere löschen.
Bedeutet dies, dass die Subdomain sowohl für das RSA- als auch für das ECC-Installationsskript in /etc/runit/1.d/letsencrypt gespeichert ist?
Wie Sie oben sehen können, hat der Hook die Subdomain nur im RSA-Teil gespeichert, aber nicht im ECC-Teil.
--installcert \
-d rpg-foren.com \
-d www.rpg-foren.com
--installcert --ecc \
-d rpg-foren.com \
--fullchainpath
Hier ist /etc/runit/1.d/letsencrypt
#!/bin/bash
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf
issue_cert() {
LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh --issue $2 -d test.myforum.us -d extrahostname.myforum.us --keylength $1 -w /var/www/discourse/public
}
cert_exists() {
[[ "$(cd /shared/letsencrypt/test.myforum.us$1 && openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer | grep "OK")" ]]
}
########################################################
# RSA cert
########################################################
issue_cert "4096"
if ! cert_exists ""; then
# Versuche, das Zertifikat erneut auszustellen, falls etwas schiefgeht
issue_cert "4096" "--force"
fi
LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh \
--installcert \
-d test.myforum.us \
-d extrahostname.myforum.us --fullchainpath /shared/ssl/test.myforum.us.cer \
--keypath /shared/ssl/test.myforum.us.key \
--reloadcmd "sv reload nginx"
########################################################
# ECDSA cert
########################################################
issue_cert "ec-256"
if ! cert_exists "_ecc"; then
# Versuche, das Zertifikat erneut auszustellen, falls etwas schiefgeht
issue_cert "ec-256" "--force"
fi
LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh \
--installcert --ecc \
-d test.myforum.us \
--fullchainpath /shared/ssl/test.myforum.us_ecc.cer \
--keypath /shared/ssl/test.myforum.us_ecc.key \
--reloadcmd "sv reload nginx"
if cert_exists "" || cert_exists "_ecc"; then
grep -q 'force_https' "/var/www/discourse/config/discourse.conf" || echo "force_https = 'true'" >> "/var/www/discourse/config/discourse.conf"
fi
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf -s stop
Ah. Ich sehe, es ist im RSA (schlechten) Zertifikat, aber nicht im ECC (guten) Zertifikat.
OK. Jetzt verstehe ich. Diese --fullcert-Klausel benötigt global: true darin. Ich teste es jetzt.
OK. Hier ist das neue ‘/etc/runit/1.d/letsencrypt’
#!/bin/bash
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf
issue_cert() {
LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh --issue $2 -d test.myforum.us -d extrahostname.myforum.us --keylength $1 -w /var/www/discourse/public
}
cert_exists() {
[[ "$(cd /shared/letsencrypt/test.myforum.us$1 && openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer | grep "OK")" ]]
}
########################################################
# RSA cert
########################################################
issue_cert "4096"
if ! cert_exists ""; then
# Versuchen Sie, das Zertifikat erneut auszustellen, falls etwas schief geht
issue_cert "4096" "--force"
fi
LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh \
--installcert \
-d test.myforum.us \
-d extrahostname.myforum.us --fullchainpath /shared/ssl/test.myforum.us.cer \
--keypath /shared/ssl/test.myforum.us.key \
--reloadcmd "sv reload nginx"
########################################################
# ECDSA cert
########################################################
issue_cert "ec-256"
if ! cert_exists "_ecc"; then
# Versuchen Sie, das Zertifikat erneut auszustellen, falls etwas schief geht
issue_cert "ec-256" "--force"
fi
LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh \
--installcert --ecc \
-d test.myforum.us \
-d extrahostname.myforum.us --fullchainpath /shared/ssl/test.myforum.us_ecc.cer \
--keypath /shared/ssl/test.myforum.us_ecc.key \
--reloadcmd "sv reload nginx"
if cert_exists "" || cert_exists "_ecc"; then
grep -q 'force_https' "/var/www/discourse/config/discourse.conf" || echo "force_https = 'true'" >> "/var/www/discourse/config/discourse.conf"
fi
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf -s stop
~
~
und jetzt habe ich das, was gut aussieht? https://ssl-tools.net/webservers/extrahostname.myforum.us
Sieht das richtig aus? Wenn ja, werde ich den OP bearbeiten, um die global-Direktive einzufügen.
Meine Idee:
# tell letsencrypt what additional certs to get
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--keylength/
to: "-d www.rpg-foren.com --keylength"
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--installcert \/
to: |
--installcert \
-d www.rpg-foren.com
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--installcert --ecc \/
to: |
--installcert --ecc \
-d www.rpg-foren.com
Funktioniert meiner nicht? Er hat 1/3 weniger Codezeilen.
Ich sehe keine Überarbeitung von Ihnen? Oder übersehe ich etwas?
Ich wollte nur eine schöne Überarbeitung machen, damit die Datei am Ende gut aussieht ^^
Ich habe es noch nicht getan. Ich habe darauf gewartet, zu sehen, ob es Ihrer Meinung nach funktioniert.
Hier ist die Änderung, nur das Hinzufügen von global: true am Ende des zweiten replace:
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--fullchainpath/
to: "-d =domain2= --fullchainpath"
global: true
und hier ist das Ganze:
after_ssl:
# tell letsencrypt what additional certs to get
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--keylength/
to: "-d extrahostname.myforum.us --keylength"
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--fullchainpath/
to: "-d extrahostname.myforum.us --fullchainpath"
global: true
Okay, global ist der Parameter, den Sie für mehrere Ersetzungen benötigen.
Sieht gut aus, basierend auf den von Ihnen geposteten Dateien. Ich habe es noch nicht ausprobiert.
Ja. Entschuldigen Sie, dass ich nicht genau genug aufgepasst habe, um zu verstehen, worüber Sie früher gesprochen haben. Von meinem (schlechten) Test aus hat es „funktioniert“, aber ich habe es nicht bemerkt und weiß nicht, wie ich überprüfen kann, ob das ec-was-auch-immer-Zertifikat wirklich da ist. Danke für Ihre Hartnäckigkeit.
Sieht https://ssl-tools.net/webservers/extrahostname.myforum.us so aus, als hätte es das Richtige?
Ich habe den OP jetzt bearbeitet, damit Sie es ausprobieren und aus dem obigen Formular kopieren/einfügen können.
Wenn Sie sich selbst auf einer Testseite testen möchten und mir einen SSH-Schlüssel senden können, gebe ich Ihnen Zugang zu dem, den ich gerade eingerichtet habe. Dann können Sie dort eine saubere Installation mit Ihrer eigenen Testdomäne durchführen. Oder Sie können es einfach auf Ihrer Produktionsseite tun und auf das Beste hoffen. ![]()
Sie finden es hier:
ls -la /var/discourse/shared/standalone/ssl/
total 24
drwxr-xr-x 2 root root 4096 Sep 24 13:02 .
drwxr-xr-x 15 root root 4096 Sep 23 18:31 ..
-rw-r--r-- 1 root root 3941 Sep 25 07:43 rpg-foren.com.cer
-rw-r--r-- 1 root root 3941 Sep 25 07:43 rpg-foren.com_ecc.cer
-rw------- 1 root root 3243 Sep 25 07:43 rpg-foren.com_ecc.key
-rw------- 1 root root 3243 Sep 25 07:43 rpg-foren.com.key
Das Problem ist, dass ich ECC und RSA nicht einzeln testen kann.
Da die Erstellungsdatei jetzt passt, sind keine weiteren Tests erforderlich.
root@test-web-only:/shared/ssl# ls -l
total 16
-rw-r--r-- 1 root root 3953 Sep 25 16:41 test.myforum.us.cer
-rw-r--r-- 1 root root 2877 Sep 25 16:41 test.myforum.us_ecc.cer
-rw------- 1 root root 227 Sep 25 16:41 test.myforum.us_ecc.key
-rw------- 1 root root 3247 Sep 25 16:41 test.myforum.us.key
Cool. Wenn Sie denken, dass das gut aussieht, werde ich diese Diskussion in ein neues Thema verschieben, da sie hoffentlich gelöst ist.
Sie können das Zertifikat wie folgt testen:
openssl x509 -in /var/discourse/shared/standalone/ssl/test.myforum.us.cer -noout -text
Anschließend sollten die Domains unter DNS aufgeführt sein:
DNS:rpg-foren.com, DNS:www.rpg-foren.com
root@test:/var/discourse# openssl x509 -in /var/discourse/shared/web-only/ssl/test.myforum.us.cer -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
03:f8:b5:6a:e0:97:53:7f:22:33:81:22:35:b4:3f:73:75:7f
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, O = Let's Encrypt, CN = R10
Validity
Not Before: Sep 25 14:57:13 2024 GMT
Not After : Dec 24 14:57:12 2024 GMT
Subject: CN = test.myforum.us
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
00:be:a3:9b:79:78:dd:8f:e2:8f:28:f0:d9:6c:74:
... b0:84:33
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Subject Key Identifier:
43:55:B7:D6:54:03:CE:B0:FB:C8:D1:2A:42:F5:B7:C5:60:C7:D8:48
X509v3 Authority Key Identifier:
BB:BC:C3:47:A5:E4:BC:A9:C6:C3:A4:72:0C:10:8D:A2:35:E1:C8:E8
Authority Information Access:
OCSP - URI:http://r10.o.lencr.org
CA Issuers - URI:http://r10.i.lencr.org/
X509v3 Subject Alternative Name:
DNS:extrahostname.myforum.us, DNS:test.myforum.us
X509v3 Certificate Policies:
Policy: 2.23.140.1.2.1
CT Precertificate SCTs:
Signed Certificate Timestamp:
Version : v1 (0x0)
Log ID : DF:E1:56:EB:AA:05:AF:B5:9C:0F:86:71:8D:A8:C0:32:
4E:AE:56:D9:6E:A7:F5:A5:6A:01:D1:C1:3B:BE:52:5C
Timestamp : Sep 25 15:55:44.143 2024 GMT
Extensions: none
Signature : ecdsa-with-SHA256
Signed Certificate Timestamp:
Version : v1 (0x0)
Log ID : A2:E3:0A:E4:45:EF:BD:AD:9B:7E:38:ED:47:67:77:53:
D7:82:5B:84:94:D7:2B:5E:1B:2C:C4:B9:50:A4:47:E7
Timestamp : Sep 25 15:55:45.945 2024 GMT
Extensions: none
Signature : ecdsa-with-SHA256
Signature Algorithm: sha256WithRSAEncryption
Signature Value:
cf:c6:59:d8
und das beinhaltet:
X509v3 Subject Alternative Name:
DNS:extrahostname.myforum.us, DNS:test.myforum.us
Ah. OK.
openssl x509 -in /var/discourse/shared/web-only/ssl/test.myforum.us_ecc.cer -noout -text
beinhaltet:
X509v3 Subject Alternative Name:
DNS:extrahostname.myforum.us, DNS:test.myforum.us