公司最近要做微信小程序,发现要https,于是搞了下,结果发现这么多坑
环境:阿里云CentOS6.8
开始查了下,发现又拍云有提供CDN+Https,于是试了下,部署什么的都很方便,看价格的时候发现https请求居然还要按次算价格(0.05/次),果断弃之,换免费的Let's Encrypt
1.首先安装Certbot
由于我的环境是CentOs6.8,epel库里没有收录certbot这个rpm包,于是只能自己安装了
##wget命令下载最新的release包并在当前工作目录下重新命名为certbog.tgz
wget -O certbog.tgz https://codeload.github.com/certbot/certbot/tar.gz/v0.9.3
##解压certbog.tgz这个要所报
tar zxvf certbog.tgz
##为了便于统一叙述将解压出来的certbot-0.9.3文件夹重命名为certbot
mv certbot-0.9.3 certbot
打开Certbot解包后,直接执行 ./certbot-auto 让它自己安装(应该是有坑)
二、使用certbot工具申请letsencrypt的免费ssl证书
申请ssl证书之前,先梳理几个要点:
1、确定好拟申请ssl证书的域名,这里为了便于说明假设申请ssl的域名为:c1c2.test.com,你也可以申请www.test.com、account.test.com等其他域名(和主机),没有本质上的区别,仅名称上的差异;
2、确定拟申请ssl证书的域名正确解析到当前主机,本例也就是通过能够正确解析到当前主机(注意是正确解析,至于是不是能正确访问依据certbot的模式不同要求也不同);
3、确定好拟申请ssl证书域名解析到当前主机后的web根目录,假设为:/var/www
certbot申请ssl有多种模式和方法可选,而且certbot试图成为一个集申请ssl证书、安装ssl证书于一体的智能化工具,这也导致了certbot目前有多种使用方法;将ssl证书申请和自动化安装集成于一体当然是好事儿,但由于当前市面服务器软件多种多样,必然导致兼容性要得到保障的话certbot工具还需要较长一段时间来完善。所幸理解清楚certbot工具到底能做些什么,分哪些过程和步骤,哪些是不需要certbot帮我自动完成的就可以了。本文仅仅将certbot当做一个申请ssl证书的工具,并不需要certbot来帮我们自动完善nginx下启用https访问的配置文件。
2.1、standalone模式申请ssl证书
standalone模式不需要上述梳理出的3个要点中的第三条,也就意味着如果你的主机需要关停80端口(或和443端口)的web服务,譬如正在运行的nginx、Apache需要关停。
./certbot-auto certonly --standalone -d c1c2.test.com
2.2、非standalone模式申请ssl证书
这种模式需要使用-w参数(或者--webroot-path参数)指定当前正在运行的web服务器的根目录。--webroot-path 参数指定web根目录后,certbot工具会自动在该目录下生成.well-known的隐藏目录,以及用于效验域名所有者的特定文件,此文件Let's Encrypt的服务器会主动发起http请求去读取从达到效验域名所有者或者管理者就是本次操作certbot工具的人;certbot工具自动生成的完整目录为:-w参数指定的根目录/.well-known/acme-challenge,对于nginx而言web根目录下的隐藏目录默认情况下是不允许访问的,所以nginx情况下再执行非standalone模式申请ssl证书之前,需要将nginx网站根目录下的.well-known隐藏目录设置成允许访问。
location ~ /.well-known {
allow all;
}
如果熟悉nginx,甚至可以为.well-known隐藏目录指定单独的root入口;这就是nginx有关的合理利用了,不再补充。
给出命令的参考格式:
certbot certonly --webroot -w /var/www/ -d c1c2.test.com
测试申请的截图:
certbot申请ssl证书成功的截图
这样在/etc/letsencrypt/live/你的域名作为目录名的目录这个目录下会自动生成ssl证书私钥和公匙,下图所示:
letsencrypt申请结果截图
4个pem文件,ssl里常见的证书文件,nginx用到fullchain.pem、privkey.pem这两个文件,一个公钥链,一个私钥。也就是nginx中ssl_certificate指令指定的就是fullchain.pem,而ssl_certificate_key指令指定的就是privkey.pem,当然如果不做移动的话,需要是完整路径,具体nginx配置就不墨迹了,关键的ssl证书和key都有了,就比较简单了。
三、证书更新
Let's Encrypt的证书有效期是90天,时间短了点儿,不过Let's Encrypt支持证书更新,到期前更新证书即可。certbot 提供了更新证书的命令cerbot renew,会自动更新所有已申请的ssl证书。
想要实现到期前自动更新的话,做个crontab任务,就不再多吧唧了。
本文为刘杨哥原创文章,转载无需和我联系,但请注明来自刘杨哥博客https://liuyangge.com