¿Cómo puedo obtener un certificado Let's Encrypt para un servidor no público?


9

Tengo un servidor Apache privado, accesible solo desde mi LAN en el puerto 443, con un certificado StartSSL.

Desde que se lanzó Firefox 51, ya no puedo conectarme a él ya que el certificado raíz StartSSL se eliminó del almacén de confianza .

Pensé en migrar a Let's Encrypt, pero parece requerir un servidor HTTP público. ¿Es posible usar Let's Encrypt en mi situación?

Prefiero evitar pagar un certificado SSL, si es posible.

Respuestas:


10

Si controla el DNS para el dominio, puede usar el método de desafío dns-01 para probar la propiedad creando un registro TXT.

Esto se puede hacer de forma manual o automatizada. Creo que incluso el cliente oficial certbot ahora es compatible con dns-01.

Un rápido Google me muestra un montón de tutoriales que utilizan varios scripts y clientes, por lo que no los repetiré aquí. Este automatiza específicamente los certificados de intranet.


¿Estás seguro de que realmente funciona en la intranet? ¿Qué sucede si simplemente sobrescribo /etc/resolv.conf del host en el que se ejecuta certbot?
peterh - Restablece a Mónica el

@peterh sí, funciona en la intranet según la documentación.
BE77Y

@peterh No estoy seguro de lo que estás intentando sobrescribiendo resolv.conf. El registro TXT debe crearse en DNS público ya que los servidores de validación Let's Encrypt, no el cliente certbot, deben poder resolver el registro. Si todo sucediera localmente, la validación no valdría mucho. Sin embargo, el servidor para el que se emite el certificado puede ser completamente privado.
Martijn Heemels

@MartijnHeemels Bueno, ahora ya no puedo entender mi viejo comentario. Creo certificados de intranet con letsencrypt engañando a sus DNS de una manera que muestra un tercer servidor, con ip pública , para todas las solicitudes * .intranet.mydomain, pero solo lo hace para los servidores DNS salientes de letsencrypt . Obtuve sus IPs al reducir el tráfico DNS entrante. Bind9 tiene las llamadas "vistas" para eso. Por lo tanto, este tercer servidor puede obtener certificados * .intranet.mydomain con una configuración de apache complicada ajustada para eso. Después de eso, las claves se pueden reflejar en la intranet con scripts rsync.
peterh - Restablecer Monica

@MartijnHeemels Estoy haciendo esto porque en ese momento tuve problemas para automatizar la autorización basada en zonas de letsencrypt. Tal vez ahora funcione, pero sinceramente, no estoy muy satisfecho con letsencrypt en general (bueno ... con los problemas de su automatización, por supuesto, estoy muy feliz de que exista) y no quiero que vuelva a funcionar. , lo que una vez hice bien. (Creo que todos sabemos que la actitud de los jefes sobre "hacerlo mejor" tareas como este.)
Peterh - Restablecer Mónica

5

El cliente certbot tiene la capacidad de hacer un desafío manual de DNS. La respuesta (actualmente la segunda más popular) que se encuentra en esta pregunta ¿Cómo usar la validación de desafío Let's Encrypt DNS? tiene todos los detalles, y acabo de probarlo como funcionando.

Básicamente, ejecuta este comando y sigue las instrucciones:

certbot -d site.your.dom.ain --manual --preferred-challenges dns certonly

0

Usted mencionó que está usando Apache, sin embargo, si no está vinculado a él, hay una ruta muy fácil posible usando Caddyserver .

Allí solo tiene que definir un Caddyfilecon el siguiente contenido:

example.com
tls {
    dns cloudflare
}

Mencione el proveedor de DNS que está utilizando en la configuración y configure las claves API que está utilizando las variables de entorno. Extraiga de la lista de proveedores compatibles de los documentos .

Eso es todo lo que se requiere. La salida en el primer inicio será algo así como:

Activating privacy features... 2019/10/21 13:36:48 [INFO][cache:0xc0001c8190] Started certificate maintenance routine
[INFO][cache:0xc000092730] Started certificate maintenance routine
2019/10/21 13:24:49 [INFO][example.com] Obtain certificate
2019/10/21 13:24:49 [INFO] [example.com] acme: Obtaining bundled SAN certificate
2019/10/21 13:24:50 [INFO] [example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/876706285
2019/10/21 13:24:50 [INFO] [example.com] acme: Could not find solver for: tls-alpn-01
2019/10/21 13:24:50 [INFO] [example.com] acme: Could not find solver for: http-01
2019/10/21 13:24:50 [INFO] [example.com] acme: use dns-01 solver
2019/10/21 13:24:50 [INFO] [example.com] acme: Preparing to solve DNS-01
2019/10/21 13:24:50 [INFO] cloudflare: new record for example.com, ID XXX
2019/10/21 13:24:50 [INFO] [example.com] acme: Trying to solve DNS-01
2019/10/21 13:24:50 [INFO] [example.com] acme: Checking DNS record propagation using [127.0.0.11:53]
2019/10/21 13:24:50 [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]
2019/10/21 13:24:50 [INFO] [example.com] acme: Waiting for DNS record propagation.
2019/10/21 13:24:52 [INFO] [example.com] acme: Waiting for DNS record propagation.
2019/10/21 13:24:55 [INFO] [example.com] The server validated our request
2019/10/21 13:24:55 [INFO] [example.com] acme: Cleaning DNS-01 challenge
2019/10/21 13:24:55 [INFO] [example.com] acme: Validations succeeded; requesting certificates
2019/10/21 13:24:56 [INFO] [example.com] Server responded with a certificate.
done.

Serving HTTPS on port 443
https://example.com

2019/10/21 13:36:48 [INFO] Serving https://example.com

Serving HTTP on port 80
http://example.com

2019/10/21 13:36:48 [INFO] Serving http://example.com
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.