![使用 No-IP DDNS 和 apache2 服务器以及 Let'sEncrypt Certbot 颁发 SSL 证书:信息冲突且不起作用](https://linux22.com/image/720669/%E4%BD%BF%E7%94%A8%20No-IP%20DDNS%20%E5%92%8C%20apache2%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BB%A5%E5%8F%8A%20Let'sEncrypt%20Certbot%20%E9%A2%81%E5%8F%91%20SSL%20%E8%AF%81%E4%B9%A6%EF%BC%9A%E4%BF%A1%E6%81%AF%E5%86%B2%E7%AA%81%E4%B8%94%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
标题很好地解释了我所使用的工具,但我将尝试进一步阐述:
- 我有一个可公开访问的 No-IP DDNS
- 端口转发已配置为端口 80
- 端口 80 转发指向我用作 apache2 服务器的 Raspberry Pi
- RPi 运行的是 Raspbian GNU/Linux 9 (Stretch) 内核 4.9.80-v7+
index.html
我可以通过导航到 <查看内容DDNS 名称>:80 在 Web 浏览器中使用外部网络- 我需要颁发 SSL 证书以转换为 HTTPS 来托管 Alexa 技能
对于 Stretch,Certbot 的用法如下: https://certbot.eff.org/lets-encrypt/debianstretch-apache
根据链接,我运行:
sudo certbot --authenticator webroot --installer apache
并继续进行配置直至验证阶段,此时我得到以下内容:
Waiting for verification...
Cleaning up challenges
Failed authorization procedure. <DDNS-name> (http-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Fetching http://<DDNS-name>/.well-known/acme-challenge/yDloDClARe-ZW1KxiqAUSCE4ZUoNCOzpmDFvcrdx9WE: Timeout
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: <DDNS-name>
Type: connection
Detail: Fetching
http://<DDNS-name>/.well-known/acme-challenge/yDloDClARe-ZW1KxiqAUSCE4ZUoNCOzpmDFvcrdx9WE:
Timeout
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. Additionally, please check that
your computer has a publicly routable IP address and that no
firewalls are preventing the server from communicating with the
client. If you're using the webroot plugin, you should also verify
that you are serving files from the webroot path you provided.
如果我可以公开访问服务器,我不会遇到任何防火墙问题或名称问题。
我发现了一些与我的问题有关的有趣的结果:
- “此外,如果你使用动态 DNS 服务来为网站提供服务,它根本不起作用。” -https://www.booleanworld.com/adding-https-website-lets-encrypt/
- “您是否支持 No-IP 之类的动态 DNS 服务?……但 Let's Encrypt 支持此功能。因此您不必关心您的 DynDNS 服务。” -https://community.letsencrypt.org/t/dyndns-no-ip-managed-dns-support/883/6
- 不确定如何改变验证的挑战(也许这就是无法验证的原因?) -https://community.letsencrypt.org/t/ddns-and-lets-encrypt/31870/2
将不胜感激任何/所有的帮助,谢谢!
编辑:将 DocumentRoot 从 更改为 后/var/www/<DDNS-name>
,/var/www/<DDNS-name>/
我得到以下信息:
Waiting for verification...
Cleaning up challenges
Failed authorization procedure. <DDNS-name> (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://<DDNS-name>/.well-known/acme-challenge/pdyt7okkiqgYR2YemcBfFBXf78D4cGUw6eP41BgZtsQ: "<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p"
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: <DDNS-name>
Type: unauthorized
Detail: Invalid response from
http://<DDNS-name>/.well-known/acme-challenge/pdyt7okkiqgYR2YemcBfFBXf78D4cGUw6eP41BgZtsQ:
"<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p"
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.
编辑2(文件结构):
pi@butters-pi:/var/www $ ls
<DDNS-name>
pi@butters-pi:/var/www $ cd <DDNS-name>/
pi@butters-pi:/var/www/<DDNS-name> $ ls
alexa.php CHANGELOG.md config.php LICENSE mintLib.php public_html README.md
pi@butters-pi:/var/www/<DDNS-name> $ cd public_html/
pi@butters-pi:/var/www/<DDNS-name>/public_html $ ls
index.html
答案1
我几乎使用相同的设置,并且可以确认 let's encrypt certbot 可以与通过 no-ip 或 ddns 托管的域名一起正常运行。
certbot 错误消息几乎是不言自明的:
在第一种情况下,身份验证器使用的 URL 因超时而失败。
在第二种情况下,身份验证器使用的 URL 失败,出现 HTTP CODE 404(未找到)。
这些错误错误地配置了 apache vhost:
错误 404 表明 certbot 已将/.well-known/acme-challenge/
有效负载写入 apache 所提供服务以外的其他目录。
超时表明 apache 无法/.well-known/acme-challenge/
在合理的时间限制内提供内容 - 可能是由于其他一些 missconfig/permissions 问题造成的。
答案2
参见评论:DocumentRoot 参数设置不正确