因为通配符域名需要dns验证(涉及到域名服务商的API接口),而单域名证书只需要文件验证(直接在网站根目录写文件即可)。
用到的工具是certbot,这个工具目前不支持dns域名服务商api接口。
本文只介绍单域名SSL证书的自动化申请和部署操作。
1,首先安装Certbot工具
yum install -y certbot
2,命令行调用生成SSL证书
certbot certonly --webroot -w [Web站点目录] -d [申请SSL证书的域名] -m [你的email地址] --agree-tos
例如:
certbot certonly --webroot -w /var/www/htdoc -d demo.rickw.cn -m service@rickw.cn --agree-tos
例如:
certbot certonly --webroot -w /var/www/htdoc -d demo.rickw.cn -m service@rickw.cn --agree-tos
网站根目录,主要是工具会要在里面也验证文件。
网站根目录必须设置中正确,否则无法通过文件验证。
申请成功后,证书会保存在 /etc/letsencrypt/live/[申请SSL证书的域名]/ 下面.
3,配置Nginx开启SSL证书支持
server {
listen 443 ssl;
server_name demo.rickw.cn;
ssl_certificate /etc/letsencrypt/live/demo.rickw.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/demo.rickw.cn/privkey.pem;
listen 443 ssl;
server_name demo.rickw.cn;
ssl_certificate /etc/letsencrypt/live/demo.rickw.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/demo.rickw.cn/privkey.pem;
以上设置主要是重点指出了SSL证书文件路径的设置,更详细的设置以及http访问自动跳转到https的设置,请参考之前的文章。
开启SSL证书,nginx配置http跳转https以及CodeIgniter 4系统配置注意事项
4,重新加载Nginx配置
运行以下命令重新加载Nginx配置,使其生效:
nginx -s reload
5,自动续期证书
Let's Encrypt的SSL证书有效期为90天。可以设置一个定时任务来运行Certbot命令自动续期证书。命令如下:
//更新证书
certbot renew --dry-run
//如果不需要返回的信息,可以用静默方式
certbot renew --quiet
certbot renew --dry-run
//如果不需要返回的信息,可以用静默方式
certbot renew --quiet
运行以下命令添加一个定时任务:
sudo crontab -e
此时会进入 vi 的编辑界面。在末尾添加如下一行内容,表示每月 1 号凌晨 2 点会执行一次更新,并重启 nginx 服务器:
00 02 01 * * /bin/certbot renew --quiet && /bin/systemctl restart nginx
保存后退出,执行 crontab -l 命令可以查看 crontab 服务是否创建成功。如果看到下面的内容:
00 02 01 * * /bin/certbot renew --quiet && /bin/systemctl restart nginx
这样就算设置完成了。