У нас есть экземпляр Amazon Linux (не Amazon Linux 2), на котором запущен довольно старый стек Bitnami Trac / SVN, а также запущен сервер Tomcat. У него есть два экземпляра httpd: тот, который является частью стека Bitnami, и тот, который поставляется с ОС. Tomcat работает независимо. Lego уже присутствует, как и bncert-tool, но каталог Bitnami - это не «/ opt / bitnami», а «/opt/trac-1.2.3-11».
ОС httpd при включении слушает 80, незащищенно. Bitnami httpd прослушивает 8000, защищенный, а также может прослушивать 81. Сервер Tomcat работает независимо от httpd и прослушивает защищенный 8443 (с перенаправлением iptables с 443) и 7443 (также защищенный).
Работая над спотовым экземпляром, клонированным из последней резервной копии рабочего сервера, с доменом, сопоставленным с ним в Route 53, и портами 80 и 443, открытыми для всего мира в одной из назначенных групп безопасности, я пытался следуйте инструкциям в разделе «Альтернативный подход» на странице по адресу https://docs.bitnami.com/aws/how-to/generate-install-lets-encrypt-ssl/#alternative-approach безуспешно.
Пропустив шаг 1 в процедуре, поскольку Lego уже присутствует, и сразу перейдя к шагу 2, я остановил Bitnami с помощью «ctlscript.sh stop». Затем я (работая с полномочиями root) попытался получить сертификат, используя команду, указанную в процедуре, настроенную в соответствии с обстоятельствами. (Обратите внимание, что имя домена было изменено «для защиты невиновных».)
sudo /opt/trac-1.2.3-11/letsencrypt/lego --tls --email="foo@bar.com" --domains="test.bar.net" --path="/opt/trac-1.2.3-11/letsencrypt" run
Получил вот что:
2020/08/04 18:01:29 No key found for account foo@bar.com. Generating a P384 key.
2020/08/04 18:01:29 Saved key to /opt/trac-1.2.3-11/letsencrypt/accounts/acme-v02.api.letsencrypt.org/foo@bar.com/keys/foo@bar.com.key
2020/08/04 18:01:30 Please review the TOS at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
Do you accept the TOS? Y/n
Y
2020/08/04 18:01:43 [INFO] acme: Registering account for foo@bar.com
!!!! HEADS UP !!!!
Your account credentials have been saved in your Let's Encrypt
configuration directory at "/opt/trac-1.2.3-11/letsencrypt/accounts".
You should make a secure backup of this folder now. This
configuration directory will also contain certificates and
private keys obtained from Let's Encrypt so making regular
backups of this folder is ideal.
2020/08/04 18:01:43 [INFO] [test.bar.net] acme: Obtaining bundled SAN certificate
2020/08/04 18:01:43 [INFO] [test.bar.net] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/6317334421
2020/08/04 18:01:43 [INFO] [test.bar.net] acme: use tls-alpn-01 solver
2020/08/04 18:01:43 [INFO] [test.bar.net] acme: Trying to solve TLS-ALPN-01
2020/08/04 18:01:50 [INFO] Unable to deactivated authorizations: https://acme-v02.api.letsencrypt.org/acme/authz-v3/6317334421
2020/08/04 18:01:50 Could not obtain certificates:
acme: Error -> One or more domains had a problem:
[test.bar.net] acme: error: 403 :: urn:ietf:params:acme:error:unauthorized :: Cannot negotiate ALPN protocol "acme-tls/1" for tls-alpn-01 challenge, url:
Затем я попытался закрыть экземпляр ОС httpd и повторить команду. Я получил тот же результат из сообщения «Получение связанного сертификата SAN» внизу.
Затем я попытался закрыть Tomcat. На этот раз я получил другое сообщение для последней строки:
[test.bar.net] acme: error: 400 :: urn:ietf:params:acme:error:connection :: Connection refused, url:
Очевидно, здесь что-то не так, но что делать дальше?
Если задействовано отображение портов (например, 8443 отображается как 443 извне через iptables), попробуйте добавить параметры «--http.port: 80 --tls.port: 8443» в вызов lego.
Кроме того, если вам затем нужно сделать сертификаты доступными для сервера Tomcat, а Tomcat отклоняет их, вы можете использовать openssl для преобразования их в хранилище ключей PKCS12, с которым Tomcat гораздо проще справиться.