我有一个带有纯 Nginx 服务器的 Ubuntu 16.04 环境,我使用以下 Bash 脚本自动创建服务器块和相应的(自签名)SSL 认证。
它允许我从 CLI 中的任何位置创建这些,如下所示:
csb domain.tld
这是脚本。
这是脚本的服务器块模板将被渲染以创建站点的特定服务器块和证书。
自签名证书使冲浪变得不可能(this connection cannot be trusted
出现错误)。
如何使用典型的 CertBot 自动化脚本替换创建自签名相应证书的部分?
如果您愿意,请随意在 Github 上 fork 并启动一个项目
答案1
好的,正如评论中所承诺的那样,我已经研究了dehydrated-apache2
(dehydrated
Let's Encrypt 脚本的 debian 版本)如何处理它,它实际上非常简单。它的核心是一个简单的重定向别名:
AliasMatch /.well-known/acme-challenge/(.*)$ /var/lib/dehydrated/acme-challenges/$1
此配置部分是在任何 VirtualHost 上下文之外加载的,因此它具有优先权。为了将其转化为您的设置,您需要做两件事我无法帮助您:
- 找出您的 certbot 版本存储其挑战令牌的位置。
/var/lib
通常是开始寻找的安全选择。 - 编写一个
nginx
配置文件,设置别名匹配,在全局基础上将`/.well-known-acme-challenge/链接到该目录。我建议使用完整的正则表达式以避免潜在的目录遍历泄漏,但这取决于您。
完成后,只需调用certbot
创建和更新 SSL 证书即可生成证书签名请求,创建质询令牌并向 Let's Encrypt 服务器发送信号,然后服务器将在签署证书之前尝试验证令牌。
在某些时候我可能会站在你的立场上,除了我的情况,我将编辑一个我几年前写的成熟的 Perl 脚本,所以当我说“祝你好运”时,我并不是故意嘲笑。 ..
编辑您还需要修改块模板以包含 certbot 使用的目录;这对您来说可能比向 certbot 添加 postrun 挂钩以将证书复制到您的 nginx SSL 目录更容易。
第二次编辑根据这个问题,nginx
等效代码大约是
location /.well-known/acme-challenge/(.*)$ {
alias /var/lib/dehydrated/acme-challenges/$1;
}
但我会把它留给你去解决和测试。