使用 No-IP DDNS 和 apache2 服务器以及 Let'sEncrypt Certbot 颁发 SSL 证书:信息冲突且不起作用

使用 No-IP DDNS 和 apache2 服务器以及 Let'sEncrypt Certbot 颁发 SSL 证书:信息冲突且不起作用

标题很好地解释了我所使用的工具,但我将尝试进一步阐述:

  • 我有一个可公开访问的 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.

如果我可以公开访问服务器,我不会遇到任何防火墙问题或名称问题。

我发现了一些与我的问题有关的有趣的结果:

将不胜感激任何/所有的帮助,谢谢!

编辑:将 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 参数设置不正确

相关内容