写在最前, Google 的 Chrome 浏览器已在 2017 年 1 月开始,标记使用不加密的 HTTP 协议的网站为 Not Secure —— 不安全,自己的站,让浏览器提示不安全总是感觉不好。
一、http和https的概念与区别
概念:
HTTP:超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议[1]。HTTP是万维网的数据通信的基础。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
HTTPS:超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。历史上,HTTPS连接经常用于万维网上的交易支付和企业信息系统中敏感信息的传输。在2000年代晚期和2010年代早期,HTTPS开始广泛使用于保护所有类型网站上的网页真实性,保护账户和保持用户通信,身份和网络浏览的私密性。
区别:
1,从上面概念也可以看出来HTTP是不安全的,且攻击者通过监听和中间人攻击等手段,可以获取网站帐户和敏感信息等。HTTPS被设计为可防止前述攻击,并在正确配置时被认为是安全的。
2,HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。
3,HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。
1)对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;2)非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
tcp/ip
7 | 应用层 | 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP |
6 | 表示层 | 例如XDR、ASN.1、SMB、AFP、NCP |
5 | 会话层 | 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets |
4 | 传输层 | 例如TCP、UDP、RTP、SCTP、SPX、ATP、IL |
3 | 网络层 | 例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25 |
2 | 数据链路层 | 例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP |
1 | 物理层 | 例如线路、无线电、光纤、信鸽 |
我们可以这样理解,IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP。
ssl
SSL介于应用层和TCP层之间。应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并增加自己的SSL头。
二、通过网站的访问模式看https的优势
网站访问过程:
我们通过一个图片很容易的了解一下网站访问的一个过程。
使用HTTPS的工作原理:
过程解读:
(1)客户使用HTTPS的URL访问Web服务器,要求与Web服务器建立SSL连接。
(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
(3)客户端的浏览器与Web服务器开始协商SSL/TLS连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信。
从上面可以总结出HTTPS的优点:
(1)客户端产生的密钥只有客户端和服务器端能得到;
(2)加密的数据只有客户端和服务器端才能得到明文;
(3)客户端到服务端的通信是安全的。
另外谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
三,HTTPS的局限/缺点
1,HTTPS比HTTP耗费更多服务器资源(https其实就是建构在SSL/TLS之上的 http协议,所以要比较https比http多用多少服务器资源,主要看SSL/TLS本身消耗多少服务器资源)。
2,耗费的资源多,过程也复杂,想当然访问不如HTTP高效。大流量网站非必要也不会采用,流量成本太高。
3,HTTPS并不能防止站点被网络蜘蛛抓取。在某些情形中,被加密资源的URL可仅通过截获请求和响应的大小推得,这就可使攻击者同时知道明文(公开的静态内容)和密文(被加密过的明文),从而使选择密文攻击成为可能。
4,SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
5,SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
了解过相关概念和区别后,我们看下通过阿里云申请免费证书实现业务
1、登录控制台,找到ssl证书模块
2、点击购买证书,申请免费证书,模块如图,提示先选择品牌,选择增强型,免费型的就会出来
3、转到ssl模块页面,点击补全信息
4、按照步骤补全信息。
提交审核,大概十分钟左右就有结果,免费的机动不通过人工真的快。。。
6、添加dns解析记录。
7、下载安装证书,根据提示操作即可,注意证书位置
这里说下nginx的证书配置,可选性还是比较多的。
修改nginx.conf 文件的server:
1、创建新的httpsserver
2、设定http与https通用的server
3、只需要https方式,设定http跳转server
还有些比较小的问题,例如百度分享是http访问模式的接口。需要改下,目前用的较多的方法是将百度分享组件下载放到服务器文件,将访问链接改成相对模式。
第一步:下载百度分享必备文件
Github地址(推荐,2016.10.2更新):https://github.com/hrwhisper/baiduShare ,对应下载static文件夹及文件,放置到项目根目录。
最后一步:修改百度分享代码,将百度分享的src的http链接删去。。。
其他问题就是网站之前一些http链接的东西,例如图片等,个人斟酌修改。