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: certmaster@example.com

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 导入维基页面

未完成的任务

构建状态 travis 构建状态 semaphore

  1. 使用 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
许可证
mit
下载
756
拥有者
Freelance software developer and IT consultant