公司的网站证书已经到期,阿里的公告说明随着上游厂商的要求,免费一年的ssl不再有,只有三个月的免费,到期之后需要付费使用
这是从来没有过的情况,因为这个证书网站我已经用了很多年了,我看了一下说明,原来是要割韭菜了,我本想着用了这么多年免费的,交个钱也行,一看会员费,我的乖乖,瞬间吓退了。身为程序员的我还没被这个困住,于是开始鼓捣 Let's Encrypt。
获取免费证书
安装Certbot客户端
yum install certbot
获取证书
certbot certonly --webroot -w /www/wwwroot/test-lbb-mall.yufanggao.com -d test-lbb-mall.yufanggao.com
这个命令会为 test-lbb-mall.yufanggao.com 域名生成一个证书,使用 --webroot 模式会在 /www/wwwroot/test-lbb-mall.yufanggao.com 中创建 .well-known 文件夹,这个文件夹里面包含了一些验证文件,certbot 会通过访问 test-lbb-mall.yufanggao.com/.well-known/acme-challenge 来验证你的域名是否绑定的这个服务器。
enter 'c' to cancel 这个后面需要填写邮箱(需要邮箱来注册,不然会报错)
之后一路输入Y,同意就可以了
Account registered.
Requesting a certificate for test-lbb-mall.yufanggao.com
Performing the following challenges:
http-01 challenge for test-lbb-mall.yufanggao.com
Using the webroot path /www/wwwroot/test-lbb-mall.yufanggao.com for all unmatched domains.
Waiting for verification...
Challenge failed for domain test-lbb-mall.yufanggao.com
http-01 challenge for test-lbb-mall.yufanggao.com
Cleaning up challenges
Some challenges have failed.
如果出现以上的报错,需要检查1.网站是否开启 2.网站目录和运行目录是否跟命令中的地址是一致的 命令中是test-lbb-mall.yufanggao.com 如果你的网站目录指向也必须是test-lbb-mall.yufanggao.com
指向正确之后 重新运行
certbot certonly --webroot -w /www/wwwroot/test-lbb-mall.yufanggao.com -d test-lbb-mall.yufanggao.com
这时候显示的结果就会为正常
这个时候会看到生成两个文件路径 一个是privkey.pem 跟 fullchain.pem这个就是ssl证书
跟着我们需要在网站配置中进行配置
你可以直接在nginx或者apa的网站配置中的ssl里面把以前ssl的路径替换成现在的路径
你也可以登录服务器到指定的路径,把证书下载下来部署到宝塔
Nginx配置HTTPS
server { server_name test-lbb-mall.yufanggao.com listen 443; ssl on; ssl_certificate /etc/letsencrypt/live/test-lbb-mall.yufanggao.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/test-lbb-mall.yufanggao.com/privkey.pem; location / { proxy_pass http://127.0.0.1:3999; proxy_http_version 1.1; proxy_set_header X_FORWARDED_PROTO https; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; } }
更新证书
证书生成后只有90天的有效期,到期后需要执行命令 certbot renew 自动更新系统内的证书。
certbot renew
自动更新脚本
#!/bin/bash # 证书文件(有多少个证书就写多少个数组变量并指向证书文件) certificate[0]="/etc/letsencrypt/live/test-lbb-mall.yufanggao.com/fullchain.pem" #certificate[1]="/etc/letsencrypt/live/test-lbb-mall.yufanggao.com/fullchain.pem" upssl=0; sloop=${#certificate[@]} let sloop-=1; for k in $( seq 0 $sloop ) do ./ssl-cert-check -c ${certificate[$k]} -x 30 -n -q if [ $? == 1 ] then upssl=1; else echo "INFO: CertiFicate Newest" exit 0 fi done if [ $upssl == 1 ]; then /usr/bin/certbot renew if [ $? == 0 ] then echo "INFO: UPdate CertiFicate OK !" exit 0 else echo "Error: UPdate CertiFicate Fail" exit 1 fi fi