我最近(我认为是在 ServerFault、StackOverflow 或其他一些 StackExchange 论坛上)发现 Bitnami 堆栈提供了一种使用 Let's Encrypt 的工具,该工具显然使用了 certbot 以外的东西(称为“乐高”,是吗? ?)。
我们有一个在 AWS EC2 实例(原始 Amazon Linux)上运行的 Bitnami Trac/SVN 堆栈。我注意到盒子上显然有两个单独的 httpd 实例;Bitnami 堆栈中的一个是活动的,托管 Trac 和 SVN。(我想我几个月前开始了另一个,与尝试使 certbot 工作失败有关,并且可能已经放弃了它,但它实际上并没有做任何事情。)
Bitnami httpd 在端口 81(目前无法从外部访问)上设置 HTTP,在端口 8000(可访问)上设置 HTTPS,并且当前使用 Comodo 的证书,该证书将于 7 月到期。
而且我不记得 Bitnami 堆栈中 httpd 的原始“交付”端口配置是什么。
我一直在阅读这个“bncert-tool”的说明,我想知道它是否适用于我们的设置。从我对 certbot 的失败实验中,我的印象是 Let's Encrypt 期望在 80 上找到打开的 http。
任何人都可以对此有所了解吗?
5月18日更新
我终于在我真正可以投入一些时间的时候想起了这个项目。我将该实例克隆到一个现场实例,然后(1)禁用 Linux 附带的“stock”httpd,(2)将 Bitnami 堆栈中的 httpd 更改为监听 80。当我运行 bncert-tool 时,我得到了这个:
使用 Let's Encrypt 创建证书时出错:
acme: Error -> One or more domains had a problem:
[test.wintouch.net] acme: error: 403 :: urn:ietf:params:acme:error:unauthorized
:: Cannot negotiate ALPN protocol "acme-tls/1" for tls-alpn-01 challenge, url:
怎么办?
(我已经保存了日志文件。)
5月22日更新
我突然想到,由于当前配置了服务器,因此没有密码就不可能访问任何内容。
所以我尝试了另一个现场实例。经过一番折腾,我对其进行了配置,使其无需密码即可侦听 80,并在该端口上提供静态页面,该端口远离 SVN 和 Trac 数据。
但结果和以前完全一样。和以前一样,我终止了现场请求并删除了 Route 53 A 记录作为清理的一部分。
在一天的实验之后,我研究了设置原始实例时使用的任何我的 Spot 实例,并发现了一些相当奇怪的东西:我能看到的所有 Bitnami SVN 和 Trac AMI 都是 Debian 或 Ubuntu。但这是在Amazon Linux(原始版本,而不是 Amazon Linux 2)上。因此,要么它来自一个不再存在的 AMI,要么我从一个“普通”Amazon Linux AMI 启动实例,然后在其上安装 Bitnami SVN/Trac 堆栈。
我会注意到,包括 bncert-tool 在内的堆栈不在/opt/bitnami 中,而是在 /opt/trac-1.2.3-11
因此,由于无法检查“交付时”的配置,我环顾四周,想知道 bncert-tool 使用什么来查找堆栈,最终我找到了 /opt/trac-1.2.3-11/properties.ini
hostname=
[Support]
installed_components=apache
apache_logs=apache{,2}/logs/error*log logs/error_log
apache_conf=apache{,2}/conf/{*.conf,bitnami/*.conf} etc/httpd.conf apps/*/conf/ht*.conf
apache_acl=apache apache2
[Apache]
apache_server_port=81
apache_user=daemon
apache_group=daemon
apache_server_ssl_port=443
apache_root_directory=/opt/trac-1.2.3-11/apache2
apache_htdocs_directory=/opt/trac-1.2.3-11/apache2/htdocs
apache_domainname=ip-172-31-8-195.us-east-2.compute.internal
apache_configuration_directory=/opt/trac-1.2.3-11/apache2/conf
apache_version=2.4.39
[Subversion]
subversion_port=3690
subversion_root_directory=/opt/trac-1.2.3-11/subversion
自安装以来似乎没有变化(/opt/trac-1.2.3-11 中的所有内容都具有 2019 年 6 月 6 日的日期戳)。
可能是 bncert-tool 使用了该配置文件,并且已经告诉 Let's Encrypt 使用端口 81 而不是 80?
我会注意到,与上述配置文件相反,httpd 的 Bitnami 实例在 8000 上侦听 SSL/TLS,而不是 443,Tomcat 服务器(独立于 Bitnami 堆栈)在 8443 上侦听(并显示在 netstat -l -- numeric-ports as) 8443,通过 iptables 映射到 443,没有任何东西直接监听 443 端口。
Bitnami 工程师在这里,
你是对的。Bitnami HTTPS 配置工具使用 Lego,一个用 Go 编写的 Let's Encrypt 客户端。我们的工具使用端口 80 启动乐高服务器(让 Let's Encrypt 验证它),以便可以从您的网络外部访问该端口。如果不是这种情况,您将需要使用其他工具(您可以直接使用乐高)并设置您要用于执行验证的端口。例如,您可以下载乐高工具并通过运行以下命令尝试使用端口 81:
这应该生成一个新证书。您将需要稍后在 Apache 的配置中配置它们。您可以在这里找到更多信息
https://docs.bitnami.com/aws/how-to/generate-install-lets-encrypt-ssl/#alternative-approach
我最终在 Martos 先生提供的链接中使用了“替代方法”,并在说明中未提及一些更改:
如果涉及端口映射(例如,8443 通过 iptables 从外部显示为 443),则尝试将参数“--http.port :80 --tls.port :8443”(或您的映射需要的任何内容)添加到乐高调用。一旦添加了这些参数,乐高就完美地工作了。另请注意,在使用 Lego 时关闭服务器很重要:它需要短暂接管端口。
此外,如果您需要将证书提供给 Tomcat 服务器,而 Tomcat 拒绝它们,您可以使用 openssl 将它们转换为 PKCS12 密钥库(这要感谢 Tomcat 用户列表服务器上的 Tomcat 开发人员 Christopher Schultz ),这对 Tomcat 来说更容易处理。