Come posso ottenere un certificato Let's Encrypt per un server non pubblico?


9

Ho un server Apache privato, raggiungibile solo dalla mia LAN sulla porta 443, con un certificato StartSSL.

Da quando è stato rilasciato Firefox 51, non riesco più a collegarmi poiché il certificato radice StartSSL è stato rimosso dal truststore .

Ho considerato la migrazione a Let's Encrypt, ma sembra che richieda un server HTTP pubblico. È possibile utilizzare Let's Encrypt nella mia situazione?

Preferirei evitare di pagare per un certificato SSL, se possibile.

Risposte:


10

Se controlli DNS per il dominio, puoi utilizzare il metodo di verifica dns-01 per dimostrare la proprietà creando un record TXT.

Questo può essere fatto manualmente o automatizzato. Penso che anche il client certbot ufficiale ora supporti dns-01.

Un rapido Google mi mostra un mucchio di tutorial che usano vari script e client, quindi non li ripeterò tutti qui. Questo automatizza specificamente i certificati Intranet.


Sei sicuro che funzioni davvero su Intranet? Cosa succede se sovrascrivo semplicemente /etc/resolv.conf dell'host su cui è in esecuzione il certbot?
Peter - Ripristina Monica il

@peterh sì, funziona sull'intranet come da documentazione.
BE77Y,

@peterh Non sono sicuro di cosa stai tentando sovrascrivendo resolv.conf. Il record TXT deve essere creato nel DNS pubblico poiché i server di convalida Let's Encrypt, non il client certbot, devono essere in grado di risolvere il record. Se tutto accadesse localmente, la validazione non varrebbe molto. Il server per il quale viene emesso il certificato può essere completamente privato.
Martijn Heemels,

@MartijnHeemels Bene, ora non riesco più a capire il mio vecchio commento. Creo certificati intranet con letsencrypt ingannando i suoi DNS in un modo, che mostra un terzo server, con IP pubblico , per tutte le richieste * .intranet.mydomain - ma lo fa solo per i server DNS in uscita di letsencrypt . Ho ottenuto i loro indirizzi IP scaricando il traffico DNS in entrata. Bind9 ha le cosiddette "viste" per questo. Pertanto, questo terzo server può ottenere * .intranet.mydomain certs con una configurazione apache complessa ottimizzata per questo. Successivamente, è possibile eseguire il mirroring delle chiavi nell'Intranet con script rsync.
Peter - Ripristina Monica il

@MartijnHeemels Lo sto facendo perché in quel momento avevo problemi ad automatizzare l'autorizzazione basata sulla zona di letsencrypt. Forse ora funzionerebbe, ma onestamente non sono molto soddisfatto di Letencrypt in generale (beh ... con i problemi della sua automatizzazione, ovviamente sono molto felice che esista) e non voglio farlo funzionare di nuovo , quello che ho fatto una volta bene. (Penso che tutti conosciamo l'atteggiamento dei capi riguardo a compiti "migliorali" come questo.)
Peter - Ripristina Monica

5

Il client certbot ha la capacità di fare una sfida DNS manuale. La risposta (attualmente la seconda più popolare) trovata in questa domanda Come usare Let's Encrypt DNS validation challenge? ha tutti i dettagli e l'ho appena provato come funzionante.

Fondamentalmente, esegui questo comando e segui le istruzioni:

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

0

Hai detto che stai usando Apache, ma se non sei legato ad esso c'è un percorso molto semplice possibile usando Caddyserver .

Lì devi solo definire un Caddyfilecon il seguente contenuto:

example.com
tls {
    dns cloudflare
}

Indica il provider DNS che stai utilizzando nella configurazione e configura le chiavi API che stai utilizzando tramite le variabili di ambiente. Disegna dall'elenco dei provider supportati dai documenti .

Questo è tutto ciò che serve. L'output al primo avvio sarà simile a:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.