在Ubuntu 16.04上,设置Nginx使用Let\'s Encrypt加密

・7 分钟阅读

Let's Encrypt是一个证书颁发机构(CA ),它提供带有自动客户端的免费SSL证书,通过使用Let's Encrypt SSL证书,你可以加密你的网站和访问者之间的流量。整个过程很简单,可以自动更新,另外请注意,证书的安装或更新不会导致任何停机。

在本教程中我们将使用Certbot获取、安装和自动续订你的SSL证书,Certbot由Electronic Frontier Foundation(EFF)开发,它是Let's Encrypt的推荐客户端。

前提条件

  • 运行Ubuntu 16.04的实例
  • 指向服务器的已注册域名
  • Nginx

安装Certbot

要获得Let's Encrypt SSL证书,你必须在服务器上安装Certbot客户端。

添加库,当提示接受时按ENTER键。


add-apt-repository ppa:certbot/certbot

更新软件包列表。

 
apt-get update

 

继续安装Certbot和Certbot的nginx包


apt-get -y install python-certbot-nginx

配置Nginx

Certbot会自动为Nginx配置SSL,但是,为此需要在Nginx配置文件中找到服务器块。它通过将配置文件中的server_name指令与请求证书的域名匹配来执行此操作。

如果使用默认配置文件/etc/nginx/sites-available/default,则使用文本编辑器打开它,如nano,并且查找server_name指令,用您自己的域名替换下划线_:


nano /etc/nginx/sites-available/default

编辑配置文件后,server_name指令应该如下所示。 在本例中,我假设你的域是example.com,并且你正在请求example.com和www.example.com.的证书,


server_name example.com www.example.com;

继续验证编辑的语法。

 
nginx -t

 

如果语法正确,请重新启动Nginx以便使用新配置,如果收到错误消息,请重新打开配置文件,并且检查是否存在错误,然后重试。


systemctl restart nginx

获取Let's Encrypt SSL证书

下面的命令为你获取证书,编辑Nginx配置以便使用它,然后重新加载Nginx 。


certbot --nginx -d example.com -d www.example.com

你还可以为其他域请求SSL证书,只要将"-d"选项添加到你喜欢的次数即可。


certbot --nginx -d example.com -d www.example.com -d example.net -d example.net

如果你只想从let's Encrypt获得证书而不自动安装证书,你可以使用以下命令,这将临时更改Nginx配置以获取证书,并在证书下载后,恢复它们。


certbot --nginx certonly -d example.com -d www.example.com

如果你是第一次运行Certbot系统会提示你输入电子邮件地址,并且同意服务条款,此E-mail地址会用于更新和安全通知,一旦你提供了电子邮件地址,certbot将从Let's Encrypt请求证书,并且运行质询以验证你是否控制了相关域。

如果Certbot可以获得SSL证书,它将询问你希望如何配置HTTPS设置。通常应该启用此选项,因为它确保访问者只访问你网站的SSL-protected版本,选择您的选择,然后按ENTER键。


Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

最后certbot会确认进程是否成功以及证书存储在哪里,你的证书现在已下载并安装。

自动续订

因为Let's Encrypt是一个免费的证书颁发机构,并且为了鼓励用户自动执行续订,证书的有效期只有90天,Certbot将自动更新证书,它通过systemd每天运行两次certbot renew。

你可以通过运行此命令来检查自动续订是否正常。


certbot renew --dry-run

你也可以通过运行以下命令随时手动续订证书。

 
certbot renew

 

增强配置

上面的命令获取,并且安装SSL证书,它配置适合大多数情况。如果要为网站实现高级安全措施,可以使用以下命令获取证书。


certbot --nginx --rsa-key-size 4096 --must-staple -d example.com -d www.example.com

--rsa-key-size 4096使用4096位RSA key而不是2048位key,这会更安全,这样做的缺点是较大的密钥会导致轻微的性能开销。此外,旧的浏览器和设备可能不支持4096-bit RSA密钥。

--must-staple添加OCSP必须Staple扩展到证书并配置Nginx用于OCSP装订。此扩展允许浏览器验证你的证书还没有被吊销,并且可以信任,但是,并非所有浏览器都支持此功能。

Hrh profile image