我在任何文档中都找不到关于如何letsencrypt
根据处理请求的接口为同一主机名提供不同站点的服务?
例如我有这个简单的配置:
<VirtualHost 10.0.0.3:80>
ServerName internalwebsite.example.com
ServerAdmin [email protected]
DocumentRoot /var/www/internalwebsite.example.com/reachable_from_wan/
ErrorLog ${APACHE_LOG_DIR}/internalwebsite.example.com_error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/internalwebsite.example.com_access.log combined
</VirtualHost>
10.3 是可从 WAN 访问的接口,但我有另一个接口(10.4)只能从内联网访问,但我希望它具有相同的域名internalwebsite.example.com
,如下所示:
<VirtualHost 10.0.0.3:80>
ServerName internalwebsite.example.com
ServerAdmin [email protected]
DocumentRoot /var/www/internalwebsite.example.com/reachable_from_wan/
ErrorLog ${APACHE_LOG_DIR}/internalwebsite.example.com_error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/internalwebsite.example.com_access.log combined
</VirtualHost>
<VirtualHost 10.0.0.4:80>
ServerName internalwebsite.example.com
ServerAdmin [email protected]
DocumentRoot /var/www/internalwebsite.example.com/reachable_from_intranet/
ErrorLog ${APACHE_LOG_DIR}/internalwebsite.example.com_error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/internalwebsite.example.com_access.log combined
</VirtualHost>
这是可行的,并且 Apache 服务器根据到达的接口显示不同的内容,但是:
它在我想要生成 HTTPS 证书的域的 certbos 列表中不可用(letsencrypt
在 debian 机器上运行命令时)。
我的目标是自动更新内部网站的 https 证书,而不必使内联网内容可从 WAN 访问,也不必关闭内联网内容(API 每隔几秒钟就会查询一次,因此这不是一个可接受的选项)。
我怎样才能实现我想要的(参见上面具有两个虚拟主机的 vhosts 文件)并使letsencrypt
/certbot 列出该域,以便我可以为其生成 SSL 证书?
请注意,internalwebsite.example.com
可以从互联网访问!这意味着letsencrypt
可以验证所有权,但应该在 WAN 端进行验证。
编辑:
外部 DNS(全局 DNS)指向 WAN IP(例如 44.55.66.77),而我们的内部 DNS 在查询时返回 10.0.0.4。
实际问题是,添加这样的 vhost 域后,letsencrypt 将不允许选择该域来生成 HTTPS 证书:
web@webserver:/etc/apache2/sites-available# letsencrypt
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: example.com
2: other.example.com
3: somethingelse.example.com
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
internalwebsite.example.com
此列表中缺少,当我将 vhost 配置恢复为仅内部文档根目录(因此删除 10.0.0.3 部分)时,letsencrypt 会列出域,但当然它无法验证域。(因为当 letsencrypt 尝试验证身份时,apache 不知道internalwebsite.example.com
10.0.0.3 上的任何信息),当我尝试继续时,会发生此错误:
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: internalwebsite.example.com
Type: unauthorized
Detail: Incorrect validation certificate for tls-sni-01 challenge.
Requested
f547f5b0936dad4b0e1d28c325bc36c8.da1ceb11ae0bd36d221f546faede908a.acme.invalid
from 11.22.33.44:443. Received 2 certificate(s), first certificate
had names "example.com, other.example.com, somethingelse.example.com"
To fix these errors, please make sure that your domain name was
entered correctly and the DNS A record(s) for that domain
contain(s) the right IP address.
因为现在 apache 没有在 10.0.0.3 上监听,internalwebsite.example.com
但是我无法暂时关闭 10.0.0.4 上的网站并将其移至 10.0.0.3。