TypistTech.trellis-cloudflare-origin-ca
Trellis Cloudflare Origin CA
将 Cloudflare Origin CA 添加到 Trellis 作为 SSL 提供者。
用 ♥ 创建 by Typist Tech
Trellis Cloudflare Origin CA 是一个开源项目,完全可以免费使用。
然而,维护和开发新功能所需的努力在没有适当经济支持的情况下是不可持续的。如果你有能力,请考虑通过下面的链接捐赠:
将 Cloudflare Origin CA 添加到 Trellis 作为 SSL 提供者
为什么?
简短回答:为了保持 Cloudflare 与您的服务器之间的连接私密且安全,防止篡改。
详细回答:
Cloudflare 的灵活 SSL 模式是免费计划下 Cloudflare 网站的默认设置。灵活 SSL 模式意味着从浏览器到 Cloudflare 的流量将被加密,但从 Cloudflare 到网站源服务器的流量不会被加密。为了利用我们的 完全和严格 SSL 模式——它加密了 Cloudflare 和原始服务器之间的连接——必须在原始服务器上安装一个证书。
Cloudflare 博客 - 使用通用 SSL 保护源服务器连接安全
Cloudflare Origin CA 相比 Let's Encrypt 有什么好处?
从 Let's Encrypt 获取证书时,您必须首先禁用 Cloudflare,因为 Cloudflare 会隐藏实际的服务器 IP,导致 Let's Encrypt 挑战失败。使用 Cloudflare Origin CA 可以简化这一麻烦。
Cloudflare Origin CA 与其他公共证书相比有什么好处?
请看 Cloudflare 博客上的 介绍 Cloudflare Origin CA。
角色变量
# group_vars/<environment>/vault.yml
# 此文件应被加密。请参阅:https://roots.io/trellis/docs/vault/
##########################################################################
# Cloudflare Origin CA 密钥
# 不要与 Cloudflare 全球 API 密钥混淆
# 请参阅:https://blog.cloudflare.com/cloudflare-ca-encryption-origin/#iiobtainyourcertificateapitoken
vault_cloudflare_origin_ca_key: v1.0-xxxxxxxxxxx
# group_vars/<environment>/main.yml
###################################
# 指示所需的软件包状态。
# `latest` 确保安装最新版本。
# `present` 在已经安装时不更新。
# 选项:present|latest
# 默认:latest
cfca_package_state: present
# 是否隐藏敏感任务的结果,这些结果可能以明文显示 Cloudflare Origin CA 密钥。
# 选项:true|false
# 默认:false
cloudflare_origin_ca_no_log: true
# group_vars/<environment>/wordpress_sites.yml
##############################################
wordpress_sites:
example.com:
# 您的 Cloudflare 账户必须拥有所有这些域
site_hosts:
- canonical: example.com
redirects:
- hi.example.com
- hello.another-example.com
ssl:
# 必须启用 SSL
enabled: true
# 必须禁用 OCSP stapling
stapling_enabled: false
# 使用此角色生成 Cloudflare Origin CA 证书
provider: cloudflare-origin-ca
# 以下为可选项
cloudflare_origin_ca:
# 颁发证书的有效天数。可接受的选项有:7、30、90、365(1年)、730(2年)、1095(3年)、5475(15年)。
# 默认:5475
days: 7
# 包含在证书中的完全合格的域名列表作为主题备用名称。
# 默认:所有规范和重定向域
# 在上面的例子中:example.com、hi.example.com、hello.another-example.com
hostnames:
- example.com
- '*.example.com'
- '*.another-example.com'
Typist Tech 准备好为您构建下一个精彩的 WordPress 网站。雇佣我们!
要求
- Ansible 2.10 或更高版本
- Trellis@c86d8a0 或更高版本
- Cloudflare 账户
- Ubuntu 18.04 (Bionic) 或 20.04 (Focal)
安装
将此角色添加到 galaxy.yml
:
- src: TypistTech.trellis-cloudflare-origin-ca # 区分大小写!
version: 0.8.0 # 检查最新版本!
运行 $ trellis galaxy install
修改 Trellis 的 Playbook
将此角色立即添加到 server.yml
的 role: wordpress-setup
之后:
roles:
# ...
- - { role: wordpress-setup, tags: [wordpress, wordpress-setup, letsencrypt] }
+ - { role: wordpress-setup, tags: [wordpress, wordpress-setup, letsencrypt, cloudflare-origin-ca] }
+ - { role: TypistTech.trellis-cloudflare-origin-ca, tags: [cloudflare-origin-ca, wordpress-setup], when: sites_using_cloudflare_origin_ca | count }
# ...
注意:role: wordpress-setup
被标记为 cloudflare-origin-ca
。
Nginx 包含
此角色将 Nginx SSL 指令模板输出到 {{ nginx_path }}/includes.d/{{ item.key }}/cloudflare-origin-ca.conf
。Trellis 默认将此文件包含在 这里 和 这里,无需其他操作。
如果使用 Nginx 子模板,则将此行添加到您的服务器块中:
include includes.d/{{ item.key }}/cloudflare-origin-ca.conf;
常见错误
没有站点在使用 Cloudflare Origin CA
显然,当您不使用 Cloudflare Origin CA 时,不应运行此角色。
vault_cloudflare_origin_ca_key
未定义
在 group_vars/<environment>/vault.yml
中加密您的 Cloudflare Origin CA 密钥。请参阅 角色变量。
example.com
在使用 Cloudflare Origin CA,但 OCSP stapling 被启用了
... 您正试图使用源 CA 进行 OCSP stapling。当前,Origin CA 不支持 OCSP,因此您应该为使用 Origin CA 证书的主机删除 ssl_staping 指令...
--- Cloudflare 支持
Cloudflare Origin CA 不支持 OCSP stapling。对所有使用 Cloudflare Origin CA 的站点禁用 OCSP stapling。请参阅 角色变量。
key_type
已弃用。请从 example.com
删除它
为避免配置错误,key_type
(ECDSA 或 RSA)和 key_size
(位数)选项已弃用。自 v0.8 起,此角色仅生成 521 位的 ECDSA 密钥。
如果您之前使用其他配置生成了 CA 证书:
- 从服务器上移除 CA 证书
- 通过 Cloudflare 仪表板撤销 CA 证书
- 重新配置服务器
key_size
已弃用。请从 example.com
删除它
为避免配置错误,key_type
(ECDSA 或 RSA)和 key_size
(位数)选项已弃用。自 v0.8 起,此角色仅生成 521 位的 ECDSA 密钥。
如果您之前使用其他配置生成了 CA 证书:
- 从服务器上移除 CA 证书
- 通过 Cloudflare 仪表板撤销 CA 证书
- 重新配置服务器
Nginx 目录未包含
确保您具有 roots/trellis@f2b8107 或更高版本。
400 错误请求 - 未发送所需的 SSL 证书
症状:
- 服务器返回 "400 错误请求 - 未发送所需的 SSL 证书" 的所有请求
- Nginx 日志记录 "客户端未发送所需的 SSL 证书,同时读取客户端请求头,客户端:[隐藏],服务器:[隐藏],请求:"GET / HTTP/1.1",主机:"[隐藏]""
- Nginx 配置文件中的某处存在
ssl_verify_client on;
- 在
wordpress_sites.yml
中使用client_cert_url
,例如:roots/trellis#869
罪魁祸首:
您的 已认证的源提取 配置不正确。
事实:
此角色与已认证的源提取或 ssl_verify_client
无关。
解决方案:
- 阅读 介绍 Cloudflare Origin CA
- 阅读 已认证的源提取
- 理解此角色是 Cloudflare Origin CA
- 理解 Cloudflare Origin CA 和已认证的源提取是两个不同的概念
- 阅读 #34
- 如果您还有疑问,请联系 Cloudflare 支持团队
常见问题
为什么只允许 521 位 ECDSA 密钥?
我假设您想要设置 已认证的源提取 与 Cloudflare。我建议使用 ECDSA,因为椭圆曲线提供相同的安全性,且计算开销较小。
了解更多关于 ECDSA:更好的互联网的数字签名算法 上述文章还提到:根据 ECRYPT II 推荐的密钥长度,256 位椭圆曲线密钥提供与 3248 位的非对称密钥相同的保护。网站证书中的典型 RSA 密钥为 2048 位。因此,我认为选择256位的 ECDSA 是一个不错的选择。
--- Cloudflare 支持, 2017 年 9 月
为避免配置错误,key_type
(ECDSA 或 RSA)和 key_size
(位数)选项已弃用。自 v0.8 起,此角色仅生成 521 位的 ECDSA 密钥。
如果您之前使用其他配置生成了 CA 证书:
- 从服务器上移除 CA 证书
- 通过 Cloudflare 仪表板撤销 CA 证书
- 重新配置服务器
为什么即使 cloudflare_origin_ca_no_log
为 true
,Cloudflare Origin CA 密钥仍会被记录?
请注意,使用
no_log
属性并不能阻止在通过ANSIBLE_DEBUG
环境变量调试 Ansible 本身时显示数据。--- Ansible 文档
Cloudflare Origin CA 完美吗?
这看起来很棒。我在哪里可以找到更多类似的资源?
- Typist Tech 博客上的文章
- Tang Rufus 的 WordPress 插件 在 wp.org
- Typist Tech 的 GitHub 个人资料上的更多项目
- 关注 Typist Tech 的时事通讯
- 关注 Tang Rufus 的 Twitter 账户
- 雇佣 Tang Rufus 来构建您下一个精彩的网站
我在哪里可以给予五颗星的评价?
谢谢!很高兴您喜欢它。请让我知道有人在使用此项目,这对我很重要。请考虑:
- 在 Twitter 上发布 一些好评并提及 @TangRufus
- ★ 为 GitHub 仓库 点赞
- 👀 关注 GitHub 仓库
- 撰写教程和博客文章
- 雇佣 Typist Tech
另见
- WP Cloudflare Guard - 将 WordPress 与 Cloudflare 防火墙连接,在 DNS 级别保护您的 WordPress 网站。自动创建防火墙规则以阻止危险的 IP
- Trellis Cloudflare Origin CA 的来源
- Cloudflare Origin CA
- Trellis SSL
- Trellis Nginx 包含
- Ansible Vault
运行测试
运行测试:
ansible-playbook -vvv -i 'localhost,' --syntax-check tests/test.yml
ansible-lint -vv .
反馈
请提供反馈! 我们希望这个项目尽可能有用。 请 提交一个问题,指出您喜欢和不喜欢的地方,或者 Fork 项目并 发送拉取请求。 没有问题太小。
安全漏洞
如果您发现该项目中存在安全漏洞,请通过电子邮件与我们联系 [email protected]。 所有安全漏洞将会被及时处理。
感谢
Trellis Cloudflare Origin CA 是一个 Typist Tech 项目,由 Tang Rufus 维护,为 雇佣 的自由开发者。
特别感谢 Roots 团队,是他们的 Trellis 使该项目成为可能。
完整的贡献者列表可以在 这里 找到。