Как я могу получить сертификат Let's Encrypt для непубличного сервера?

9

У меня есть частный сервер Apache, доступный только из моей локальной сети через порт 443, с сертификатом StartSSL.

Поскольку Firefox 51 был выпущен, я больше не могу подключиться к нему, так как корневой сертификат StartSSL был удален из хранилища доверенных сертификатов .

Я подумал о переходе на Let's Encrypt, но для этого нужен общедоступный HTTP-сервер. Можно ли использовать Let's Encrypt в моей ситуации?

Я бы предпочел не платить за сертификат SSL, если это вообще возможно.

Calimo
источник

Ответы:

10

Если вы управляете DNS для домена, вы можете использовать метод вызова dns-01, чтобы подтвердить право собственности путем создания TXT-записи.

Это можно сделать вручную или автоматически. Я думаю, что даже официальный клиент certbot теперь поддерживает dns-01.

Быстрый Google показывает мне кучу учебных пособий с использованием различных скриптов и клиентов, поэтому я не буду повторять их все здесь. Этот специально автоматизирует интранет-сертификаты.

Мартейн Хеемельс
источник
Вы уверены, что это действительно работает в интранете? Что если я просто перезаписываю /etc/resolv.conf хоста, на котором работает certbot?
Петер - Восстановить Монику
@peterh да, он работает в интранете согласно документации.
BE77Y
@peterh Я не уверен, что вы пытаетесь перезаписать resolv.conf. TXT-запись должна быть создана в общедоступном DNS, поскольку серверы проверки Let's Encrypt, а не клиент certbot, должны иметь возможность разрешать эту запись. Если бы все это происходило локально, валидация не стоила бы много. Сервер, для которого выдается сертификат, может быть полностью приватным.
Мартейн
@MartijnHeemels Ну, теперь я не могу понять мой старый комментарий больше. Я создаю сертификаты интрасети с помощью letsencrypt, обманывая его DNS так, чтобы он показывал третий сервер с общедоступным ip для всех запросов * .intranet.mydomain - но это делается только для исходящих DNS-серверов letsencrypt . Я получил их IP-адреса, tcpdump-входящий трафик DNS. У Bind9 есть так называемые «взгляды» на это. Таким образом, этот третий сервер может получить сертификаты * .intranet.mydomain с сложной конфигурацией apache, настроенной для этого. После этого ключи могут быть отражены во внутренней сети с помощью скриптов rsync.
Петер - Восстановить Монику
@MartijnHeemels Я делаю это, потому что в то время у меня были проблемы с автоматизацией зональной авторизации letsencrypt. Может быть, теперь это будет работать, но, честно говоря, я не очень доволен letsencrypt в целом (ну ... проблемами его автоматизации, конечно, я очень рад, что он существует), и я не хочу, чтобы он снова работал Что я когда-то сделал хорошо. (Я думаю, что мы все знаем отношение боссов к таким задачам, как «сделать его лучше».)
peterh - Восстановить Монику
5

Клиент certbot может выполнить вызов DNS вручную. (В настоящее время второй по популярности) ответ, найденный в этом вопросе Как использовать проверку подлинности запроса Let's Encrypt DNS? есть все детали, и я только что проверил, как работает.

По сути, вы запускаете эту команду и следуйте инструкциям:

certbot -d site.your.dom.ain --manual --preferred-challenges dns certonly
Vick
источник
0

Вы упомянули, что используете Apache, однако, если вы не связаны с ним, с помощью Caddyserver возможен очень простой путь .

Там вам нужно только определить Caddyfileсо следующим содержанием:

example.com
tls {
    dns cloudflare
}

Упомяните поставщика DNS, который вы используете в конфигурации, и настройте ключи API, которые вы используете через переменные среды. Извлечь из списка поддерживаемых провайдеров из документов .

Это все, что требуется. Вывод при первом запуске будет примерно таким:

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
Грегор Мюллеггер
источник