我从事许多业余项目,并尝试为每个项目设置 https。由于我付不起证书费用,所以我使用 Letsencrypt。如果遇到流量高峰,我还会使用 Cloudflare。我首先使用 Letsencrypt 获取 SSL 证书,然后将 Cloudflare 放在前面。
问题是,当需要更新 Letsencrypt 证书时,我每次都必须关闭 Cloudflare 才能执行此操作,因为它看到的 IP 现在不同了(Cloudflare 的 IP 而不是我服务器的 IP)。
我知道 Cloudflare 免费提供 SSL,只要它与我的服务器有 https 连接,就可以了,所以从技术上讲我根本不需要更新我的 SSL 证书。但我想让我的服务器的 SSL 证书保持更新,这样我就可以随时灵活地关闭 Cloudflare,同时仍然保持正常运行并拥有有效的证书。
我在这个过程中做错了什么吗?我可以在 letsencrypt renew 中使用一个选项来更好地处理这个问题,而不必每 2 个月登录 Cloudflare 将其关闭,等待几分钟,运行 renew,然后再次打开 Cloudflare?
[编辑] 由于某些原因被否决,可能是因为我没有在设置中包含错误消息。这里就是。
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/[mydomain].com.conf
-------------------------------------------------------------------------------
Cert is due for renewal, auto-renewing...
Renewing an existing certificate
Performing the following challenges:
tls-sni-01 challenge for [mydomain].com
Waiting for verification...
Cleaning up challenges
Attempting to renew cert from /etc/letsencrypt/renewal/[mydomain].com.conf produced an unexpected error: Failed authorization procedure. [mydomain].com (tls-sni-01): urn:acme:error:tls :: The server experienced a TLS error during domain verification :: Failed to connect to 104.18.55.209:443 for tls-sni-01 challenge. Skipping.
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: [mydomain].com
Type: tls
Detail: Failed to connect to 104.18.55.209:443 for tls-sni-01
challenge
显然,104.18.55.209 是 Cloudflare IP。无法连接到该 IP 进行质询。
[编辑 2] Tim 说要提供 CloudFlare 页面规则和我的域名。我的域名是 memechicken.com,我的 CF 页面规则是空的。一切都是默认设置。最后,以下是我的加密选项卡设置,应该相关:
一切都是默认的。我没有改变任何东西。
答案1
我使用 Let's Encrypt 和 CloudFlare。我的证书会在 CloudFlare 处于活动状态并正常工作时自动更新。我使用Acmetool,因为当我在 2015 年尝试使用 Certbot 时,它在 Amazon Linux 上运行得并不好。
据我所知,服务器 IP 无关紧要。Let's Encrypt 通过域名联系您的服务器。如果您拥有传统证书,该证书具有 1:1 的域到证书映射,可能会出现问题(我从未尝试过,所以我不知道),但 LE 不会出现问题。
我有一篇关于使用 CloudFlare 设置 Let's Encrypt你可能会觉得它很有趣或很有用。
更新 这是我的 Nginx 配置,允许 Let's Encrypt 通过 http 连接,将其他所有内容转发到 https。您可以在 Apache 中执行类似操作,但我不知道如何操作。
# Redirect all variations to https://www domain
server {
listen 80;
server_name example.com www.example.com;
# Let's Encrypt certificates with Acmetool
location /.well-known/acme-challenge/ {
alias /var/www/.well-known/acme-challenge/;
}
location / {
return 301 https://www.photographerstechsupport.com$request_uri;
}
}