martin-v.letsencryptsh
脱水
安装和配置 dehydrated
。创建用户以进行权限降低并配置证书续期的定时任务。
dehydrated
处理您的私钥,因此请小心并检查该 ansible 角色 和所用的 dehydrated 脚本 的代码。
有关使用 nginx 作为 HTTPS 代理的示例设置,请查看 ansible 角色 martin-v/ansible-nginx_https_only
要求
该角色在主机上安装:
- openssl
- curl
- sed
- grep
- mktemp
- git
该角色需要一个 web 服务器,为 dehydrated_challengesdir
中配置的目录提供服务(默认:/var/www/dehydrated/
),在所有证书请求域上可通过 http://<your-domain>/.well-known/acme-challenge/
访问。
角色变量
必需变量:
dehydrated_contactemail
用于 letsencrypt 账户的邮箱地址。主要用于证书到期通知,但如果定时任务正常工作,这种情况应该不会发生。
dehydrated_contactemail: certmaster@example.com
dehydrated_letsencrypt_agreed_terms
要接受 letsencrypt 服务条款,请将变量 dehydrated_letsencrypt_agreed_terms
设置为当前的许可网址。您可以在 https://acme-v01.api.letsencrypt.org/terms 找到实际的网址。
dehydrated_letsencrypt_agreed_terms: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
dehydrated_domains
请求证书的域名列表。每行将创建一个证书,存放在 /etc/dehydrated/certs/
文件夹中,名称为该行中的第一个域名。第一个域名是通用名称,其余域名将是证书的备用名称。
dehydrated_domains: |
example.com
example.org www.example.org blog.example.org
dehydrated_deploy_cert
证书必须对像 apache 或 dovecot 这样的服务可读。但只有特定的服务应该被允许读取该服务的证书。因此,我们必须将每个证书的所有者/组更改为特定值。出于安全原因,这只能由 root 用户完成。
为了解决这个问题,存在 dehydrated_deploy_cert
变量。该变量必须包含证书部署的 bash 脚本。部署时的常见任务有将证书复制到其他目录,修改文件所有者/权限以及重启服务。
该代码在正常的 dehydrated 钩子之后调用,但需获取 root 权限。此代码为每个已生成的证书调用一次。
参数:
DOMAIN
主要域名,即证书的通用名称 (CN)。KEYFILE
(文件名: privkey.pem) 包含私钥的文件路径。CERTFILE
(文件名: cert.pem) 包含签署证书的文件路径。FULLCHAINFILE
(文件名: fullchain.pem) 包含完整证书链的文件路径。CHAINFILE
(文件名: chain.pem) 包含中间证书的文件路径。TIMESTAMP
(文件名: chain.pem) 指定证书创建的时间戳。
示例:
dehydrated_deploy_cert: |
mkdir -p /etc/nginx/ssl/${DOMAIN}
cp "${KEYFILE}" "${CERTFILE}" "${FULLCHAINFILE}" "${CHAINFILE}" /etc/nginx/ssl/${DOMAIN}
chown root:root /etc/nginx/ssl/${DOMAIN}/*
chmod 600 /etc/nginx/ssl/${DOMAIN}/*
systemctl restart nginx.service
dehydrated_run_cron_on_every_ansible_run
该角色在每次执行时触发定时任务脚本以创建或更新证书。要禁用此行为,请使用:
dehydrated_run_cron_on_every_ansible_run: false
可选变量:
dehydrated_challengesdir
用于 acme-challenge 文件的目录。您的 web 服务器应公开此目录,位于 http://<your-domain>/.well-known/acme-challenge/
,为之前列出的所有域名提供服务。如果该目录不存在,将会被创建。该目录应仅对 dehydrated 用户可写,对您的 web 服务器可读,这将通过该角色强制执行。
dehydrated_challengesdir: /var/www/dehydrated/
更多变量
还有一些不常见的变量供超级用户使用,需要更多控制,详细信息请查看 defaults/main.yml
依赖关系
无。
示例剧本
- hosts: all
remote_user: root
vars_files:
- dehydrated_vars.yml
roles:
- martin-v.dehydrated
示例变量文件
dehydrated_contactemail: [email protected]
dehydrated_letsencrypt_agreed_terms: https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
dehydrated_domains: |
example.com
example.org www.example.org blog.example.org
dehydrated_deploy_cert: |
mkdir -p /etc/nginx/ssl/${DOMAIN}
cp "${KEYFILE}" "${CERTFILE}" "${FULLCHAINFILE}" "${CHAINFILE}" /etc/nginx/ssl/${DOMAIN}
chown root:root /etc/nginx/ssl/${DOMAIN}/*
chmod 600 /etc/nginx/ssl/${DOMAIN}/*
systemctl restart nginx.service
提示
要在 ansible 部署时创建证书,可以调用常规定时任务脚本:shell: "/etc/cron.weekly/dehydrated"
。 文件夹 tests
包含完整的运行示例。
要从官方 letsencrypt 客户端导入,请查看 dehydrated 导入维基页面。
未完成的任务
- 使用 molecule 进行更好的测试
许可证
MIT
作者信息
该角色由 Martin V. 于 2016 年创建,并于 2017 年进行了改进。
Install and configure [`dehydrated`](https://github.com/lukas2511/dehydrated). Create user for privilege dropping and cron configuration for certificate renewals.
ansible-galaxy install martin-v.letsencryptsh