原理:
使用let's encrypt 的生成免费证书。certbot 封装了let's encrypt 免费证书的认证和过期重新刷新的过程。所以只需要安装certbot 生成证书,配置好nginx 就可以开启。
过程:
1、安装snapd
A、介绍:Snap是Ubuntu 16.04 LTS发布时引入的新应用格式包。目前已流行在Ubuntu且在其他如Debian、Arch Linux、Fedora、Kaili Linux、openSUSE、Red Hat等Linux发行版上通过snapd来安装使用snap应用
B、安装命令(centos 为例)
$ sudo yum install snapd
#Once installed, the systemd unit that manages the main snap communication socket needs to be enabled:
$ sudo systemctl enable --now snapd.socket
#To enable classic snap support, enter the following to create a symbolic link between /var/lib/snapd/snap and /snap:
$ sudo ln -s /var/lib/snapd/snap /snap
notice :可以在https://snapcraft.io/docs/installing-snapd 查看其他系统安装命令
2、安装 certbot (需要输入邮箱和域名信息,centos 为例,其他系统或web容器 可在https://certbot.eff.org/lets-encrypt/centosrhel8-nginx查看)
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot certonly --nginx
notice: 以上命令可能会提示 /etc/nginx 下找不到相应文件夹,certbot 获取证书的同时会修改nginx的配置文件,找不到该文件所以才会报错。因为我的Nginx并没有安装在/etc目录下,而是在/usr/bin/nginx。各人情况可能不太一样,可以通过命令查看你的nginx目录(我的nginx配置文件在/usr/local/nginx/conf/下名为nginx.conf):
此时可以通过文件目录连接处理:
$ ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
$ ln -s /usr/local/nginx/conf/ /etc/nginx
然后再:
sudo certbot --nginx certonly
安装好后可以测试下证书刷新
sudo certbot renew --dry-run
3、配置nginx( nginx 需要添加了ssl模块 不然请重新编译 ),添加如下配置:
listen [::]:80 default_server ipv6only=on;
server_name localhost;
location /nginx_status
{
......
}
access_log /home/wwwlogs/access.log;
listen 443 ssl http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/yy123.ink/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yy123.ink/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
重启nginx
service nginx restart
notice 阿里云443 端口默认是关闭的,需要在 我的服务器->安全组->配置规则中添加 ,可在在线检测工具http://coolaf.com/tool/port检测端口是否打开
4、配置cron 定时任务 定时更新证书 防止证书过期
crontab -e
添加:
0 0 1 * * /usr/bin/certbot renew --force-renewal #每月1号凌晨强制更新Let's Encrypt证书
5 0 1 * * /usr/sbin/service nginx restart #每月1号凌晨更新证书后重启nginx