使用 Let's Encrypt 和 Ansible 为您的服务器自动化 SSL 加密





5.00/5 (4投票s)
如何将 Let's Encrypt 作为项目部署流程的一部分,使用 Ansible 工具引入
引言
Lets Encrypt (http://www.letsencrypt.org/) —— 可能是最知名的提供免费绿色安全证书的机构。 在本文中,我将与您分享如何在服务器配置过程中使用 letsencrypt。
我尝试过多种 letsencrypt 客户端:certbot-auto、letsencrypt-cli、simple_le,以及来自 https://letsencrypt.openssl.ac.cn/docs/client-options/ 的其他一些客户端。
然而,目前我首选的是 https://github.com/lukas2511/letsencrypt.sh。 如果我用几个词来描述这个客户端,那就是:“它就是能用”。
我使用 Ansible 进行自动化场景,因此我将 letsencrypt.sh 封装成一个角色,位于 https://github.com/softasap/sa-lets-encrypt。
Using the Code
现有安装的示例用法:假设您已经有一个网站——您指定要使用的域名和 nginx 配置文件的路径。
- hosts: dev
vars:
- root_dir: "{{playbook_dir}}"
- my_domains:
- {
names: "voronenko.net www.voronenko.net",
nginx_config: "/etc/nginx/sites-available/voronenko_net"
}
pre_tasks:
- debug: msg="Pre tasks section"
roles:
- {
role: "sa-lets-encrypt",
le_domains: "{{my_domains}}",
option_run_once: true,
option_setup_cron: true
}
tasks:
- debug: msg="Tasks section"
这是一个更长的全新安装示例:您安装 nginx,配置您的网站,并应用 letsencrypt 剧本。
---
- hosts: www
vars:
- root_dir: "{{playbook_dir}}"
- my_domains:
- {
names: "voronenko.net www.voronenko.net",
nginx_config: "/etc/nginx/sites-available/voronenko_net"
}
pre_tasks:
- debug: msg="Pre tasks section"
roles:
- {
role: "sa-nginx"
}
- {
role: "sa-include",
include_file: "{{root_dir}}/demosite.yml"
}
- {
role: "sa-lets-encrypt",
le_domains: "{{my_domains}}",
# le_ca: "https://acme-staging.api.letsencrypt.org/directory",
option_run_once: true,
option_setup_cron: true
}
tasks:
- debug: msg="Tasks section"
请参阅 box-example 文件夹中的独立示例。
在 DigitalOcean 上的示例结果如下所示。
您将获得一个干净的操作系统
一旦 droplet 准备就绪,您为其配置 DNS。
以下是 GoDaddy 的示例
Ping 主机以确保 DNS 已成功传播
调整剧本以指定 box 地址
等待配置完成
看看 letsencrypt.sh 是如何工作的:它创建指向当前证书的链接,因此您可以安全地从 nginx 配置中引用它们。 角色安装 cron 作业,然后在证书到期之前确保更新证书。 但是:如果底层证书已更新,您需要重新加载您的 Web 服务器。
现在您可以安全地在您的 Web 配置中引用 ssl 证书了
最后一步——在浏览器中检查绿色安全证书
我们完成了!
关注点
您可以或多或少地轻松地将 Ansible 剧本调整到您的场景中。 如果您使用其他 Web 服务器,欢迎您的 PR 和评论。
历史
- 2017 年 1 月 2 日:初始版本