使用Let\'s Encrypt(certbot)安装免费SSL证书

学习笔记 02/01 网络安全, SSL

Let\'s Encrypt提供了新的工具叫 Certbot,和Let\'s Encrypt一样,生成证书方式一样,但是配置更简单,自动发行证书,证书有效期90天。

环境

  • CentOS7.8(CentOS Linux release 7.8.2003 (Core))

  • Nginx(nginx version: nginx/1.18.0)

使用Let\'s Encrypt生成SSL证书

先执行:

yum install epel-release

安装:

cd /root/
wget https://dl.eff.org/certbot-auto --no-check-certificate
chmod +x ./certbot-auto
./certbot-auto -n

./certbot-auto -n只是用来安装依赖包的,也可以跳过直接到下面的生成证书的步骤。

生成证书:

./certbot-auto certonly --email youemail@xx.com --agree-tos --no-eff-email --webroot -w /data/web/stayed.cn -d www.stayed.cn

以上命令为域名www.stayed.cn生成一个SSL证书,你可以把域名换成你自己需要SSL证书的域名。

如果提示如下则生成成功:

\"\"/

生成的证书在这个目录下:/etc/letsencrypt/live/www.stayed.cn

可以看出,生成的证书有效期至2021-01-09,也就是从现在算起90天后到期,如果要续期可以使用命令: cerbot-auto renew,本文后面会介绍如何自动续期。

使用工具Certbot生成SSL证书

如果上面使用Let\'s Encrypt生成证书失败,那么可以尝试使用工具Certbot来生成SSL证书。

certbot certonly --webroot -w /data/web/stayed.cn -d www.stayed.cn

将域名换成你自己需要SSL证书的域名即可。证书生成成功同样会有和上面Let\'s Encrypt一样的提示信息。

Nginx配置

为站点配置https,修改nginx虚拟主机配置文件,将http地址通过301定向跳转到https,新建一个443端口的server配置:

server
    {
        listen 80;
        server_name www.stayed.cn;
        return 301 https://$server_name$request_uri;
}
server
    {
        listen 443 ssl;
        server_name www.stayed.cn;
        index index.html index.htm index.php;
        root  /data/web/www.stayed.cn;

        ssl_certificate /etc/letsencrypt/live/www.stayed.cn/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.stayed.cn/privkey.pem;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;

        ### ...other settings...
    }

将上面的域名换成你自己的域名,然后记得重新加载nginx配置生效:

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

自动续期

证书90天有效期到期后,可以手动执行更新命令,当然我们使用crontab定时任务来自动更新续期。

如果使用的是Let\'s Encrypt生成的证书,则 crontab -e添加一行:

0 3 */30 * * /root/certbot-auto renew --disable-hook-validation --renew-hook "/usr/local/nginx/sbin/nginx -s reload"  >> /var/log/cerbot-renew.log

如果使用的是Certbot工具生成的证书,则 crontab -e添加一行:

0 3 */30 * * /usr/bin/certbot renew  >> /var/log/cerbot-renew.log

以上命令表示,每隔30天重新续期SSL证书。

注意

如果你的站点域名已经在跑https了,那么在不影响现有的业务情况下,配置Nginx证书验证目录,让它指向Nginx的默认站点目录, 在配置文件的 server模块下添加:

location ^~ /.well-known/acme-challenge/ {
   default_type "text/plain";
   root     /usr/share/nginx/html;
}

因为CertBot在验证服务器域名的时候,会生成一个随机文件,然后CertBot的服务器会通过HTTP访问你的这个文件,因此要确保你的Nginx配置好,以便可以访问到这个文件。但是验证还是在http环境下完成的。

本文地址:https://www.stayed.cn/item/26696

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。