LetsEncrypt 现在可以在 Fedora

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

在 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 平台刚刚进入