”
安装acme.sh
1 2 |
<span class="">curl</span> https://get.acme.sh | sh |
这样就已经安装好了acme.sh
脚本,具体动作:
- 安装文件和配置文件都在
home
目录下,也就是~/.acme.sh/
- 创建一个bash alias,
alias acme.sh='~/.acme.sh/acme.sh'
,重新打开终端后直接输入acme.sh
就可以快速方便地使用这个脚本 - 创建一个
crontab
定时任务,每天0点进行acme.sh
脚本的续签证书,自动升级(可选)等任务
整个安装过程对环境无污染,所有新文件仅限~/.acme.sh/
目录内。
acme.sh生成证书
acme.sh生成证书有两种方式,域名验证及http方式,在此处推荐使用http验证方式,在一台VPS上进行即可,无需额外的域名设置。
1 2 |
acme.sh --issue -d 要申请的域名 --webroot /<span class="">var</span>/www/mydomain.com/ #这里是网站的根目录 |
运行这个命令之后证书就已经签好,此处以我的域名www.jiangyong.org为例,在 ~/.acme.sh/www.jiangyong.org/
里可以找到所签发的证书,包括csr,key,完整链证书等,使用起来非常方便。
acme.sh安装证书
acme.sh安装证书也异常方便,除了apache自动安装之外,nginx的证书安装也是半自动的,自己只需修改nginx配置文件即可
此处以www.jiangyong.org为例,一定要修改为自己的域名
官方:
1 2 3 4 5 |
acme.sh <span class="">--installcert -d www.jiangyong.org \</span> <span class="">--key-file /etc/nginx/ssl/www.jiangyong.org.key \</span> <span class="">--fullchain-file /etc/nginx/ssl/www.jiangyong.org.cer \</span> <span class="">--reloadcmd ""service nginx force-reload""</span> |
我的:
1 2 3 4 5 |
acme.sh <span class="">--installcert -d www.jiangyong.org \</span> <span class="">--keypath /etc/nginx/ssl/www.jiangyong.org.key \</span> <span class="">--fullchainpath /etc/nginx/ssl/www.jiangyong.org.fc.cer \</span> <span class="">--reloadcmd ""service nginx reload""</span> |
这样证书就已经安装到位,比如此处的路径是在 /etc/nginx/ssl/
路径下:
- key文件为
/etc/nginx/ssl/www.jiangyong.org.key
- 完整链证书文件为
/etc/nginx/ssl/www.jiangyong.org.fc.cer
更棒的是,acme.sh 会自动记住证书安装的位置,以后自动续签之后会自动安装到相应位置并重启Nginx,不需要再手动添加crontab任务,写一大堆路径并记得重启Nginx。
和官方简略教程不同的是,我是用完整证书链进行安装的,以防一些机器(很有可能)没有 Let’s Encrypt 的根证书造成SSL不被信用的情况
修改Nginx配置文件启用ssl
这时需要修Nginx配置文件使得站点用上SSL证书,此处以我的域名www.jiangyong.org为例,我的配置文件是 /etc/nginx/conf.d/www.jiangyong.org.conf ,加上如下语句:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<span class="">### Begin of SSL config</span> <span class="">ssl</span> <span class="">on</span>; <span class="">ssl_certificate</span> /etc/nginx/ssl/www.jiangyong.org.fc.cer; <span class="">ssl_certificate_key</span> /etc/nginx/ssl/www.jiangyong.org.key; <span class="">ssl_session_timeout</span> <span class="">1d</span>; <span class="">ssl_protocols</span> TLSv1 TLSv1.<span class="">1</span> TLSv1.<span class="">2</span>; <span class="">ssl_prefer_server_ciphers</span> <span class="">on</span>; <span class="">ssl_ciphers</span> EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; <span class="">ssl_session_cache</span> shared:SSL:<span class="">50m</span>; <span class="">ssl_session_tickets</span> <span class="">on</span>; <span class="">ssl_stapling</span> <span class="">on</span>; <span class="">ssl_stapling_verify</span> <span class="">on</span>; <span class="">resolver</span> <span class="">114.114.114.114</span> valid=<span class="">300s</span>; <span class="">resolver_timeout</span> <span class="">10s</span>; <span class="">### End of SSL config</span> |
然后测试配置文件并重启nginx即可:
查看源代码打印帮助
1 2 |
<span class="">nginx</span> -t && service nginx restart |
acme.sh全自动续签证书
目前 Let’s Encrypt 证书的有效期是90天,官方推荐的方式是脚本自动化续签。acme.sh的实现方式是#全自动#,对,你不用进行任何设置,acme.sh会自动在80天后续签,一个键都不用敲!
acme.sh自动更新自身
Let’s Encrypt 一直处于高速发展的状态,每隔一段时间都会添加新的特性,而acme.sh也会随着官方不断更新,所以保持acme.sh更新是很有必要的,而acme.sh也提供了自动升级的功能:
- 手动升级:
acme.sh --upgrade
- 自动升级:
acme.sh --upgrade --auto-upgrade
- 关闭自动升级:
acme.sh --upgrade --auto-upgrade 0
参考资料
- 官方简略教程:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E
- Let’s Encrypt证书快速申请并自动续期:https://www.gubo.org/lets-encrypt-quick-start-and-auto-renew/
- Mozilla SSL配置生成器:https://mozilla.github.io/server-side-tls/ssl-config-generator/
我的操作
- 验证域名
1 2 3 |
acme.sh <span class="">--issue -d www.jiangyong.org \</span> <span class="">--webroot /data/wwwroot/www.jiangyong.org/</span> |
- 安装证书
1 2 3 4 |
acme.sh --installcert <span class="">-d</span> www.jiangyong.org \ --key-file /usr/<span class="">local</span>/nginx/conf/ssl/www.jiangyong.org.key \ --fullchain-file /usr/<span class="">local</span>/nginx/conf/ssl/www.jiangyong.org.crt \ --reloadcmd <span class="">""service nginx force-reload""</span> |
“