参考官网教程网址 (https://certbot.eff.org/instructions?ws=other&os=ubuntubionic)
letsencrypt + centsos7.9 + docker + express 搭建https环境
sudo yum install epel-release
sudo yum install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install core
sudo snap refresh core
sudo yum remove certbot
sudo snap install --classic certbot
使用软链接
sudo ln -s /snap/bin/certbot /usr/bin/certbot
交互式:
sudo certbot certonly --webroot
或者
sudo certbot certonly --webroot -w 静态文件目录 -d 域名
静态文件目录 也就是 前端打包生成dist文件后放在后端服务的目录, 确保能够通过80端口访问这个目录, letsencrypt 会在里面新建一个写了特定字符串的文件,比对外网访问结果,来验证域名是否是属于你的
express是 /public
生成证书key:
Certificate is saved at: /etc/letsencrypt/live/域名/fullchain.pem
Key is saved at: /etc/letsencrypt/live/域名/privkey.pem
const express = require('express')
const http = require('http')
const https = require('https')
const fs = require('fs')
const app = express()
app.get('/ping', (req, res) => {
console.log('[long] get !!: ', req.protocol)
res.send('pong')
})
app.get('/', (req, res) => {
console.log('[long] get !!: ', req.protocol)
res.send('test !')
})
const key = fs.readFileSync('./cert/privkey.pem', 'utf8')
const cert = fs.readFileSync('./cert/fullchain.pem', 'utf8')
const options = {key, cert}
http.createServer(app).listen(88, () => {
console.log('\n\n\n started !')
})
https.createServer(options, app).listen(446, () => {
console.log('https started !')
})
有效期为90天,官方已经自带更新功能
sudo certbot renew --dry-run
运行后显示没有错误即可
确认你的网站已经支持https,访问后网址左边有个小锁的图标
证书管理(参考 https://eff-certbot.readthedocs.io/en/stable/using.html#where-certs )
所有生成的密钥和颁发的证书都可以在 /etc/letsencrypt/live/$domain中找到
执行
sudo chmod 0755 /etc/letsencrypt/{live,archive}
privkey.pem 证书的私钥需要永远保密
先更新证书:
sudo certbot certonly --webroot -w /data/overseaFileServerData/app/node/ssl/ -d xx.com
编写shell更新脚本,设置服务器启停
echo '执行renewCert.sh 脚本'
sudo cp -f /etc/letsencrypt/live/xx.com/fullchain.pem /data/xx/app/node/cert/fullchain.pem
sudo cp -f /etc/letsencrypt/live/xx.com/privkey.pem /data/xx/app/node/cert/privkey.pem
cd /home/centos/xx/deploy/docker
sudo docker-compose restart
renewCert.sh 文件到~/snap/目录,renewCert.sh为更新成功后执行的脚本sudo sh -c 'printf "#!/bin/sh\nsh /home/huangshuxin/snap/renewCert.sh\n" > /etc/letsencrypt/renewal-hooks/deploy/afterRenew.sh'
sudo chmod 755 /etc/letsencrypt/renewal-hooks/deploy/afterRenew.sh
如果你想手动更新https证书:
sudo certbot renew --force-renewal --deploy-hook "sh /home/huangshuxin/snap/renewCert.sh"