Bagaimana saya bisa mendapatkan sertifikat Let's Encrypt untuk server menghadap non-publik?

9

Saya memiliki server Apache pribadi, hanya dapat dijangkau dari LAN saya di port 443, dengan sertifikat StartSSL.

Sejak Firefox 51 dirilis, saya tidak dapat terhubung lagi karena sertifikat root StartSSL dihapus dari trust store .

Saya mempertimbangkan untuk bermigrasi ke Let's Encrypt, tetapi tampaknya membutuhkan server HTTP yang menghadap publik. Apakah mungkin menggunakan Let's Encrypt dalam situasi saya?

Saya lebih suka menghindari membayar untuk sertifikat SSL, jika memungkinkan.

Calimo
sumber

Jawaban:

10

Jika Anda mengontrol DNS untuk domain, maka Anda dapat menggunakan metode tantangan dns-01 untuk membuktikan kepemilikan dengan membuat TXT-record.

Ini dapat dilakukan secara manual atau otomatis. Saya pikir bahkan klien certbot resmi sekarang mendukung dns-01.

Google cepat menunjukkan kepada saya banyak tutorial menggunakan berbagai skrip dan klien sehingga saya tidak akan mengulang semuanya di sini. Yang ini secara otomatis mengotomatiskan sertifikat intranet.

Martijn Heemels
sumber
Apakah Anda yakin itu benar-benar berfungsi di intranet? Bagaimana jika saya hanya menimpa /etc/resolv.conf dari host tempat certbot berjalan?
peterh
@peterh ya, ini berfungsi di intranet sesuai dokumentasinya.
BE77Y
@peterh Saya tidak yakin apa yang Anda coba dengan menimpa resolv.conf. Catatan TXT harus dibuat dalam DNS publik karena server validasi Let's Encrypt, bukan klien certbot, harus dapat menyelesaikan catatan. Jika semua itu terjadi secara lokal, validasi tidak akan berarti banyak. Server yang mengeluarkan sertifikat dapat sepenuhnya bersifat pribadi.
Martijn Heemels
@ MartijnHeemels Baiklah, sekarang saya tidak bisa lagi memahami komentar lama saya ini. Saya membuat sertifikat intranet dengan letsencrypt dengan menipu DNS-nya dengan cara, bahwa itu menunjukkan server ketiga, dengan ip publik , untuk semua permintaan * .intranet.mydomain - tetapi hanya untuk server DNS keluar dari letsencrypt . Saya mendapatkan IP mereka dengan tcpdump-ing lalu lintas DNS yang masuk. Bind9 memiliki apa yang disebut "pandangan" untuk itu. Dengan demikian, server ketiga ini bisa mendapatkan sertifikat * .intranet.mydomain dengan konfigurasi apache yang rumit yang disetel untuk itu. Setelah itu, kunci dapat dicerminkan ke intranet dengan skrip rsync.
peterh
@ MartijnHeemels Saya melakukan ini karena pada saat itu saya mempunyai masalah untuk mengotomatiskan otorisasi berbasis-zona pada letsencrypt. Mungkin sekarang ini akan berhasil, tapi jujur ​​saya tidak begitu puas dengan letsencrypt secara umum (well ... dengan masalah otomatisasi, tentu saja saya sangat senang itu ada) dan saya tidak ingin membuatnya bekerja lagi , apa yang pernah saya buat oke. (Saya pikir kita semua tahu sikap bos tentang tugas-tugas "membuatnya lebih baik" seperti ini.)
peterh - Reinstate Monica
5

Klien certbot memiliki kemampuan untuk melakukan tantangan DNS manual. Jawaban (saat ini paling populer kedua) yang ditemukan dalam pertanyaan ini Bagaimana cara menggunakan Let's Encrypt DNS challenge? memiliki semua detail, dan saya baru mengujinya berfungsi.

Pada dasarnya, Anda menjalankan perintah ini dan ikuti petunjuknya:

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

Anda menyebutkan bahwa Anda menggunakan Apache, namun jika Anda tidak terikat padanya ada jalan yang sangat mudah menggunakan Caddyserver .

Di sana Anda hanya perlu mendefinisikan Caddyfiledengan konten berikut:

example.com
tls {
    dns cloudflare
}

Sebutkan penyedia DNS yang Anda gunakan dalam konfigurasi dan konfigurasikan kunci API Anda melalui variabel lingkungan. Gambarlah dari daftar penyedia yang didukung dari dokumen .

Hanya itu yang dibutuhkan. Output pada awal pertama akan seperti:

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
Gregor Müllegger
sumber