”
SSL证书免费申请和自动续期
来自:https://quericy.me/blog/860/
申请SSL证书,首先需要避免用被Mozilla 拉黑的沃通(WoSign)及被沃通收购的StartCom. 沃通的一系列乱像和作死的缘由网上搜一下就清楚了.
这里还是推荐由美国加州公益组织ISRG 的 Let’s Encrypt . 优点在于可靠,可自动化,免费,口碑好. 缺点(其实算不上缺点)为有效期只有90天,但是完全可以自动化的进行续期来避免这个问题.
自动申请Let’s Encrypt证书的工具,用的最顺手的自动化工具还是acme.sh.
证书颁发可以看该项目的Github Wiki中文文档 ,写得很详细了.
主要需要注意区分的是:
- 颁发用
--issue
,仅在首次申请的时候使用(以及配合--dns
并做好dns参数解析) - 续期用
--renew
,可执行任意次数(如果离过期时间比较远,可使用--force
强制执行更新)
至于自动续期,以域名yourdomain.com
为例:
- 给
yourdomain.com
设置每30天自动续期:
1<span class="">1</span>1<span class="">acme.sh --days 30 --renew --dns <span class="">-d</span> yourdomain.com</span> - 给
yourdomain.com
的ECC证书设置每30天自动续期
1<span class="">1</span>1<span class="">acme.sh --days 30 --renew --dns --ecc --keylength ec-256 <span class="">-d</span> yourdomain.com</span>
定时将证书替换到IKEv2
IKEv2使用SSL证书的好处是可以不用导入到客户端,但是也需要注意证书过期对服务的影响.所以在上面一节设置好对Let’s Encrypt证书的自动续期以后,也别忘了将它应用到IPsec服务中来:
- 写个bash脚本ipsec.sh,用于替换证书并重启服务,注意替换
cert_file
和key_file
为自己的证书和私钥路径:
123456789<span class="">1</span><span class="">2</span><span class="">3</span><span class="">4</span><span class="">5</span><span class="">6</span><span class="">7</span><span class="">8</span><span class="">9</span>123456789<span class=""><span class="">#! /bin/bash</span></span><span class="">cert_file=<span class="">""/home/user/.acme.sh/yourdomain/yourdomain.cer""</span></span><span class="">key_file=<span class="">""/home/user/.acme.sh/yourdomain/yourdomain.key""</span></span><span class="">sudo cp <span class="">-f</span> <span class="">$cert_file</span> /usr/<span class="">local</span>/etc/ipsec.d/certs/server.cert.pem</span><span class="">sudo cp <span class="">-f</span> <span class="">$key_file</span> /usr/<span class="">local</span>/etc/ipsec.d/private/server.pem</span><span class="">sudo cp <span class="">-f</span> <span class="">$cert_file</span> /usr/<span class="">local</span>/etc/ipsec.d/certs/client.cert.pem</span><span class="">sudo cp <span class="">-f</span> <span class="">$key_file</span> /usr/<span class="">local</span>/etc/ipsec.d/private/client.pem</span><span class="">sudo /usr/<span class="">local</span>/sbin/ipsec restart</span> - 编写定时任务:
crontab -e
,并注意替换脚本文件的路径:
1<span class="">1</span>1<span class="">59 02 1 * * bash /your/path/to/ipsec.sh > /dev/null</span> - 这样,每个月1日的凌晨2点59分就会替换证书并重启IPsec服务.也可以根据自己的需求自行调整参数.
定时将证书替换到Nginx
acme.sh自动申请到的证书不仅可以给IPsec服务使用,也可以给Nginx使用.
既能免于IKEv2自签名CA导入问题的烦恼,又能给自己的站点上HTTPS,一举多得.
虽然acme的脚本带了一些十分方便的参数指定(如keypath, fullchainpath, reloadcmd, 自动部署到apache等)
但也无法满足一些复杂的需求,如同时应用普通证书和ECC证书,同时发布到IPsec等.
因而也可以自己写定时脚本(或者写在上一节的脚本里),步骤和原理同上,也就不多赘述:
- bash file
nginx.sh
:
123456<span class="">1</span><span class="">2</span><span class="">3</span><span class="">4</span><span class="">5</span><span class="">6</span>123456<span class=""><span class="">#! /bin/bash</span></span><span class="">sudo cp <span class="">-f</span> /home/user/.acme.sh/yourdomain/fullchain.cer /path/to/nginx/ssl/fullchain.pem</span><span class="">sudo cp <span class="">-f</span> /home/user/.acme.sh/yourdomain/yourdomain.key /path/to/nginx/ssl/privatekey.pem</span><span class="">sudo cp <span class="">-f</span> /home/user/.acme.sh/yourdomain_ecc/fullchain.cer /path/to/nginx/ssl/fullchain.pem</span><span class="">sudo cp <span class="">-f</span> /home/user/.acme.sh/yourdomain_ecc/yourdomain.key /path/to/nginx/ssl/privatekey.pem</span><span class="">sudo service nginx restart</span> - add crontab:
1<span class="">1</span>1<span class="">59 02 1 * * bash /your/path/to/nginx.sh > /dev/null</span>
“