众所周知,因特网上应用最为广泛的网络传输协议是Http协议,但由于Http协议存在一些不足,比如,在通信过程中使用明文传输,同时未验证通讯双方身份信息,会导致传输数据被第三方窃取。
因此,为了提升安全性,衍生出了Https协议,该协议是在Http基础上增加了证书交换及加密传输等功能,使得Http访问、数据传输尽可能的安全。
那么问题来了,因为使用了Https需要证书交换,需要给我们的域名申请证书才能开启Https协议,但是我们不能使用自签证书(因为自签证书系统/浏览器不认),所以需要向第三方机构来申请公认的证书。
目前常用的CA有: 阿里云 , 腾讯云,Godaddy,AWS,Google 等, 但这些服务基本都是收费的, 且申请通配符(*.example.com)证书时价格更高。
为了解决证书问题,分享一款免费签发Https证书的工具:Let's Encrypt。
Let's Encrypt是一家免费、开放、自动化的证书颁发机构(CA),为公众的利益而运行(由非盈利组织互联网安全研究小组(ISRG)运营)。
Let's Encrypt的主要目标是推进网站的Https进程,截止到目前,已经为1.8亿个网站提供TLS证书。
(Let's Encrypt 只颁发域名验证型(DV)证书,不能颁发组织验证(OV)或扩展验证(EV))
同时 Let's Encrypt支持通配符证书(是不是被吸引到了)。
Let's Encrypt 官网
1. 首先我们应该拥有一个域名, 而且拥有我们自己的服务器
假设我们在阿里云注册的域名是 example.com,登录到云解析DNS控制台
阿里云DNS控制台界面
我们的服务器为CentOS7
CentOS7
然后我们就可以进行第二步啦
2. 证书签名
这个步骤就开始申请证书了。
因为Let's Encrypt 支持通配符证书(*.example.com) ,所以这里我们就使用Certbot的 ACME 方式申请通配符证书。
当然,Let's Encrypt 支持多域名签名,这样我们就可以把 *.example.com 和 example.com一起签名。
Let's Encrypt 支持3种域名认证方式,以下列出常用的2种:
1. 在 example.com 下配置DNS记录
2. 在 http://example.com/的已知URI下放置一个Http资源
但签通配符域名(*.example.com)只支持DNS记录认证
Web URI资源认证域名流程图:
(DNS认证与此类似,只是WebServer Admin Software换为了DNS Server,配置项换成了DNS Record)
Web URI资源认证域名流程图
签名步骤:
a. 首先下载certbot-auto及Python(CertBot依赖Python 2.7 or 3.5+)
安装文档: https://certbot.eff.org/docs/install.html
$ wget https://dl.eff.org/certbot-auto
$ chmod +x certbot-auto
b. 执行certbot-auto
(此处执行需要root权限)
./certbot-auto certonly --no-bootstrap --email email@example.com -d *.example.com -d example.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
其中:
--preferred-challenges:域名所有权验证类型 ,值为http,dns或tls-sni ,这里我们使用dns
--email:用于注册的邮箱
-d:用于签名的域名,可配置多个-d 项,或将多个域名按','(逗号)分割
--manual :表示手动安装插件
--server:ACME V2版本协议目录, 为了实现通配符证书,Let’s Encrypt 对 ACME 协议的实现进行了升级,只有 v2 协议才能支持通配符证书。
执行后如图:
certbot-auto签名过程
在出现 Please deploy a DNS TXT record under the name 提示时,按要求在阿里云DNS 管理控制台中配置 DNS TXT记录:
阿里云DNS配置
阿里云DNS配置列表
在等待10分钟后,或在服务器上使用dig命令检查域名解析是否生效,解析生效后,按回车继续进行下一个域名的配置。
在2次配置结束后,我们即可看到证书签名成功。
3. 为Nginx配置启用Https
这里我们使用Nginx 配置域名证书来开启Https。配置如下:
(注意运行权限需为root,其中的example.com为假设域名,需替换为真实的域名)
Nginx: Https配置
然后重启服务即可。
4. 以上步骤操作完成后,证书就配置成功了,让我们看下成果:
Let's Encrypt签名后的证书
注意 Let's Encrypt CA颁发短期证书(90天)。确保在3个月内至少续订一次证书。当然, 我们可以做定时任务脚本自动完成证书续签。
最后:
通过以上步骤我们就能简单地为我们的网站开启Https了,大家快去试试吧。若有什么问题,可以点赞,留言,转发和小编一起交流学习。
参考:
Let's Encrypt 官网:
https://letsencrypt.org/
CertBot 使用文档:
https://certbot.eff.org/docs/
联系客服