Comment puis-je renouveler le certificat, dois-je simplement supprimer l’ancien dans /shared/ssl ?
Je pense que cela se produit toujours lors de la reconstruction, il n’est donc pas nécessaire de supprimer quoi que ce soit.
le certificat a été émis hier, donc normalement il a besoin d’un --force dans les scripts LE. J’ai maintenant renommé les anciens certificats et je teste une reconstruction.
Apparemment, cela ne fonctionne pas, je n’obtiens pas le deuxième domaine saisi : https://ssl-tools.net/webservers/rpg-foren.com
Il semble également que tout ne soit pas correctement remplacé, le fichier ecc manque le sous-domaine :
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
Je viens d’exécuter manuellement ce qui suit, maintenant les certificats correspondent :
/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"
voici ma réécriture pour la redirection :
# 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;
}
Est-il possible qu’une commande de remplacement ne soit exécutée qu’une seule fois ?
Le certificat semble être valide maintenant ?
Je suis à peu près sûr que les redirections sont gérées ailleurs dans la chaîne et que vous n’avez rien à faire pour que cela fonctionne. Je supprimerais probablement cette partie de votre fichier yml.
Il semble que cela fonctionne comme prévu maintenant.
Oui, mais je l’ai configuré manuellement et non via le hook, car le hook ne l’a pas fait correctement.
vous voulez dire du sous-domaine www. vers le domaine principal ? Au moins pas via nginx. Aucune URL n’y est définie, de sorte que le serveur web réponde à tous les domaines entrants.
.
Cela fonctionne pour moi (voir ci-dessous).
Je veux dire que tout ce qui se résout sur le site redirige vers le nom d’hôte. Pour toute installation standard, vous pouvez entrer l’adresse IP et elle redirigera vers https://hostname. (Voir ci-dessous)
Je viens de configurer cela, en créant une nouvelle installation standard avec https://dashboard.literatecomputing.com/, et en collant en plus extrahostname.myforum.us dans le champ domain2 ci-dessus et en copiant/collant le hook after_ssl résultant immédiatement après hooks: dans web_only.yml (et je l’ai fait pendant que le script construisait le conteneur de données, donc je n’ai pas eu à reconstruire après qu’il ait terminé la première fois !).
Tous ceux-ci fonctionnent comme prévu :
- 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/ (échoue avec un certificat invalide, redirige si vous l’acceptez)
Je supprimerai le site ci-dessus demain ou quand je m’en souviendrai.
Cela signifie-t-il que le sous-domaine est stocké dans /etc/runit/1.d/letsencrypt pour le script d’installation rsa et ecc ?
Comme vous pouvez le voir ci-dessus, le hook n’a stocké le sous-domaine que dans la partie rsa mais pas dans la partie ecc.
--installcert \
-d rpg-foren.com \
-d www.rpg-foren.com
--installcert --ecc \
-d rpg-foren.com \
--fullchainpath
Voici /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")" ]]
}
########################################################
# Certificat RSA
########################################################
issue_cert "4096"
if ! cert_exists ""; then
# Essayer d'émettre à nouveau le certificat si quelque chose s'est mal passé
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"
########################################################
# Certificat ECDSA
########################################################
issue_cert "ec-256"
if ! cert_exists "_ecc"; then
# Essayer d'émettre à nouveau le certificat si quelque chose s'est mal passé
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. Je vois que c’est dans le certificat RSA (mauvais), mais pas dans le certificat ECC (bon).
OK. Je comprends maintenant. Cette section --fullcert a besoin de global: true dedans. Je suis en train de tester.
OK. Voici le nouveau /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")" ]]
}
########################################################
# Certificat RSA
########################################################
issue_cert "4096"
if ! cert_exists ""; then
# Essayer de délivrer à nouveau le certificat si quelque chose s'est mal passé
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"
########################################################
# Certificat ECDSA
########################################################
issue_cert "ec-256"
if ! cert_exists "_ecc"; then
# Essayer de délivrer à nouveau le certificat si quelque chose s'est mal passé
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
~
~
et maintenant j’ai ceci, qui semble bon ? https://ssl-tools.net/webservers/extrahostname.myforum.us
Est-ce que cela semble correct ? Si oui, je modifierai le message d’origine pour inclure la directive global.
Mon idée :
# indiquer à letsencrypt quels certificats supplémentaires obtenir
- 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
Le mien ne fonctionne pas ? Il a 1/3 de lignes de code en moins.
Je ne vois pas de réécriture de votre part ? ou est-ce que je manque quelque chose ?
Je voulais juste faire une belle réécriture pour que le fichier ait l’air bien à la fin ^^
Je ne l’ai pas encore fait. J’attendais de voir si vous pensiez que cela fonctionnait.
Voici le changement, il suffit d’ajouter global: true à la fin du second replace:
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--fullchainpath/
to: "-d =domain2= --fullchainpath"
global: true
et voici le tout :
after_ssl:
# dire à letsencrypt quels certificats supplémentaires obtenir
- 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
ok, donc global est le paramètre dont vous avez besoin pour plusieurs remplacements.
ça a l’air bien d’après les fichiers que vous avez postés, je ne l’ai pas encore essayé.
Ouais. Désolé de ne pas avoir prêté assez attention pour comprendre de quoi vous parliez plus tôt. D’après mon (mauvais) test, cela a « fonctionné », mais je n’ai pas remarqué, et je ne sais pas comment vérifier que le certificat ec-quelque chose est vraiment là. Merci d’avoir été persistant.
Est-ce que https://ssl-tools.net/webservers/extrahostname.myforum.us donne l’impression qu’il a le « bon truc » ?
J’ai modifié le OP maintenant, vous pouvez donc essayer et copier/coller depuis le formulaire ci-dessus.
Si vous voulez tester vous-même sur un site de test et que vous pouvez m’envoyer une clé SSH, je vous donnerai accès à celui que je viens de configurer. Ensuite, vous pourrez y faire une installation propre avec votre propre domaine de test. Ou, vous pouvez simplement le faire sur votre site de production et espérer le meilleur. ![]()
Vous pouvez le trouver ici :
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
le problème, c’est que je ne sais pas comment tester séparément ecc et rsa.
puisque le fichier de création correspond maintenant, aucun test supplémentaire n’est requis.
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
Génial. Si vous pensez que cela convient, je vais déplacer cette discussion vers un nouveau sujet car j’espère qu’elle est résolue.
vous pouvez tester le certificat comme ceci :
openssl x509 -in /var/discourse/shared/standalone/ssl/test.myforum.us.cer -noout -text
ensuite les domaines devraient être listés sous dns :
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
et qui inclut :
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
contient :
X509v3 Subject Alternative Name:
DNS:extrahostname.myforum.us, DNS:test.myforum.us