申请ssl的好处
安全,ssl是一种加密传输方式,有了它,密码传的过程,网页数据传的过程都是加密的,不易被破解。打开站点可以用https,而不是http,显的高级一些。
申请过程记录
先在网上查了一圈,免费申请的方法有一些,比如知乎上的这个文章,但是下面的评论有人说一些不好用,不能用了,也有人说有一个挺好的,比如acme,搜了一下,github上有项目,而且几个月前还在更新,算是比较新了,有中文的README,看了一下挺简单的,就照着做了一下。
下载acme.sh
1 | bash |
这里我输入了我用的一个邮箱,很快就安上了脚本
生成证书
acme.sh 实现了 acme 协议支持的所有验证协议.
一般有两种方式验证: http 和 dns 验证。 我用的是http认证。
http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.
1 | acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/ |
只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.
更高级的用法请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert
copy/安装 证书
前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/
, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.
正确的使用方法是使用 --install-cert
命令,并指定目标位置, 然后证书文件会被copy到相应的位置,
1 | acme.sh --install-cert -d example.com \ |
(一个小提醒, 这里用的是 service nginx force-reload
, 不是 service nginx reload
, 据测试, reload
并不会重新加载证书, 所以用的 force-reload
)
Nginx 的配置 ssl_certificate
使用 /etc/nginx/ssl/fullchain.cer
,而非 /etc/nginx/ssl/<domain>.cer
,否则 SSL Labs 的测试会报 Chain issues Incomplete
错误。
--install-cert
命令可以携带很多参数, 来指定目标文件. 并且可以指定 reloadcmd, 当证书更新以后, reloadcmd会被自动调用,让服务器生效.
这里补充一下,我在做这里的时候不知道/path/to/keyfile/in/nginx/key.pem
是应该写哪里,后面看到/etc/nginx/ssl/fullchain.cer
,我就在nginx目录下创建了ssl文件夹,然后替换了/path/to/keyfile/in/nginx/
为/etc/nginx/ssl/
,其他保持不变,后面测试成功了。
详细参数请参考: https://github.com/Neilpang/acme.sh#3-install-the-issued-cert-to-apachenginx-etc
值得注意的是, 这里指定的所有参数都会被自动记录下来, 并在将来证书自动更新以后, 被再次自动调用.
查看已安装证书信息
1 | acme.sh --info -d example.com |
更新证书
目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.
请确保 cronjob 正确安装, 看起来是类似这样的:
1 | crontab -l |
最后, 本文并非完全的使用说明, 还有很多高级的功能, 更高级的用法请参看其他 wiki 页面.