LetsEncrypt 现在可以在 Fedora

让我们加密 最近进入公众 beta. 感谢 LetsEncrypt 团队的工作和 Fedora 打包程序,官方的 LetsEncrypt 客户端现在在这两个版本中都可用 Fedora 23 和生皮。 要了解 LetsEncrypt 的工作原理或它是什么,您可以在 Fedora 杂志文章向公众宣布 beta 发射。 在本文中,我们提供了一个基本配置来保护 Apache 具有 LetsEncrypt 证书的基于 HTTPD 的站点。

使用letsencrypt

在 Fedora

LetsEncrypt 为所有人提供免费的 SSL 证书。

官方的letsencrypt客户端可以安装在 Fedora 23 或更高版本使用此命令:

dnf install letsencrypt

在官方客户端中,有三种方法可以证明您的域的所有权。

  • 手动验证: 秘诀需要人手摆好。
  • 独立验证:LetsEncrypt 客户端侦听端口 80 或 443 并响应服务器本身。
  • 网络根验证: 客户端指向 web 根目录(例如 /var/www/html

    ) 并直接写入文件。

在撰写本文时,全自动配置 Apache 和 nginx 正在进行中。

安装软件包后,您将能够使用 –help 标志查看可用选项列表:

letsencrypt --help all

手动验证

手动验证的开销最大,但允许您在与 Web 服务器不同的系统上运行 LetsEncrypt 客户端。 根据您喜欢的安全模型,您可能会发现这是可取的。

默认使用 ncurses 界面,但也可以使用纯文本。

$ letsencrypt --text --email [email protected] 
--domains www.example.com,example.com,foo.example.com 
--agree-tos --renew-by-default --manual certonly

仅当您丢失帐户详细信息时才使用电子邮件地址。 这将允许您验证您的身份以撤销证书并申请新证书。

如果列出了多个域,这些域将作为 SubjectAltNames 包含在单个证书中。

然后,客户端提示将每个域的机密存储在特定位置。 运行以下命令来设置秘密位置。

$ cd /var/www/html
$ mkdir -p .well-known/acme-challenge
$ echo "somethingrandomgivenbyservergoeshere" > .well-known/acme-challenge/anotherrandomthinghere

一旦您确认已设置密钥,ACME 服务器就会测试该站点的该密钥。 如果秘密匹配,LetsEncrypt 将提供证书。 然后应该将证书移动或符号链接以促进自动更新,到正确的位置。

独立验证

独立验证会自动响应挑战,从而允许一些自动化行为。 这种方法的缺点是必须暂时停止 Web 服务器,以便 LetsEncrypt 可以使用自己的 HTTP 服务器侦听并响应质询。

请求独立配置的 IP 必须与请求的域的 A 记录匹配,因此必须在目标 Web 服务器上运行。

$ letsencrypt --text --renew-by-default --email [email protected] 
--domains www.example.com,example.com,foo.example.com 
--agree-tos --standalone --standalone-supported-challenges http-01 certonly

用户不需要交互。 如果系统上尚未使用端口 80 或 443,或者可以容忍短暂的停机时间,这将允许自动化。 为了 example,这可能是自动化管理系统中的初始配置步骤,例如 Ansible 在主 Web 服务器实际启动之前。

获得证书后,必须将服务器配置为以某种方式使用它。

网络根验证

这种验证方法是一个很好的中间立场。 如果现有的 Web 服务器正在运行,LetsEncrypt 可以引用 HTML 文档根,客户端将自动创建对 ACME 质询的响应。 此方法还必须在与域的 A 记录匹配的同一系统上运行。

$ letsencrypt --text --renew-by-default --email [email protected] 
--domains www.example.com,example.com,foo.example.com 
--agree-tos --webroot --webroot-path /var/www/html certonly

使用 LetsEncrypt 证书

选择的验证完成后,/etc/letsencrypt 将填充与为域选择的方法相匹配的配置,以及使用的密钥、证书和签名请求。

可以将文件复制到适当的位置以供 Web 服务器使用。 一个更好的想法是符号链接它们,因此在未来,续订会在没有其他配置的情况下获取新文件。

一个 example 对于 mod_ssl 配置如下:

$ ln -s /etc/letsencrypt/live/www.example.com/cert.pem /etc/pki/tls/certs/www.example.com.crt
$ ln -s /etc/letsencrypt/live/www.example.com/chain.pem /etc/pki/tls/certs/www.example.com.chain.crt
$ ln -s /etc/letsencrypt/live/www.example.com/privkey.pem /etc/pki/tls/private/www.example.com.key
$ cp /etc/httpd/conf.d/ssl.conf{,.backup}
$ sed -i 's@(SSLCertificateFile) .*@1 /etc/pki/tls/certs/www.example.com.crt@' /etc/httpd/conf.d/ssl.conf
$ sed -i 's@(SSLCertificateKeyFile) .*@1 /etc/pki/tls/private/www.example.com.key@' /etc/httpd/conf.d/ssl.conf
$ sed -i 's@#(SSLCertificateChainFile) .*@1 /etc/pki/tls/certs/www.example.com.chain.crt@' /etc/httpd/conf.d/ssl.conf

重新启动 Web 服务器后,它应该使用新证书。

默认位置的证书将获得 etc_t 类型的 selinux 上下文。 这可以被 httpd 和 nginx 读取,所以他们可以从这个配置开始。 然而,直到基本 selinux 政策 包括 Let’s Encrypt 证书,明智的做法是手动标记它们以防止被利用。

$ semanage fcontext -a -t cert_t '/etc/letsencrypt/(archive|live)(/.*)?'
$ restorecon -Rv /etc/letsencrypt

更新证书

这些证书的生命周期仅为 90 天,以减轻可能最终存在的任何流氓证书的影响。 甚至有讨论在未来降低这一点。 用户的期望是创建一个每 30 到 60 天运行一次的自动化作业,以获取有效期为 90 天的新证书。

请求新证书所需要做的就是再次运行letsencrypt 命令,并进行某种性质的新验证,然后将生成新的密钥和证书。

live 目录中的文件实际上是指向 /etc/letsencrypt/archive 中当前版本的符号链接。 这使您可以检查更改历史记录并在需要时回滚。

$ ls -1 /etc/letsencrypt/archive/www.example.com
 cert1.pem
 cert2.pem
 chain1.pem
 chain2.pem
 fullchain1.pem
 fullchain2.pem
 privkey1.pem
 privkey2.pem
$ ls -lGg /etc/letsencrypt/live/www.example.com
 lrwxrwxrwx. 1 41 Dec 2 23:19 cert.pem -> ../../archive/www.example.com/cert2.pem
 lrwxrwxrwx. 1 42 Dec 2 23:19 chain.pem -> ../../archive/www.example.com/chain2.pem
 lrwxrwxrwx. 1 46 Dec 2 23:19 fullchain.pem -> ../../archive/www.example.com/fullchain2.pem
 lrwxrwxrwx. 1 44 Dec 2 23:19 privkey.pem -> ../../archive/www.example.com/privkey2.pem

要使用新文件,只需重新加载 Web 服务器。 如果您使用不需要交互的方法,例如 webroot,则可以通过 cron 或 systemd 计时器轻松实现自动化。

一个 example 有一个计时器将是:

# cd /etc/systemd/system
# cat > www-example-com-renewal.service <<EOF
[Unit]
Description=Automatically renew the www.example.com certificate

[Service]
Type=oneshot
ExecStart=/usr/bin/letsencrypt -d www.example.com --renew-by-default -m [email protected] --agree-tos -t --webroot -w /var/www/html certonly
ExecStart=/usr/sbin/systemctl reload httpd
EOF

# cat > www-example-com-renewal.timer <<EOF
[Unit]
Description=Trigger an automatic renewal every month

[Timer] 
OnCalendar=monthly
Persistent=true

[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload

吊销证书

有时事情会出错,并且会泄露私钥。 如果发生这种情况,重要的是吊销证书,这样任何人都无法冒充 Web 服务器。 请注意,证书在续订期间不会被吊销,以便重新启动服务或分发文件。

要撤消,请使用具有撤消选项的相同客户端:

$ letsencrypt revoke --cert-path /etc/letsencrypt/archive/www.example.com/cert1.pem

如果执行撤销时出错,则会显示。 否则,就是这样!

最后的话

LetsEncrypt 平台刚刚进入 打开 beta 阶段 最近并仍在大力发展。 重要的是检查 上游文档 保持最新的预期行为,看看是否有任何选项发生了变化。 请注意,上游描述的一些命令和项目不在 Fedora,例如自动更新版本和 Apache 配置插件。

如果在使用过程中遇到任何问题 Fedora-打包版本,请报告给 布吉拉 因此可以正确跟踪它们,并确保为将来使用它的人提供良好的体验。