为什么要使用WebRoot插件获取加密TLS证书的原因

对于不了解“让我们加密”的用户,它是一个免费的,自动化的(在某种程度上)开放的证书颁发机构,可颁发域验证的TLS证书。 如果您以前从未听说过,请访问Wikipedia以获取更多信息。 本文说明了您为什么应该以及如何使用webroot插件从Let’s Encrypt获取和更新TLS证书。

如何安装让我们加密客户端

首先,使用以下命令在Linux服务器上安装Let’s Encrypt客户端(重命名为certbot)。 它几乎可以在所有服务器Linux发行版上使用。

下载 certbot-auto 从EFF网站。

wget https://dl.eff.org/certbot-auto

授予执行权限。

chmod a+x certbot-auto

将其移至用户的PATH,例如 /usr/local/bin/ 并将其重命名为 certbot

sudo mv certbot-auto /usr/local/bin/certbot

所以现在我们可以使用 certbot 命令。 证书机器人

外挂程式

让我们的加密客户端为不同的Web服务器提供3个插件。

  • apache插件
  • webroot插件
  • 独立插件

让我们使用apache插件加密支持Apache Web服务器的自动配置。 因此,您只需要输入一行命令,重新加载网页,然后切换到HTTPS。

Webroot插件是为其他Web服务器提供的。 使用此插件时,Let’s Encrypt CA服务器会请求“ Let’s Encrypt”客户端将一些文件放在 /web-root-path/.well-known/acme-challenge 证明对域名的控制。

当服务器上没有网络服务器运行时,将使用独立插件。 它启动一个独立的Web服务器与Let’s Encrypt对话。

您应该使用哪个插件?

一个问题 独立的 网络服务器是 您需要停止运行的Web服务器(Apache,Nginx或其他服务器)以释放端口80和443。 获取和更新证书时会导致停机。

Apache和独立插件的问题是它们不支持CDN背后的网站 (内容交付网络)。 使用apache或独立插件时,需要让我们加密客户端配置域名下A / AAAA记录所引用的TLS服务器,以利用服务器名称指示扩展名来响应特定的连接尝试。

如果您的网站位于CDN后面,则需要让我们加密客户端在CDN提供程序的边缘服务器而不是原始服务器上配置TLS服务器。 因此,它必然会失败。 您可以暂时禁用CDN,但是这样做会将服务器的IP暴露给外界。 此外,您的TLS证书无法自动更新。

Webroot插件是最好的,因为您不需要停止正在运行的Web服务器,并且当您的站点位于CDN后面时,它将起作用。 原因是它通过在Web根目录中放置唯一文件而不是配置TLS服务器来证明对域名的控制。 使用webroot插件,您只需要将Web服务器配置为使用TLS,设置cron作业以自动续订证书,然后您就可以忘记它并完成其他工作。

如果仅使用Apache服务器并且不需要CDN,则可以使用apache插件完全自动化获取和更新过程。 但是,如果您使用其他Web服务器或使用CDN,则最好使用webroot插件来获取和续订证书。

如何使用Webroot插件获取TLS证书?

无论使用哪种Web服务器,都可以始终使用以下命令来获取TLS证书。 假设您的网络根目录是 /var/www/your-domain.com/,运行以下命令获取证书。

sudo certbot certonly --webroot --agree-tos --email your-email address -d your-domain.com -w /var/www/your-domain.com/

说明:

  • 仅证书 告诉certbot仅获取证书,请勿安装。
  • –webroot 选项指定正在使用的webroot插件。
  • –同意 表示同意Let’s Encrypt的服务条款。
  • 电子邮件地址 用于从Let’s Encrypt接收到期通知,还可以用于恢复丢失的密钥。
  • -d 选项指定域名。
  • -w 选项指定Web根路径。

只要您的Web服务器可以将Let’s Encrypt验证服务器定向到正确的Web根,您就可以输入以下多个子域。

-d your-domain.com -d www.your-domain -w /var/www/your-domain

只要您的Web服务器可以将Let’s Encrypt验证服务器定向到正确的Web根,您还可以输入如下所示的多个根域。

-d your-domain.com -w /var/www/your-domain.com -d your-domain.org -d www.your-domain.org -w /var/www/your-domaim.org

所有这些域将在一个证书中列出。 您的证书和私钥将保存在 /etc/letsencrypt/archive/your-domain.com/ 目录。 Certbot还在以下位置创建符号链接 /etc/letsencrypt/live/your-domain.com/ 指向存档目录中的每个文件。

获得证书后,让我们手动安装它。

如何在Apache中安装TLS证书

首先,编辑您的虚拟主机文件。

sudo nano /etc/apache2/sites-available/your-domain.com.conf

在上面添加以下行 </VirutalHost>

RewriteEngine on
RewriteCond %{SERVER_NAME} =your-domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

3行告诉Apache始终将访问者重定向到您网站的HTTPS版本。 保存并关闭文件。 然后为您的站点的HTTPS版本创建一个虚拟主机文件。

sudo nano /etc/apache2/sites-available/your-domain.com-https.conf

将以下行放入文件中。

<IfModule mod_ssl.c>
<VirtualHost *:443>

   ServerAdmin [email protected]
   DocumentRoot /var/www/your-domain/
   ServerName your-domain.com

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLCertificateFile /etc/letsencrypt/live/your-domain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/your-domain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>

</IfModule>

保存并关闭文件。 然后启用站点的HTTPS版本。

sudo a2ensite your-domain.com-https.conf

并重新加载Apache。

sudo systemctl reload apache2

现在,在浏览器中访问您的网站,您会看到一个绿色的锁。

如何在Nginx中安装TLS证书

打开您的Nginx服务器阻止文件。

sudo nano /etc/nginx/confi.d/your-domain.com.conf

如下编辑文件。

server {
        listen 80;
        server_name your-domain.com;
        return 301 https:$server_name$request_uri;
}

server {
        listen 443 ssl;
        server_name your-domain.com;

        root /var/www/your-domain/;
        
        ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;
        ssl_protocols TLSv1.1 TLSv1.2;

        ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
        ssl_prefer_server_ciphers on;

        # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
        add_header Strict-Transport-Security max-age=15768000;

 ...
    Your custom directives goes here. 
 ...
}

保存并关闭文件。 然后测试Nginx配置并重新加载。

sudo nginx -t

sudo systemctl reload nginx

如果您使用的是Nginx 1.9.5及更高版本,则可以添加 http2 指令后 listen 443 ssl 如下所示以启用HTTP / 2协议,该协议可以显着加快Web服务器与客户端的Web浏览器之间的通信。

listen 443 ssl http2;

电子邮件服务器呢?

电子邮件服务器本身无法与“让我们加密”验证服务器对话。 我们仍然可以使用webroot插件来获取电子邮件服务器的证书。 您需要做的就是为您的电子邮件服务器的FQDN(完全限定域名)创建一个Apache虚拟主机或Nginx服务器块。

因此,如果您的电子邮件服务器的FQDN为 mail.your-domain.com,则Apache虚拟主机文件中的ServerName应该为 mail.your-domain.com。 Nginx服务器块文件中的server_name应该是 mail.your-domain.com。 确保您创建了Web根目录并设置了Web服务器用户(www-data)作为所有者。

完成后,使用certbot命令和webroot插件获取TLS证书。 有关如何在Postfix SMTP服务器和Dovecot IMAP服务器中安装TLS证书的信息,请查看以下教程。

  • 构建自己的电子邮件服务器第4部分:Postfix,Dovecot和TLS加密

如何更新通过Webroot插件获得的TLS证书?

让我们加密发行的TLS证书在90天后过期。 要续订证书,只需运行:

sudo certbot renew

renew子命令检查自证书颁发之日起是否已经过60天。 如果没有,它将告诉您不需要续订。 如果您的证书将在30天后过期,那么它将读取存储在以下位置的续订配置文件 /etc/letencrypt/renewal/your-domain.conf 并更新您的证书。 续订配置文件告诉certbot首次获取证书时使用了哪个插件以及使用了哪些参数。

因此,上述续订命令实际上与以下命令相同:

sudo certbot certonly --webroot --agree-tos --email your-email address -d your-domain.com -w /var/www/your-domain.com/

您可以通过以下方式强制续订证书 --force-renewal 选项。 而且,您可能需要重新加载Web服务器才能向客户端出示新证书。

sudo systemctl reload apache2

要么

sudo systemctl reload nginx

自动续订证书

要自动续订证书,您只需通过以下方式之一编辑root用户的crontab文件。

su -

crontab -e

要么

sudo crontab -e

并将以下行放在文件末尾。

@daily certbot renew --quiet

保存并关闭文件。 续订命令每天执行一次。 --quiet 使所有输出静音(错误除外)。 不必担心续订失败,certbot会每天尝试更新。

即使每次自动续订都失败,一旦证书将在不到20天后过期,您也会在电子邮件地址中从Let’s Encrypt获得过期通知。 (此数字可能会有所不同,但是您将在到期之前得到通知。)然后,您可以手动输入续订命令,找出自动续订过程中的问题,修复错误并续订证书。

您可能还需要重新加载Web服务器,因此您的cron作业将是:

@daily certbot renew --quiet && systemctl reload apache2

要么

@daily certbot renew --quiet && systemctl reload nginx

您还可以添加一个 MAILTO cron文件顶部的行将错误发送到您的电子邮件地址。 没有错误表示所有证书已成功续订。

[email protected]

如果我使用Apache或独立插件来获取证书怎么办?

无论使用哪种插件来获取证书,您都可以始终使用如下所示的webroot插件来更新证书。

sudo certbot certonly --webroot --agree-tos --email your-email address -d your-domain.com -w /var/www/your-domain.com/

更新配置文件将被更改以反映您这次使用webroot的事实。 下次您可以输入 sudo certbot renew 更新您的证书。

如何知道获得证书时使用了什么插件?

如果您不记得自己使用了哪个插件,那么有一种简单的方法。 首先,切换到root用户。

su -

然后打开您的续订配置文件。

nano /etc/letsencrypt/renewal/your-domain.com.conf

找到以authenticator开头的行。

authenticator = standalone

这行意味着您使用了独立插件来获取证书。

authenticator = apache

此行表示您使用apache插件来获取证书。

authenticator = webroot

这行表示您使用了webroot插件来获取证书。

而已!

与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻通讯。 您也可以在Google +,Twitter或喜欢我们的Facebook页面上关注我们。

Sidebar