早年,如果我们网站项目需要安装SSL证书那基本上只有购买付费证书,而且成本还相对比较高。从Let's Encrypt等服务商都相继提供免费SSL证书之后,以及普及SSL证书的应用之后,我们看到原本很多付费且较高的SSL证书也比较便宜。如今我们如果需要购买付费证书成本基本上也与一个域名的价格差不多甚至更便宜。
如果个人或者普通项目,我们其实完全没有必要购买付费证书,使用Let's Encrypt这样的免费证书足矣,而且现在Let's Encrypt也支持申请泛域名证书。这对于原来只能单一申请且使用的用户来说,又一个利好消息。不过对于一般的用户而言,基本上也用不上泛域名SSL证书。
一般我们SSL证书都用于网站项目,且大部分的WEB一键包、WEB面板都支持快速安装SSL证书,且基本上都默认将Let's Encrypt作为免费证书内置。但是,因为Let's Encrypt商家才推出免费泛域名证书,所以对于泛域名证书的申请还没有提供快速申请。在这篇文章中,需要分享的是我们利用网友提供的脚本可以快速给网站申请泛域名证书。
关于免费SSL证书申请,老部落还有几篇文章可以参考:
1、申请腾讯云免费DV SSL证书及Apache/Nginx/IIS/Tomcat证书安装
2、阿里云免费DV SSL证书申请自动下发及Apache/Nginx/IIS/Tomcat安装SSL
3、景安免费1年基础级DV SSL证书申请及网站HTTPS加密安装
第一、Let's Encrypt泛域名申请准备工作
1、了解申请原理
这篇文章后面用到的一键脚本申请Let's Encrypt泛域名SSL证书,是利用第三方域名DNS API接口快速申请的,这样。无论我们Linux VPS、服务器使用的何种WEB环境都可以快速申请。
2、申请DNS API
根据脚本的介绍,提供且支持我们常见的第三方DNS,包括DNSPOD、CLOUDXNS、阿里云DNS、GoDaddy、CLOUDFLARE、PowerDNS、Linode 等40多家DNS服务商。如果我们域名有用哪家的DNS,然后到对应的商家申请API。
举个例子:如果我们域名申请DNSPOD API,如上图申请之后需要记录好ID和Token。
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"
然后根据对应的标准准备好,后面需要在VPS服务提交。
3、自定义脚本
~/.acme.sh/acme.sh --issue --dnsdns_dp-d laobuluo.com -d *.laobuluo.com
需要注意的问题:我们需要到https://github.com/Neilpang/acme.sh/blob/master/dnsapi/README.md,查看支持的DNS服务商,以及看到对应的API格式和自定义脚本设置。每个DNS服务商需要用的稍微不同,比如DNSPOD,我们看到上标注是dns_dp。
第二、Let's Encrypt泛域名申请过程
1、准备VPS和登入
这里我们需要准备好已经安装过WEB环境的VPS,以及域名解析到服务器且DNS是使用的对应的准备好的。如果我们不放心可能产生的问题,那就先将服务器备份。
2、安装软件和acme.sh
apt-get update && apt-get install curl -y
&& apt-get install cron -y && apt-get install socat -y
//Debian/Ubuntu系统
yum update && yum install curl -y && yum install cron -y && yum install socat -y //CentOS系统
curl https://get.acme.sh | sh
3、提交API和脚本申请
我们登录SSH之后,先将自己的API丢进去,然后再将申请脚本丢进去会自动申请。
看到上面界面就表示申请成功。
4、检查证书
在"/root/.acme.sh/"对应的域名下,可以看到上图的这么多文件,其实我们只需要fullchain.cer和域名前缀.key文件就可以的。
第三、Let's Encrypt泛域名SSL证书安装
根据上文我们可以看到只需要2个文件就可以安装证书,但是我们需要先将证书拷贝到对应的证书专门目录中,不要直接引用这个目录文件。
~/.acme.sh/acme.sh --installcert -d .com \
--key-file /etc/nginx/ssl/.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "service nginx force-reload"
这里用的是service nginx force-reload, 不是service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload)。Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/.cer ,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。
第四、小结
1、通过上面脚本的办法可以快速的结合域名DNS API申请Let's Encrypt泛域名SSL证书,不需要特定哪种WEB环境才可以安装。且不同的DNS渠道使用的API申请和脚本是不同的,需要参考官方文档。
2、申请的Let's Encrypt泛域名证书是自动更新的,且我们需要将证书考虑到对应网站目录在安装,不要直接用生成的目录安装。