简单介绍
由于HTTP自身明文传输的安全缺陷(在局域网中使用cain就可以轻易嗅探到对方的账号密码),近些年各厂对于HTTPS的大力推广以及普及,但是正常情况下使用HTTPS是需要有证书的,而证书这个东西对于个人站点来说又过于奢侈以及鸡肋,为了解决这种情况由互联网安全小组成立的lets encrypt便诞生了。
简单来说lets encrypt会给用户办法免费证书,虽然证书有效期只有90天,但是对于简单的个人站点来说也足够了,因为它同样提供了很简便的证书刷新功能:),这篇文章主要进行一些简单的介绍以及对于证书颁发的认识。
官方网站上支持两种验证方式,我们用vps肯定是选择with shell这种方式,这种情况下我们选择好对应的操作系统之后下载certbot-auto文件然后执行certbot-auto —nginx就可以生成证书并且相应的还会贴心的把nginx配置文件为我们修改好!到此为止,在访问站点,小绿标就有了,相应的,因为有90天时限,工具同时提供了非常便捷的renew功能,并且在renew功能的基础上提供了hook!以便证书过期时重启nginx
1 | certbot-auto renew --post-hook 'service nginx restart' |
详细介绍
其实打开HTTPS本质上是需要修改nginx并且指定相应的证书以便于在nginx对外提供服务的时候使用正确的密钥进行信息的加密,因此一般的nginx配置都会这样来写,首先打开443端口,再就是指定证书的公钥和私钥文件。
1 | listen 443 ssl; # managed by Certbot |
domain.cer
而证书文件的验证,其实归根到底是颁发机构验证这个域名到底是不是属于你这个人的,刚才上文说的是最基本的验证方式,就是机构的服务器会来访问域名,而cerbot会在本机域名下面新建一个.well-known(“很出名”)的文件夹,当机构的服务器访问域名的well known时候其下面的文件对应上了,那么验证成功,会颁发总共四个文件:
- domain.cer 域名的公钥
- domain.key 域名的私钥
- ca.cer 颁发机构的公钥
- fullchain.cer 域名+颁发机构的公钥
这里需要说一下的是,在配置公钥的时候既可以指定domain.cer也可以使用fullchain.cer,他们两个的区别是后者包含了颁发机构的公钥,在某些情况下有些浏览器不仅会验证domain还会验证颁发机构,所以推荐使用后者:)
上面已经简单说了下验证域名的方式是最终颁发机构会访问域名获取到正确的信息才行。在某些应用场景下,这个就有一些复杂了,例如说,有两台服务器,最前面挡了一个负载均衡设备,这种情况下如果使用这种方法进行验证当然也可以,就是在A机器上执行cerbot发起域名验证,然后在B机器上面修改localtion .well-known将流量倒给A,这样也能验证成功:)
DNS验证方法
其实证书验证还支持其他方法,比如dns验证,因为归根到底,机构只需要验证这个域名只需要属于你就ok了,所以还有一种验证方式是在域名管理里面增加一条txt查询记录,工具地址,说实话这种方法很方便,并且不会影响线上域名的正常使用:)
转载请注明来源链接 http://just4fun.im/2017/11/07/HTTPS简介以及总结/ 尊重知识,谢谢:)