Ubuntu 16.04上使用 Let's Encrypt 来保护Nginx
介绍
Let’s Encrypt 是由 Internet Security Research Group(ISRG)开发的免费开放证书颁发机构。 今天几乎所有浏览器都信任 Let’s Encrypt 颁发的证书。
在本教程中,我们将提供有关如何使用 Ubuntu 16.04 上的 certbot 工具使用 Let’s Encrypt 来保护您的 Nginx 的分步说明。
准备条件
在继续本教程之前,请确保您已满足以下先决条件:
- 您有一个指向公共服务器 IP 的域名。 在本教程中,我们将使用 example.com。
- 您按照这些说明安装了 Nginx 。
- 您有一个适用于您的域的服务器块。 您可以按照本文获取有关如何创建一个的详细信息。
安装 Certbot
Certbot 是一个功能齐全且易于使用的工具,可以自动完成获取和更新 Let’s Encrypt SSL证书以及配置Web服务器以使用它们的任务。 certbot 包包含在默认的 Ubuntu 存储库中。
更新软件包列表并安装 certbot 软件包:
sudo apt update
sudo apt install certbot
Certbot验证方式
- cerbot验证方式有下面几种:apache,nginx,webroot,standalone,dns plugins,manual
- apache,nginx申请的证书只用自身服务的,我们选择通常生产有Standanlone 、Webroot,Manual,DNS Plugins
- Standalone 方式: certbot 会自己运行一个 web server 来进行验证,暂时占用服务器的 80 或者 443 端口。如果我们自己的服务器上已经有 web server 正在运行 (比如 Nginx 或 Apache ),用 standalone 方式的话需要先关掉它,以免冲突。
- Webroot 方式: certbot 会利用既有的 web server,在其 web root目录下创建隐藏文件, Let’s Encrypt 服务端会通过域名来访问这些隐藏文件,以确认你的确拥有对应域名的控制权。
- Manual:表示手动交互模式,Certbot 有很多插件,不同的插件都可以申请证书,用户可以根据需要自行选择
- DNS Plugins:使用各类型的DNS插件证明这个域名是属于你的,自动验证方式创建泛域名证书,不是所有的域名都能用自动验证方式创建证书,需要查看官方支持域名供应商,如阿里云是没有提供API来自动验证
获取证书
这里选择standalone方式
注意:certbot 默认使用http方式对域名所有权进行验证,该操作需要绑定vps的80端口。如果80端口已被占用,请先停止占用的进程,例如停止Nginx:systemctl stop nginx
阿里云、腾讯云等购买的服务器,还需要在vps网页后台的安全组中放行80端口。
如果有其他二级域名,继续添加-d参数即可。
1 | root@vultr:~# certbot certonly --standalone -d example.com -d www.example.com ... |
如果域名记录未指向服务器的IP,会报错并提示域名解析问题。
配置证书
各个web服务器的配置不一样,本文提供Nginx的配置例子
1 | server { |
配置分为两个server段,第一段是所有http请求都导向https;第二段以ssl开头的配置都和证书相关:设置证书和私钥的位置、证书采用的协议、证书的加密算法等信息。
为了增强安全性,ssl_protocols、ssl_ciphers和ssl_prefer_server_ciphers的配置建议采用以上配置。
配置好以后,运行nginx -t命令查看有无错误。配置正确的话用systemctl restart nginx 重新启动nginx。
https使用443端口,如果开启了防火墙,记得放行https服务:
1 | firewall-cmd --permanent --add-service=https |
证书自动更新
Let’s Encrypt证书的有效期是三个月,超过期限则需要续签。证书续期可以手动完成,例如:
1 | systemctl stop nginx |
也可以配置crontab任务自动续签,在/etc/crontab文件末添加一行:
0 0 1 */2 0 root systemctl stop nginx; /usr/local/bin/certbot renew; systemctl restart nginx
ubuntu默认安装的certbot路径是/usr/bin/certbot,可使用 which certbot 查看,如果输出不同,请记得替换。该配置将每两个月自动运行certbot并续签证书。如果你的证书快到期了还没有续签,贴心的EFF(电子前哨基金会)会发邮件提醒,记得到期前续签就行。