https越来越流行了,但免费的证书一般是一年有效期。一般是够用了,但懒人都想一劳永逸,
有个免费证书颁发机构是letsencrypt。它是开源,并且完全免费的,它颁发的证书已经被几乎所有的浏览器所认可。证书90天有效期,支持自动续订。
自己的服务器使用docker进行部署的,基本上有新项目都强迫症般docker化。letsencrypt这肯定支持docker运行的。
本地使用nginx反向代理的,比如我的一个域名https://git.dxgz.work/
修改nginx配置,添加
location ~ /.well-known{ # https证书自动更新 proxy_pass http://127.0.0.1:88; # certon自动更新接口 }
88端口是cerbot的容器的端口,重载配置
sudo /usr/sbin/nginx -s reload # 这个是装在主机的nginx重载命令
docker exec -it nginx.web /usr/sbin/nginx -s reload
# 我是使用docker的,要用这个命令
certbot第一次运行时需要配置域名和邮箱地址,之后使用renew就可以了
docker run -it --rm -p 88:80 --name certbot \ -v "/data/ssl:/etc/letsencrypt" \ certbot/certbot \ certonly --standalone \ --email `你的邮箱地址` \ -d `你的域名地址` -d www.`你的域名地址`
上述命令将域名的ssl证书放在本地 /data/ssl
因为有效期限制,需要配置自动更新,比如这样,放到crontab定时任务中
renew_cert.sh
# 运行docker-更新证书 cd /data/letsencrypt && docker-compose up # reload nginx 配置,加载新证书 #docker exec -it nginx.web /usr/sbin/nginx -t docker exec -it nginx.web /usr/sbin/nginx -s reload
上面的docker-compose.yml内容
version: '3' services: web: image: certbot/certbot container_name: certbot.ssl.web volumes: - /data/ssl:/etc/letsencrypt ports: - "88:80" command: renew
crontab -e 添加一个定时任务,当然了,docker是需要root权限启动的,或者配置了普通用户运行
0 0 * * * /data/letsencrypt/renew_cert.sh > /dev/null 2>&1
每天凌晨0点运行
得到证书后,配置nginx,请参考我的另一博客
以上