使用 LetsEncrypt 时,必须每 90 天更新一次证书。每次续订证书时,都必须再次证明证书中包含的域的所有权。
可以通过添加_acme-challengeDNS 记录来做到这一点。是否可以在第一次用于验证时设置此 DNS 记录,并在后续验证中重复使用它,这样就不必在每次需要更新证书时设置新的 DNS 记录?
我不知道如何禁用.well-known目录的身份验证。
当我删除 SVN 特定指令(DAV、SVNPath、AuthzSVNAccessFile)时,事情会按预期运行。
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot "C:/www.example.com"
ServerAdmin admin@example.com
SSLEngine On
SSLCertificateFile "C:/Apache2/conf/ssl/www.example.com.crt"
SSLCertificateKeyFile "C:/Apache2/conf/ssl/www.example.com.key"
<Location />
DAV svn
SVNPath "C:/svnrepo"
SSLRequireSSL
AuthName "www.example.com"
AuthType Basic
AuthUserFile "conf/svn/svn-users.txt"
AuthGroupFile "conf/svn/svn-groups.txt"
AuthzSVNAccessFile "conf/svn/svn-access.txt"
Require valid-user
</Location>
<Location "/.well-known">
Satisfy Any
Allow from all
Require all granted
# Apache 2.4 only
#AuthType None
</Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
编辑:如果我没有重叠的路径,它也会起作用。例如使用/svn和/.well-known。不幸的是,这不是我现在可以轻易改变的事情。
据我了解,LetsEncrypt DNS 验证的工作原理是在 DNS 中设置静态 TXT 记录(基本上只是一个随机数),然后由 LetsEncrypt 服务器检查。
当我第一次听说它时,我非常兴奋并期待更复杂的东西:公钥存储在我的域的 DNS 中。然后,为了进行验证,我创建一条签名消息,并且 LetsEncrypt 服务器检查签名是否有效。由于 DNS 中的公钥和私钥是我拥有的,这证明了我控制该域。
发现它不能以这种方式工作有点令人失望:它需要手动交互,甚至需要更新新的 TXT 记录。
不使用签名方法是否存在技术原因?如果没有,LetsEncrypt没有实现的原因是什么?
domain-name-system verification digital-signatures lets-encrypt
这个问题可能已经被问过好几次了,但是考虑到我能找到的所有结果和我所知甚少,我有点迷失了。我使用的是 Fedora 29。
我尝试用 nginx 做什么:
样本 :
application.domain.com --> https://hostname1.domain.local(或 IP 1)
test.domain.com --> https://hostname2.domain.local:1234(或 IP 2)
www.domain.com --> https://hostname3.domain.local(或IP 3)等...
我怎样才能做到这一点?让我们加密自动配置我的 nginx 配置,但这似乎有点太多了。
非常感谢您的回答,我觉得我得到了一些进步,即使暂时没有工作。我在这里发布了我的完整配置文件,因为我现在遇到了“502 Bad Gateway”错误。IP 与反向代理不在同一子网中,但完全可访问,没有防火墙或路由问题。
知道我可以在哪里继续前进吗?在原始配置中,还有一个包含密码和协议的 certbot conf 文件。也许我需要重新包含它?
另外:我尝试访问的内部服务器具有使用我自己的 AD CS 签名的证书,但反向代理上尚未安装根证书。也许我应该 ?
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 linux 盒子(运行 ubuntu 18.04)和 nginx、gunincorn、letsencrypt 和 docker 来提供 python-django web 应用程序。在学习了许多在线教程之后,我按照本教程http://pawamoy.github.io/2018/02/01/docker-compose-django-postgres-nginx 成功通过端口 80 通过 http 提供了应用程序服务。 html。
然而,我现在真的很难通过端口 443 通过 https 进行部署。我想也许我不理解基本的 docker 概念。我运行时遇到的错误sudo docker-compose up如下。
NGINX 错误:
nginx_1 | nginx: [emerg] open() "/etc/letsencrypt/options-ssl-nginx.conf" failed (2: No such file or directory) in /etc/nginx/conf.d/local_ssl.conf:28
我相信这是因为我没有链接 docker-compose.yml 文件中的 options-ssl-nginx.conf 文件,也许是通过卷?我不知道这是否正确。我的 docker-compose.yml 文件和 nginx.conf 文件的相关部分如下:
docker-compose.yml:
version: '3'
services:
# database containers
database1:
...
# web container
djangoapp:
...
# reverse proxy container (nginx)
nginx:
image: …Run Code Online (Sandbox Code Playgroud) 我已为我的域生成 Lets Encrypt通配符证书*.domain.com。
我认为该证书对于任何嵌套子域都有效*.*.domain.com,例如it.*.domain.com或fr.*.domain.com。但浏览器给我错误,该通配符证书是为 颁发的domain.com,而不是为*.domain.com。我尝试*.*.domain.com使用 CertBot 颁发新证书,但出现错误(不允许使用多个通配符)。
是否可以实现此目的,或者我是否必须为每个第一级子域手动颁发通配符证书?
我有一个在私有子域上运行的服务器,server.internal.example.com
example.com是公开的但internal.example.com不是。
我已使用 CertBot 生成证书,*.example.com但如果我尝试扩展此证书以包含*.internal.example.comDNS 质询,则会失败,因为 LetsEncrypt 无法访问此域。我尝试过运行两者:
sudo certbot certonly --manual --preferred-challenges=dns -d *.example.com -d *.internal.example.com
sudo certbot certonly --manual --preferred-challenges=dns -d *.example.com -d server.internal.example.com
Run Code Online (Sandbox Code Playgroud)
但这都要求我进行 LetsEncrypt 无法看到的 DNS 记录更改。有没有办法解决?
看了下/etc/cron.d/certbot,我觉得不会!该文件包含以下行:
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew
而且,除非我读错了,否则只有当有一个名为/usr/bin/certbot(有)的可读可执行文件并且没有一个名为/run/systemd/system(但有,即使它是空的)目录时才会发生更新。
那么我是对的,这个certbot -q renew钻头永远不会运行吗?是否还有其他地方也会触发更新?(我认为可能有一些东西,/run/systemd/system因为正在检查,但正如我所说,没有。出于好奇,为什么这个小脚本会检查 不存在/run/systemd/system?)
这是在 Ubuntu 18.04 上运行最新版本certbot(v1.18.0,昨天使用官方说明安装的)。
顺便说一句,我已经跑过:
test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot renew --dry-run
作为 root 在命令行上运行,它会立即退出,退出状态为 1。
使用 Certbot 在 nginx Web 服务器上安装 R3 Let's Encrypt 证书会导致 nginx 配置中的所有其他域都包含在证书的“主题备用名称”下。这对于我的用例来说是不可取的。
我在这里阅读了手册页,并在这里和这里阅读了其他一些 Stack Exchange 帖子。
关于替代名称的使用,手册页说(我不完全理解):
-d DOMAIN, --domains DOMAIN, --domain DOMAIN 要应用的域名。对于多个域,您可以使用多个 -d 标志或输入逗号分隔的域列表作为参数。提供的第一个域将是证书的主题 CN,所有域将是证书上的主题备用名称。第一个域还将在某些软件用户界面中使用,并用作证书和相关材料的文件路径,除非另有指定或您已经拥有同名的证书。如果发生名称冲突,它将在文件路径名后附加一个数字(如 0001)。(默认:询问)
使用 Certbot 安装 Let's Encrypt 证书时,如何完全指定或省略主题备用名称?如果 Certbot 不能,在仍然使用 R3 Let's Encrypt 证书的同时是否有不同的方法?
我有一个通过 Digital Ocean 运行的 ubuntu 服务器,它有一个我通过 LetsEncrypt 获得的 SSH 证书。
我正在尝试切换到更便宜的服务,我需要将证书移动到我的新服务器。我怎样才能做到这一点?
看起来我可以撤销当前 DO 服务器上的证书。然后我可以在我的新服务器上创建一个新服务器而没有任何问题吗?
lets-encrypt ×10
certbot ×2
nginx ×2
apache-2.2 ×1
cron ×1
django ×1
docker ×1
fedora ×1
mod-dav-svn ×1
ssl ×1
subdomain ×1
ubuntu-18.04 ×1
verification ×1
wildcard ×1