KS
Knowledge Sharing
知识分享
现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。
写在前面
前几天看了一篇文章,标题为“HTTP遭谷歌抛弃 7月起Chrome将全部标示为不安全”,内容大概是“据国外媒体Venturebeat报道,谷歌近日宣布,今年7月起,Chrome浏览器的地址栏将把所有HTTP标示为不安全网站。这是谷歌浏览器针对HTTP网站开战的第三步棋。”
其实不只是Google,在WWDC 2016上,苹果在发布iOS 9的同时也向开发者传递了一个消息,那就是到2017年1月1日时App Store中所有应用都必须启用 App Transport Security应用程序安全传输协议,从而提升应用和系统安全性。
不过后来苹果在其开发者网站上表示将延长该规定的截止日期,以便给开发者更多的时间做好切换工作。
种种迹象表明,全面启用HTTPS势在必行。
我们先了解一下相关的基础知识,再继续本文的主题。大牛可略过。
HTTP和HTTPS
我们现在的生活已经离不开互联网了,当我们浏览网页,网上shopping的时候数据都是基于http协议进行传输的。http已经升级到了2.x版本,想要了解2.x版本,请看这篇文章:http2.0的时代真的来了...。
HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
因为 http 是明文传输的,通过 http 协议传输的内容很容易被偷看和篡改,为了安全(你肯定不想被人偷看或者篡改网页内容吧,比如网站银行密码什么的。)就为 http 协议再加上了一层 SSL/TLS 安全协议,所以就有了 https 。
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP的基础上加入SSL协议,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 用于安全的HTTP数据传输。SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性,凡是使用了 https 的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过 CA 机构颁发的安全签章来查询。
CA认证
采用https的服务器必须从CA (Certificate Authority)申请一个用于证明服务器用途类型的证书。该证书只有用于对应的服务器的时候,客户端才信任此主机。
CA是证书的签发机构,它是PKI的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。
如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。
但是申请证书是收费的(按年),少则一两千,多则七八千。(网上有人说还有几十的,实际还没看到过)但有些公司就是不愿意花钱,还有一些个人网站更不愿意花钱了。
OK,简单介绍下基础知识,下面开始本文的重点,教你如何生成可靠的并且免费的证书。
Let’s Encrypt
Let’s Encrypt 是 一个叫 ISRG ( Internet Security Research Group ,互联网安全研究小组)的组织推出的免费安全证书计划。参与这个计划的组织和公司可以说是互联网顶顶重要的先驱,除了前文提到的三个牛气哄哄的发起单位外,后来又有思科(全球网络设备制造商执牛耳者)、 Akamai 加入,甚至连 Linux 基金会也加入了合作,这些大牌组织的加入保证了这个项目的可信度和可持续性。
尽管项目本身以及有该项目签发的证书很可信,但一开始 Let’s Encrypt 的安全证书配置起来比较麻烦,需要手动获取及部署。存在一定的门槛,没有一些技术底子可能比较难搞定。官网地址:https://letsencrypt.org/
Certbot
后来 ISRG 的发起者 EFF (电子前哨基金会)为 Let’s Encrypt 项目发布了一个官方的客户端 Certbot ,利用它可以完全自动化的获取、部署和更新安全证书。这真是非常容易、方便呀,所以我们就可以直接使用官方客户端。
官网地址:https://certbot.eff.org/,我们打开这个网站,显示出上页面的两个选择框,I'm using和on。根据你实际使用的软件,和操作系统进行选择,不同的系统,有不同的安装方式,我用的是CentOS7和Nginx,选择如下图:
选择后,下面会出现安装步骤,按照步骤操作就可以了,安装cerbot后,可以生成证书让cerbot自动帮你配置nginx,也可以只生成证书,自己手动修改nginx配置。
sudo yum install certbot-nginx
提示安装完成后,执行第二步生成证书
sudo certbot --nginx
如果你运气好的话,会很顺利生成证书,如果不顺利的话,会出现错误,这些错误都是你服务器缺少包导致。咱们先说顺利的情况:
输入你的邮箱地址,这样当证书过期的时候,它会给你发邮件提醒你。输入邮箱后,回车,下一步:
输入A同意:它会在letsencrypt这个网站上帮你注册账号。然后下一步:
然后会列出来你nginx里配置的域名,填入你需要生成哪个域名的证书,输入对应的数字序号,回车
有两个选项,1 是不需要重定向,2 重定向。意思就是说,当客户端访问http的时候是否重定向到https。如果你的系统只允许访问https接口,选2即可。输入2回车。
OK,大功告成,这时候certbot已经帮你重启了nginx,你只需调用https接口测试即可,我写的比较详细,显得步骤很多,其实熟练的话,一分钟就搞定了。
我们打开nginx的配置文件看看:
这是certbot生成的证书,按照这个路径可以找到对应的证书文件。
另外 letsencrypt证书的有效期是90天,所以90天需要更新一下证书,更新证书也是可以自动更新的,输入命令:
sudo certbot renew --dry-run
Certbot 会帮你启动一个定时任务,在证书过期时自动更新。
还有,如果你只想生成证书怎么办?Nginx 配置中并没有此域名。同样一行代码搞定:
certbot certonly --cert-name example.com
Certbot 会启动一个临时服务器来完成验证(会占用80端口或443端口,因此需要暂时关闭 Web 服务器),然后 Certbot 会把证书以文件的形式保存,包括完整的证书链文件和私钥文件。
刚才我也说了,如果顺利的话,很快搞定,但是有些系统在缺少某些包的时候,在安装的过程中还是会遇到错误,这些坑,我已经趟了一遍,做了总结,如果大家遇到问题,可以看看我整理的博客,由于篇幅问题,我就不在这里写出来了。https://blog.csdn.net/mxw2552261/article/details/79730757
不同的系统,不同的软件,安装命令也不尽相同,直接参照官方文档操作就行了,大概过程都差不多,如果大家在安装的过程中遇到问题,可以在公众号里给我留言,我会抽时间一一答复。