Let's Encrypte mit mehreren Domains funktionierte nicht für ECC-Zertifikate

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.

1 „Gefällt mir“

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:

1 „Gefällt mir“

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.

2 „Gefällt mir“

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.

2 „Gefällt mir“

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


1 „Gefällt mir“

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. :person_shrugging:

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.

1 „Gefällt mir“
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.

1 „Gefällt mir“

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

1 „Gefällt mir“
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
1 „Gefällt mir“