免费申请https网站ssl证书--支持通配符
简介
众所周知从某些公司购买HTTPS
证书,一个域名每年都要几千个大洋(不是一般的黑)。那么有没有免费,答案是有。现隆重推荐(Let’s Encrypt
免费证书)
EEF 电子前哨基金会、 Mozilla 基金会和美国密歇根大学成立了一个公益组织叫 ISRG
( Internet Security Research Group ),这个组织从 2015 年开始推出了 Let’s Encrypt
免费证书。这个免费证书不仅免费,而且还相当好用,所以我们就可以利用 Let’s Encrypt
提供的免费证书部署 https
了。Let’s Encrypt
证书除了免费,还支持域名通配符或泛域名。好东西必须分享,走起。
准备工作
安装Certbot
以 centos7
为例
Certbot
的官方网站是 https://certbot.eff.org/ ,打开这个链接选择自己使用的 web server 和操作系统,EFF 官方会给出详细的使用方法。
下载certbot
1 | wget https://dl.eff.org/certbot-auto |
注意:也可采用certbot官方 yum安装方式
申请通配符域名
1 | ./certbot-auto certonly -d *.example.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory |
当然你也可以将多个泛域名,放到一个证书里(亲测可行),将example.com 换成你自己的域名。
1 | ./certbot-auto certonly -d *.example.com -d *.a.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory |
这里我只用了一个泛域域名
执行以上命令得到如下
依次 输入 你的邮箱
再输入“A
” 同意,“Y
” 开始
最后出现如下图,此处先不动,很重要。
配置DNS
要求配置 DNS TXT 记录,从而校验域名所有权,也就是判断证书申请者是否有域名的所有权。
给 _acme-challenge.example.com
配置一条 TXT 记录.
以阿里云上的域名为例,添加一条txt记录:
测试txt记录是否生效
1 | $ dig -t txt _acme-challenge.example.com @8.8.8.8 |
确认生效后,回车执行,输出如下:
恭喜您,证书申请成功,证书和密钥保存在下列目录:
1 | ll /etc/letsencrypt/live/example.com |
然后校验证书信息,输入如下命令:
1 | openssl x509 -in /etc/letsencrypt/archive/example.com/cert1.pem -noout -text |
如果输出中有
1 | X509v3 Subject Alternative Name: |
证明成功
也可以通过
1 | ./certbot-auto certificates |
配置Nginx
1 | server { |
证书续期
一般Let’s Encrypt
证书有效期为3
个月,如果想续期执行如下命令
1 | ./certbot-auto renew |
如果嫌麻烦,可以写到定时任务里,每天执行一次。
1 | crontab -e |
续期说明:只用renew
的话,会先检查证书是否需要更新,大概是距离到期还有三天或者十几天之内才会执行更新,否则会提示不需要更新。(昨天更新了证书,今天直接用renew
,提示不允许更新)
注意:人总有犯晕的时候,比如你没有放开443端口,还想访问HTTPS网站。
错误解决
如果执行续订,出现ReadTimeoutError: HTTPSConnectionPool(host=‘files.pythonhosted.org’, port=443): Read timed out.
这个是pip下载国内站点超时或被限造成的,可通过配置pip.conf
解决。
1 | vim /root/.pip/pip.conf |
同时给大家推荐比较好的免费获取HTTPS证书的开源的项目,安装简单,自动续订。
https://github.com/Neilpang/acme.sh