惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
J
Java Code Geeks
Jina AI
Jina AI
罗磊的独立博客
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
D
DataBreaches.Net
博客园 - 叶小钗
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google DeepMind News
Google DeepMind News
阮一峰的网络日志
阮一峰的网络日志
B
Blog
V
Visual Studio Blog
雷峰网
雷峰网
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

HaoKunT的博客

如何用 ollama 快速下载 deepseek 模型 - HaoKunT的博客 python使用gdal - HaoKunT的博客 Word中写LaTeX公式 - HaoKunT的博客 g++中的rpath和runpath - HaoKunT的博客 Ext4文件系统 - HaoKunT的博客 文件系统介绍 - HaoKunT的博客 理解shell - HaoKunT的博客 Hyper V安装ENVI - HaoKunT的博客 华为软件实习生笔试 - HaoKunT的博客 用C++实现一个命令行进度条 - HaoKunT的博客 PCA与GWPCA - HaoKunT的博客 字节后台实习生笔试题目 - HaoKunT的博客 Web终端仿真器 - HaoKunT的博客 阿里云API网关与函数计算的基础理解 - HaoKunT的博客 函数计算搭建DNS服务器 - HaoKunT的博客 DNS解析过程 - HaoKunT的博客 Github图片加载不出来 - HaoKunT的博客 将Elementary OS装在U盘中 - HaoKunT的博客 MacOS+Windows 双系统的安装 - HaoKunT的博客 IPXE+netboot+ISCSI 网络启动 - HaoKunT的博客 Esxi+NAS+Openwrt - HaoKunT的博客 Esxi的安装和使用 - HaoKunT的博客 Golang使用海康威视SDK - HaoKunT的博客 Filetools工具 - HaoKunT的博客 学习正则表达式 - HaoKunT的博客 Vugu View - HaoKunT的博客 Django Restframework 嵌套序列化 - HaoKunT的博客 看不了netlify的部署日志 - HaoKunT的博客 Go Modules的使用 - HaoKunT的博客 使用hugo+netlify部署个人主页 - HaoKunT的博客
利用acme自动更新证书 - HaoKunT的博客
HaoKunT · 2019-09-24 · via HaoKunT的博客

本文为原创文章,转载注明出处,欢迎关注网站https://hkvision.cn

acme

Let's Encrypt制定的自动化证书管理协议,通过这个协议我们可以自动更新证书,无需人工干预

acme.sh

github上已经有一个项目,用shell写的脚本,功能很强大,直接用就行了

安装

1
curl https://get.acme.sh | sh

重新载入一下.bashrc

之后你就可以直接用acme.sh命令了,有alise

申请证书

申请的方式有几个,大致的流程是

  • 提出申请
  • Let's Encrypt给你提出挑战(challenge),挑战分别有两种,1.网站根下弄一个文件。2.DNS解析加一条TXT记录。随便验证一条就行了
  • 完成挑战中的一种
  • 签发

整个过程很清晰,主要是验证你对这个网站有操作权。这里我们选择DNS解析,第一种需要你本身有一个http站点,而且最关键的问题是80端口要开,这对于80被封掉的人来说简直就是一个悲剧。DNS验证就没这个问题了。

1
acme.sh --issue --dns dns_ali -d xxx.xxx.com

具体你哪个DNS提供商的具体指令看这里 阿里云的需要你在环境变量里面加key和srcret

export Ali_Key="xxxxxxxxxxxx"
export Ali_secret="xxxxxxxxxxx"

阿里云现在子账号里面支持DNS解析的权限了

成功的话你会看到你的证书,并且提示你成功了,证书文件放在~/.acme.sh目录里面,你之前的配置什么的脚本都放在了配置文件里面,你不用担心下次执行的时候找不到配置

安装证书到nginx

记住不要直接把证书放到nginx的配置下,要用脚本提供的命令,因为这样脚本在证书快过期的时候自动更新才会知道应该放到哪,并做什么操作

1
2
3
4
acme.sh --installcert -d xxx.xxx.com \ 
               --key-file      /home/ubuntu/www/ssl/xxx.xxx.com.key  \ 
               --fullchain-file /home/ubuntu/www/ssl/xxx.xxx.com.key.pem \ 
               --reloadcmd     "sudo service nginx force-reload"

--reloadcmd会让脚本在更新完后执行一个命令,这里就是重新载入配置

修改sudoer

修改一下sudoer

新增一条

ubuntu  ALL=(ALL) NOPASSWD: /usr/sbin/service nginx force-reload

这样在执行sudo service nginx force-reload的时候就不用输密码了

生成DH交换密钥

本人之前配ssl的时候没有这一步,这次在网上发现很多博主说要配这个,网站更加安全。

1
openssl dhparam -out /home/ubuntu/www/ssl/dhparam.pem 2048

这一步大概要花比较长的时间,耐心等待一下,具体原因是这样的

dhparam 算法是在 2^4096 个数字中找出两个质数,所以需要的时间挺长。….. 意思是有可能的质数,+ 是正在测试的质数,* 是已经找到的质数。(引自:Nginx 配置上更安全的 SSL & ECC 证书 & Chacha20 & Certificate Transparency

修改nginx配置

server {
    ssl_certificate /home/ubuntu/www/ssl/xxx.xxx.com.key.pem
    ssl_certificate_key /home/ubuntu/www/ssl/xxx.xxx.com.key
    ssl_dhparam /home/ubuntu/www/ssl/dhparam.pem
}

检查配置后重启

1
2
sudo service nginx configtest
sudo service nginx restart

跑个分

https://ssllabs.com/ssltest/(国外的,不能指定端口)

https://myssl.com/(国内的,可以指定除443以外的端口)

拿到A+就可以了,你还可以看到具体的评测结果

自动更新

这部分在你第一次申请的时候acme.sh就帮你做了,用的是cron定时计划

1
2
$ crontab -l
0 0 * * * "/home/ubuntu/.acme.sh"/acme.sh --cron --home "/home/ubuntu/.acme.sh" > /dev/null

你可以尝试手动执行一下,在没过期的时候会跳过,你可以指定--force参数来强制更新

没问题的话就代表万事大吉了,恭喜你不用管证书的更新问题了

后记

你可以配置OCSP装订,也不难,网上教程很多,Nginx 配置上更安全的 SSL & ECC 证书 & Chacha20 & Certificate Transparency里面就有