网络上关于如何签发免费SSL证书的博文一大片,但是真正操作起来的能让新手不迷惑的却很少,很多操作步骤受限于国内无法访问外网的阻碍,导致无法真正实施成功。
实际上,关于申请免费SSL证书主要涉及两大部分:
第一,如何快速申请到一个免费的DV证书(通常免费的证书都是DV证书,DV证书对于个人或者测试用途足够了)。
第二,成功申请到证书之后如何配置部署,使得网站可以通过HTTPS访问。
上面两步可以使用脚本工具自动化实现,也可以手动完成。
如下示例将以完全手动的方完成SSL证书申请和部署(基于nginx)。
申请SSL证书
再经历了仔细阅读Let’s Encrypt手册依然没有成功完成SSL证书申请的煎熬之后,果断放弃。
最后在FreeSSL.cn非常直观简单地就完成了免费SSL证书的签发。
个人觉得,在FreeSSL.cn上签发SSL证书真的非常方便,热别适合新手使用。
首先,进入到FreeSSL.cn页面,选择支持多域名和通配符的“5lSSL”。
点击51SSL
跳转到51ssl的页面,此时需要注册一个账户并登录。
选择“订单管理”->“证书申请”。
订单管理-证书申请
选择“非商业证书”->“TrustAsia 免费域名型通配符SSL证书”,点击“购买”按钮。
非商业证书-购买
说明:在这里选择什么类型的证书,完全根据自己的需求而定。由于我需要使用多个子域名证书,所以选择了“TrustAsia 免费域名型通配符SSL证书”。
来到“申请 TrustAsia 免费域名型通配符SSL证书”的操作界面。
填写好相关细心之后,点击“提交证书申请”按钮。
提交证书申请
接下来最重要的一步就是“域名验证”,强烈建议使用“Email验证”方式,这样只需要在收到验证邮件之后鼠标点击就可以完成验证操作。
根据提示完成相关验证操作,证书的签发需要等待一会儿,不要着急,大约几分钟之后会收到证书签发成功的邮件。
在收到证书签发成功的邮件通知以后,再次来到管理后台界面,选择“订单管理”,点击订单编号旁边的“快速查看”,在弹出界面中点击“下载证书”,弹出证书下载界面。
下载证书-1
在证书下载弹出界面中,首先选择部署SSL证书的服务器,然后再选择“下载”,或者将证书文件发送到邮箱。
下载证书-2
以部署到nginx的证书为例,下载得到一个压缩包,包含2个文件:
“.pem文件”:SSL证书文件
“.key文件”:SSL证书私钥文件
部署SSL证书
注意:在部署SSL证书之前,先要确保域名已经在添加了解析,并且可以通过http协议使用域名访问到目标网站。
以在nginx中部署SSL证书为例,将通过上述方式签发得到的SSL证书上传到nginx服务器,在nginx配置文件中添加配置:
server {
listen 80;
server_name www.zhangsan.org.cn;
# 访问http时强制跳转到https
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name www.zhangsan.org.cn;
root /data/www;
index index.html index.htm;
access_log /dev/null;
ssl_certificate /data/ssl/zhangsan.org.cn_cert_chain.pem; # 证书文件路径
ssl_certificate_key /data/ssl/zhangsan.org.cn_key.key; # 证书私钥文件路径
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
}
至此,签发和部署免费SSL证书的操作过程完毕!
虽然在FreeSSL.cn通过51SSL签发证书非常便捷(操作过程也很容理解),但是有个不便之处在于:在这里签发的免费证书无法实现自动化续签(默认只有90天有效期)。
使用acme脚本签发证书并实现自动化续签
如果希望签发的证书能实现自动化续签,可以选择acme方式。
进入到FreeSSL.cn页面,输入需要签发证书的域名,品牌保持默认选择(亚洲诚信),点击“创建免费的SSL证书”按钮。
选择acme签发证书
如果没有注册账户,会提示先注册账户并登录。
来到ACME域名配置界面,在“域名”输入框中默认显示的就是刚才输入的域名信息,点击“下一步”按钮。
点击下一步按钮进入DCV配置
进入到DCV配置阶段。
展示CNAME记录信息
这时需要根据提示信息在域名解析平台添加一条对应的CNAME记录。
以在阿里云平台操作为例如下:
阿里云添加CNAME记录
添加CNAME记录后等待几分钟,再回到DCV配置界面,点击“配置完成,立即检测”,如果能成功检测到刚才配置的CNAME记录,则进入到“部署”界面。
注意:在检测DCV配置这一步可能需要等一会儿,直到成功为止。
先安装acme再签发证书
成功安装好acme脚本后执行如下命令来签发证书:
# 这里只是示例,每个证书的签发命令都不同,直接从部署界面COPY即可
acme.sh --issue -d *.zhangsan.org.cn --dns dns_dp --server https://acme.freessl.cn/v2/DV90/directory/zhf8n20uk8nb5bt2oc4j
执行上述命令之后会在在~/.acme.sh目录下生成对应证书文件目录:'*.zhangsan.org.cn'。
到这里还没有结束,不同的Web服务器上使用的证书文件格式有所不同,以nginx为例还需要使用如下命令生成对应格式的证书文件和私钥文件。
acme.sh --install-cert -d *.zhangsan.org.cn \
--key-file /data/ssl/zhangsan.org.cn_key.pem \
--fullchain-file /data/ssl/zhangsan.org.cn_cert.pem \
执行上述命令后就会在/data/ssl目录下生成能在nginx中使用的证书文件和私钥文件了。
完成上述操作之后,到nginx配置文件中添加对应证书配置即可。
至此,仅仅实现了证书的签发,那么如何才能实现证书的续签呢?默认只有30天有效期。
实际上,在我们使用使用acme脚本签发证书的时候,会自动添加一条命令到crontab中,从而实现证书的续签操作。
# crontab -l
# 这条命令是自动添加的,所以不用动,通过定时任务的方式实现证书的自动续签
41 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
【参考】
https://freessl.cn/
https://www.zhihu.com/question/340572894 免费的SSL证书和收费的证书有什么区别?
https://www.jianshu.com/p/1a792f87b6fe Let's Encrypt 证书申请及配置
https://github.com/acmesh-official/acme.sh/wiki/Run-acme.sh-in-docker
https://www.laoliang.net/jsjh/technology/8898.html 2021年阿里云最新新手详细申请免费SSL(https)证书图解方法(流程)
https://blog.csdn.net/jiuyuefenglove/article/details/108625400 SSL证书申请最详细教程
https://zhuanlan.zhihu.com/p/174755007 33种免费获取SSL证书的方式
https://blog.csdn.net/ithomer/article/details/78075006 十大免费SSL证书:网站免费添加HTTPS加密
https://blog.fundebug.com/2018/07/06/apply-lets-encrypt-certificate/ 教你快速撸一个免费HTTPS证书
https://www.awaimai.com/2218.html 使用Let's Encrypt为网站加上HTTPS
https://coolshell.cn/articles/18094.html 如何免费的让网站启用HTTPS
https://yeaheo.com/post/nginx-lets-encrypt-ssl-certificate-config/ 免费申请 Let's Encrypt SSL 证书
https://blog.sprov.xyz/2019/04/25/apply-ssl-certificate-at-freessl/ 在 FreeSSL 上为你的域名申请免费 SSL 证书
https://cn.aliyun.com/product/cas 阿里云申请免费SSL证书
有话要说