¿Cómo inicio la renovación del certificado, simplemente elimino el antiguo de /shared/ssl?
Creo que siempre lo hace cuando se reconstruye, así que no hay necesidad de eliminar nada.
el certificado se emitió ayer, por lo que normalmente necesita un --force en los scripts de LE. Ahora he renombrado los certificados antiguos y estoy probando una reconstrucción.
Aparentemente esto no funciona, no obtengo el segundo dominio ingresado: https://ssl-tools.net/webservers/rpg-foren.com
Tampoco parece que todo se haya reemplazado correctamente, al archivo ecc le falta el subdominio:
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
Acabo de ejecutar lo siguiente manualmente, ahora los certificados encajan:
/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"
esta es mi reescritura para el reenvío:
# 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;
}
¿Es posible que un comando de reemplazo solo se ejecute una vez?
¿Parece que el certificado es válido ahora?
Estoy bastante seguro de que las redirecciones se manejan en otro lugar de la cadena y no necesitas hacer nada para que eso funcione. Probablemente eliminaría esa parte de tu archivo yml.
Parece que ahora está funcionando como se esperaba.
Sí, pero la configuré manualmente y no a través del hook, porque el hook no lo hizo correctamente.
¿Te refieres de www.subdominio al dominio principal? Al menos no a través de nginx. No se define ninguna URL allí, por lo que el servidor web responde a todos los dominios entrantes.
.
Me funciona (ver abajo).
Me refiero a que todo lo que se resuelve en el sitio redirige al nombre de host. Para cualquier instalación estándar, puedes introducir la dirección IP y redirigirá a https://hostname. (Ver abajo)
Acabo de configurar esto, creando una nueva instalación estándar con https://dashboard.literatecomputing.com/, y además pegando extrahostname.myforum.us en el campo domain2 de arriba y copiando/pegando el hook resultante after_ssl inmediatamente después de hooks: en web_only.yml (¡y lo hice mientras el script estaba construyendo el contenedor de datos, así que no tuve que reconstruir después de que terminara la primera vez!).
Todos estos funcionan como se esperaba:
- 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/ (falla con certificado no válido, redirige si lo aceptas)
Eliminaré el sitio anterior mañana o cuando me acuerde.
¿Significa esto que el subdominio se almacena en /etc/runit/1.d/letsencrypt tanto para el script de instalación rsa como para el ecc?
Como puede ver arriba, el hook solo ha almacenado el subdominio en la parte rsa pero no en la parte ecc.
--installcert \
-d rpg-foren.com \
-d www.rpg-foren.com
--installcert --ecc \
-d rpg-foren.com \
--fullchainpath
Aquí está /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")" ]]
}
########################################################
# Certificado RSA
########################################################
issue_cert "4096"
if ! cert_exists ""; then
# Intenta emitir el certificado de nuevo si algo sale mal
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"
########################################################
# Certificado ECDSA
########################################################
issue_cert "ec-256"
if ! cert_exists "_ecc"; then
# Intenta emitir el certificado de nuevo si algo sale mal
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. Veo que está en el certificado RSA (malo), pero no en el certificado ECC (bueno).
OK. Ahora lo entiendo. Esa sección --fullcert necesita global: true en ella. Lo estoy probando ahora.
OK. Aquí está el nuevo ‘/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")" ]]
}
########################################################
# Certificado RSA
########################################################
issue_cert "4096"
if ! cert_exists ""; then
# Intenta emitir el certificado de nuevo si algo sale mal
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"
########################################################
# Certificado ECDSA
########################################################
issue_cert "ec-256"
if ! cert_exists "_ecc"; then
# Intenta emitir el certificado de nuevo si algo sale mal
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
~
~
y ahora tengo esto, ¿que parece bien? https://ssl-tools.net/webservers/extrahostname.myforum.us
¿Parece correcto? Si es así, editaré el OP para incluir la directiva global.
Mi idea:
# dile a letsencrypt qué certificados adicionales debe obtener
- 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
¿El mío no funciona? Tiene 1/3 menos líneas de código.
¿No veo una reescritura tuya? ¿O me estoy perdiendo algo?
Solo quería hacer una buena reescritura para que el archivo se vea bien al final ^^
Todavía no lo he hecho. Estaba esperando a ver si pensabas que funcionaba.
Aquí está el cambio, solo agregando global: true al final del segundo replace:
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /--fullchainpath/
to: "-d =domain2= --fullchainpath"
global: true
y aquí está todo:
after_ssl:
# dile a letsencrypt qué certificados adicionales obtener
- 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, entonces global es el parámetro que necesitas para reemplazos múltiples.
se ve bien por los archivos que publicaste, aún no lo he probado.
Sí. Perdón por no prestar suficiente atención para entender de qué estabas hablando antes. Por mi (mala) prueba, “funcionó”, pero no me di cuenta y no sé cómo comprobar que el certificado ec-whatever realmente está ahí. Gracias por ser persistente.
¿Hace que https://ssl-tools.net/webservers/extrahostname.myforum.us parezca que tiene lo correcto?
He editado el OP ahora, para que puedas intentarlo y copiar/pegar desde el formulario de arriba.
Si quieres probar tú mismo en un sitio de prueba y puedes enviarme una clave SSH, te daré acceso al que acabo de configurar. Luego puedes hacer una instalación limpia allí con tu propio dominio de prueba. O puedes hacerlo en tu sitio de producción y esperar lo mejor. ![]()
Puedes encontrarlo aquí:
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
el problema es que no sé cómo probar ecc y rsa individualmente.
dado que el archivo de creación ahora encaja, no se requieren más pruebas.
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
Genial. Si crees que esto se ve bien, entonces voy a mover esta discusión a un nuevo tema ya que espero que esté resuelto.
puedes probar el certificado de esta manera:
openssl x509 -in /var/discourse/shared/standalone/ssl/test.myforum.us.cer -noout -text
luego los dominios deberían aparecer en 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
y eso incluye:
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
contiene:
X509v3 Subject Alternative Name:
DNS:extrahostname.myforum.us, DNS:test.myforum.us