我在运行 Apache 的 Ubuntu 服务器上设置了一个简单的域(实际上只是显示一个静态 HTML 文件);我使用 LetsEncrypt 设置它,它运行正常。我想要更高的安全性,所以决定使用 Cloudflare。
我通过 Cloudflare 设置了 DNS,一旦我设置 SSL 以使用 Cloudflare 证书(这样它就会停止“过多重定向错误”),它就可以完美地运行。这也非常有效。
然后我读到我可以使用隧道(然后不必使用端口转发 - 为我的家庭网络提供更好的安全性),所以我设置了一个 Cloudflare 隧道(按照本教程:https://www.youtube.com/watch?v=hrwoKO7LMzk)
config.yml
如果我在我的文件中设置它,我可以让它工作:
originRequest:
noTLSVerify: true
我希望它在不包含该代码片段的情况下工作 - 因为我希望它是 CF 和我的 Apache 服务器之间的安全流量。
我的配置文件非常简单:
tunnel: <id>
credentials-file: /route/to/<id>.json
ingress:
- hostname mydomain.com
service: https://localhost:443
- service: http_status404
我在 cloudflared 服务中看到的错误是这样的:
Request failed error="Unable to reach the origin service. The service may be down or it may not be responding to traffic from cloudflared: x509: certificate is valid for *.mydomain.com, mydomain.com, not localhost"
避免在我的配置中使用 noTLSVerify 但仍使隧道正常工作的最佳方法是什么?
我的 Apache VirtualHost 如下所示:
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName mydomain.com
ServerAlias www.mydomain.com
DocumentRoot /var/www/html/mydomain/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
#Old Certs From LE
#SSLCertificateFile /etc/letsencrypt/live/mydomain.com-0001/chain.pem
#SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com-0001/private_key.pem
SSLCertificateFile /root/.cloudflared/cf_pem.pem
SSLCertificateKeyFile /root/.cloudflared/cf_key.key
</VirtualHost>
任何帮助将不胜感激。
如果将 noTLSVerify 设置为 true 不会带来任何危害/危险/安全风险,那么我会使用它,但除此之外,我宁愿不使用它 - 只是想不出如何不使用它!
答案1
它抱怨说您机器上的 LetsEncrypt 证书适用于*.mydomain.com
,但cloudflared
守护进程正尝试使用它来验证 的来源localhost
。这里最简单的做法是将一个originRequest
部分添加到您的入口规则中。
例如
ingress:
- hostname mydomain.com
service: https://localhost:443
originRequest:
originServerName: mydomain.com
这将告诉 cloudflared 的 TLS 验证算法接受该域的证书,即使它连接到不同的域。