http和https区别
http和https区别
超文本传输协议 HTTP 协议被用于在 Web 浏览器和网站服务器之间传递信息,HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了 Web 浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP 协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
为了解决 HTTP 协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议 HTTPS,为了数据传输的安全,HTTPS 在 HTTP 的基础上加入了 SSL 协议,SSL 依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
一、HTTP 和 HTTPS 的基本概念
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
HTTPS 协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
二、HTTP 与 HTTPS 有什么区别?
HTTP 协议传输的数据都是未加密的,也就是明文的,因此使用 HTTP 协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了 SSL(Secure Sockets Layer)协议用于对 HTTP 协议传输的数据进行加密,从而就诞生了 HTTPS。
HTTPS 加密、加密、及验证过程,如下图所示:
简单来说,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 http 协议安全。
HTTPS 和 HTTP 的区别主要如下:
1、https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。
2、http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。
3、http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
4、http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。
三、HTTPS 的工作原理
我们都知道 HTTPS 能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用 HTTPS 协议。
1、客户端发起 HTTPS 请求
这个没什么好说的,就是用户在浏览器里输入一个 https 网址,然后连接到 server 的 443 端口。
2、服务端的配置
采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面 (startssl 就是个不错的选择,有 1 年的免费服务)。
这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。
3、传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
4、客户端解析证书
这部分工作是有客户端的 TLS 来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。
如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
5、传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
6、服务段解密信息
服务端用私钥解密后,得到了客户端传过来的随机值 (私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
7、传输加密后的信息
这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。
8、客户端解密信息
客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。
四、搜索引擎对 HTTPS 的态度
百度推出了全站 HTTPS 加密搜索服务,以此解决 “第三方” 对用户隐私的嗅探和劫持,其实,早在 2010 年 5 月份,谷歌便开始提供 HTTPS 加密搜索服务,在 HTTPS 网页的抓取问题上,百度在 2014 年 9 月份的一份公告中表示“百度不会主动抓取 HTTPS 网页”,谷歌在算法更新中则表示“同等条件下,使用 HTTPS 加密技术的站点在搜索排名上更具优势”。
那么,在这种大环境下,站长是否该采用 “具有风险” 的 HTTPS 协议呢?HTTPS 对搜索引擎的 SEO 影响又如何呢?
1、谷歌的态度
谷歌在 HTTPS 站点的收录问题上与对 HTTP 站点态度并无什么不同之处,甚至把 “是否使用安全加密”(HTTPS)作为搜索排名算法中的一个参考因素,采用 HTTPS 加密技术的网站能得到更多的展示机会,排名相对同类网站的 HTTP 站点也更有优势。
而且谷歌曾明确表示 “希望所有的站长都能将使用 HTTPS 协议,而非 HTTP” 更是表明了其对达到 “HTTPS everywhere” 这一目标的决心。
2、百度的态度
虽然百度曾表示 “不会主动抓取 https 网页”,但对于“很多 https 网页无法被收录” 也是 “耿耿于怀”,去年 9 月份,百度曾就“https 站点如何建设才能对百度友好” 问题发布了一篇文章,给出了 “提高 https 站点的百度友好度” 的四项建议及具体操作。
此外,近日的 “百度全站 HTTPS 加密搜索” 事件也再次彰显了百度对 HTTPS 加密的重视,可见,百度并不 “反感”HTTPS 站点,所以“不主动抓取” 应该也只是暂时的吧!
五、HTTPS 要比 HTTP 多用多少服务器资源?
HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 多用多少服务器资源,马海祥认为主要看 SSL/TLS 本身消耗多少服务器资源。
HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包(具体可查看马海祥博客《HTTP 服务的七层架构技术解析及运用》的相关介绍);HTTPS 除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
HTTP 建立连接,按照下面链接中针对 Computer Science House 的测试,是 114 毫秒;HTTPS 建立连接,耗费 436 毫秒,ssl 部分花费 322 毫秒,包括网络延时和 ssl 本身加解密的开销(服务器根据客户端的信息确定是否需要生成新的主密钥;服务器回复该主密钥,并返回给客户端一个用主密钥认证的信息;服务器向客户端请求数字签名和公开密钥)。
当 SSL 连接建立后,之后的加密方式就变成了 3DES 等对于 CPU 负荷较轻的对称加密方式,相对前面 SSL 建立连接时的非对称加密方式,对称加密方式对 CPU 的负荷基本可以忽略不记,所以问题就来了,如果频繁的重建 ssl 的 session,对于服务器性能的影响将会是致命的,尽管打开 HTTPS 保活可以缓解单个连接的性能问题,但是对于并发访问用户数极多的大型网站,基于负荷分担的独立的 SSL termination proxy 就显得必不可少了,Web 服务放在 SSL termination proxy 之后,SSL termination proxy 既可以是基于硬件的,譬如 F5;也可以是基于软件的,譬如维基百科用到的就是 Nginx。
那采用 HTTPS 后,到底会多用多少服务器资源,2010 年 1 月 Gmail 切换到完全使用 HTTPS, 前端处理 SSL 机器的 CPU 负荷增加不超过 1%,每个连接的内存消耗少于 20KB,网络流量增加少于 2%,由于 Gmail 应该是使用 N 台服务器分布式处理,所以 CPU 负荷的数据并不具有太多的参考意义,每个连接内存消耗和网络流量数据有参考意义,这篇文章中还列出了单核每秒大概处理 1500 次握手(针对 1024-bit 的 RSA),这个数据很有参考意义。
Heartbleed 这个被称作史上最大的网络安全漏洞,想必很多人都有所耳闻,Heartbleed 之所以能够出现,其实和我们这个问题关系还不小,前面我们谈到了频繁重建 SSL/TLS 的 session 对于服务器影响是致命的,所以,聪明的 RFC 在 2012 年提出了 RFC6520 TLS 的心跳扩展,这个协议本身是简单和完美的,通过在客户端和服务器之间来回发送心跳的请求和应答,保活 TLS session,减少重建 TLS 的 session 的性能开销,令人遗憾的是,openssl 在实现这个心跳扩展时,犯了一个低级的错误,没有对收到的心跳请求进行长度检查,直接根据心跳请求长度拷贝数据区,导致简单的心跳应答中可能包含了服务器端的核心数据区内容,用户名,密码,信用卡信息,甚至服务器的私有密钥都有可能泄露。
六、HTTPS 的优点
正是由于 HTTPS 非常的安全,攻击者无法从中找到下手的地方,从站长的角度来说,HTTPS 的优点有以下 2 点:
1、SEO 方面
谷歌曾在 2014 年 8 月份调整搜索引擎算法,并称 “比起同等 HTTP 网站,采用 HTTPS 加密的网站在搜索结果中的排名将会更高”。
2、安全性
尽管 HTTPS 并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但 HTTPS 仍是现行架构下最安全的解决方案,主要有以下几个好处:
(1)、使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
(2)、HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 http 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
(3)、HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
七、HTTPS 的缺点
虽然说 HTTPS 有很大的优势,但其相对来说,还是有些不足之处的,具体来说,有以下 2 点:
1、SEO 方面
据 ACM CoNEXT 数据显示,使用 HTTPS 协议会使页面的加载时间延长近 50%,增加 10% 到 20% 的耗电,此外,HTTPS 协议还会影响缓存,增加数据开销和功耗,甚至已有安全措施也会受到影响也会因此而受到影响。
而且 HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。
最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
2、经济方面
(1)、SSL 证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
(2)、SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗(SSL 有扩展可以部分解决这个问题,但是比较麻烦,而且要求浏览器、操作系统支持,Windows XP 就不支持这个扩展,考虑到 XP 的装机量,这个特性几乎没用)。
(3)、HTTPS 连接缓存不如 HTTP 高效,大流量网站如非必要也不会采用,流量成本太高。
(4)、HTTPS 连接服务器端资源占用高很多,支持访客稍多的网站需要投入更大的成本,如果全部采用 HTTPS,基于大部分计算资源闲置的假设的 VPS 的平均成本会上去。
(5)、HTTPS 协议握手阶段比较费时,对网站的相应速度有负面影响,如非必要,没有理由牺牲用户体验。
八、网站是否需要采用 HTTPS 加密?
虽然谷歌和百度都对 HTTPS“另眼相看”,但这并不意味着站长们都应该把网站协议转换成 HTTPS 的!
早在去年 9 月份,Moz 就针对 “采用 HTTPS 协议” 展开了一项调查,结果如下图:
注:调查开展时间在谷歌宣布 “使用 HTTPS 协议的网站可以获得更好的排名” 后
如上图所示,在此项调查中,17.24% 的站长表示其网站已采用 HTTPS 协议;24.9% 的站长表示正在搭建中;57.85% 的站长表示目前仍无此项计划,从这些数据可以看出,当时大部分的站长还是没有选择使用 HTTPS 协议,那么,站长们到底该不该选择有利有弊的 HTTPS 协议呢?
从这些数据可以看出,当时大部分的站长还是没有选择使用 HTTPS 协议,那么站长们到底该不该选择有利有弊的 HTTPS 协议呢?
首先说说谷歌方面,虽然谷歌不断强调 “使用 HTTPS 加密技术的网站能获得更好的排名”,但也不能排除这是“别有用心” 之举。
国外分析师就曾针对这一问题表示:谷歌之所以做出这一举动(更新算法,将是否采用 HTTPS 加密技术作为搜索引擎排名的的一个参考因素)也许并非是为了提高用户的搜索体验和互联网安全问题,只是为了挽回在 “棱镜门” 丑闻中的 “损失”,这是一个典型的打着“牺牲小我” 旗号的利我之举,高举 “安全影响排名” 旗帜、高呼 “HTTPS everywhere” 口号,然后不费吹灰之力让广大站长们心甘情愿的投入 HTTPS 协议阵营。
然后是百度方面,虽然百度宣布全站进入 HTTPS 加密搜索时代,但至今仍 “不会主动抓取 HTTPS 页面”,也从未就“未来是否会调整算法” 问题表过态,如果站长在采用 HTTPS 协议后仍需制作个“http 可访问版”、或是通过 301 重定向“自动跳入 https 版本”,那么,采用 HTTPS 协议的代价就不再只是多花 money 的问题了。
在思考 “到底该不该采用 HTTPS 协议” 这个问题时,多考虑考虑怎样做对你的用户更友好吧(具体可查看马海祥博客《从 SEO 的角度来分析网站是否该采用 HTTPS 协议》的相关介绍)!
如果你的网站属于电子商务、金融、社交网络等领域的话,那最好是采用 HTTPS 协议;如果是博客站点、宣传类网站、分类信息网站、或者是新闻网站之类的话,大可不必跟风而行,毕竟 HTTPS 协议不仅耗钱,浪费精力,而且暂时也不利于网站的 SEO 工作。详情可查看:我到底该不该用 “影响搜索排名” 的 HTTPS?
九、站长如何搭建 HTTPS 站点?
说到 HTTPS 站点的搭建,就不得不提到 SSL 协议,SSL 是 Netscape 公司率先采用的网络安全协议,它是在传输通信协议(TCP/IP)上实现的一种安全协议,采用公开密钥技术,SSL 广泛支持各种类型的网络,同时提供三种基本的安全服务,它们都使用公开密钥技术。
1、SSL 的作用
(1)、认证用户和服务器,确保数据发送到正确的客户机和服务器;
(2)、加密数据以防止数据中途被窃取;
(3)、维护数据的完整性,确保数据在传输过程中不被改变。
而 SSL 证书指的是在 SSL 通信中验证通信双方身份的数字文件,一般分为服务器证书和客户端证书,我们通常说的 SSL 证书主要指服务器证书,SSL 证书由受信任的数字证书颁发机构 CA(如 VeriSign,GlobalSign,WoSign 等),在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能,分为扩展验证型 (EV)SSL 证书、组织验证型 (OV)SSL 证书、和域名验证型(DV)SSL 证书。
2、SSL 证书申请的 3 个主要步骤
对于 SSL 证书的申请,主要有以下 3 个步骤:
(1)、制作 CSR 文件
所谓 CSR 就是由申请人制作的 Certificate Secure Request 证书请求文件,制作过程中,系统会产生 2 个密钥,一个是公钥就是这个 CSR 文件;另外一个是私钥,存放在服务器上。
要制作 CSR 文件,申请人可以参考 WEB SERVER 的文档,一般 APACHE 等,使用 OPENSSL 命令行来生成 KEY+CSR2 个文件,Tomcat,JBoss,Resin 等使用 KEYTOOL 来生成 JKS 和 CSR 文件,IIS 通过向导建立一个挂起的请求和一个 CSR 文件。
(2)、CA 认证
将 CSR 提交给 CA,CA 一般有 2 种认证方式:
①、域名认证:一般通过对管理员邮箱认证的方式,这种方式认证速度快,但是签发的证书中没有企业的名称。
②、企业文档认证:需要提供企业的营业执照,一般需要 3-5 个工作日。
也有需要同时认证以上 2 种方式的证书,叫 EV 证书,这种证书可以使 IE7 以上的浏览器地址栏变成绿色,所以认证也最严格。
(3)、证书的安装
在收到 CA 的证书后,可以将证书部署上服务器,一般 APACHE 文件直接将 KEY+CER 复制到文件上,然后修改 HTTPD.CONF 文件;TOMCAT 等,需要将 CA 签发的证书 CER 文件导入 JKS 文件后,复制上服务器,然后修改 SERVER.XML;IIS 需要处理挂起的请求,将 CER 文件导入。
十、免费证书推荐
使用 SSL 证书不仅能让信息的安全性更有保障,还可以提高用户对于网站的信任度,但鉴于对建站成本的考虑,很多站长对其望而却步,在网络上免费始终是一个永远不过时的市场,主机空间有免费的,而 SSL 证书自然也有免费的,此前,便有消息称,Mozilla、思科、Akamai、IdenTrust、EFF、以及密歇根大学的研究人员将开启 Let’s Encrypt CA 项目,计划从今夏开始,为网站提供免费 SSL 证书以及证书管理服务(注:如需更高级的复杂证书,则需付费),同时,还降低了证书安装的复杂程度,安装时间仅需 20-30 秒。
而需要复杂证书的往往是大中型网站,诸如个人博客之类的小型站点完全可以先尝试免费 SSL 证书,如果想要购买低价 SSL 证书可查看站长之家之前发布的文章:如何购买廉价 SSL 证书?。
下面马海祥博客再为大家介绍几款免费 SSL 证书,比如:CloudFlare SSL、StartSSL、Wosign 沃通 SSL、NameCheap 等。
1、CloudFlare SSL
CloudFlare 是美国一家提供 CDN 服务的网站,在世界各地都有自己的 CDN 服务器节点,国内外很多大型公司或者网站都在使用 CloudFlare 的 CDN 服务,当然国内站长最常用的就是 CloudFlare 的免费 CDN,加速也很好,CloudFlare 提供的免费 SSL 证书是 UniversalSSL,即通用 SSL,用户无需向证书发放机构申请和配置证书就可以使用的 SSL 证书,CloudFlare 向所有用户 (包括免费用户) 提供 SSL 加密功能,web 界面 5 分钟内就设置好证书,24 小时内完成自动部署,为网站的流量提供基于椭圆曲线数字签名算法(ECDSA)的 TLS 加密服务。
2、StartSSL
StartSSL 是 StartCom 公司旗下的 SSL 证书,提供免费 SSL 证书服务,且 StartSSL 被包括 Chrome、Firefox、IE 在内的主流浏览器支持,几乎所有的主流浏览器都可以正常识别 StartSSL,任何个人都可以从 StartSSL 中申请到免费一年的 SSL 证书。
3、Wosign 沃通 SSL
Wosign 沃通是国内一家提供 SSL 证书服务的网站,其免费的 SSL 证书申请比较简单,在线开通,一个 SSL 证书只能对应一个域名,支持证书状态在线查询协议 (OCSP)。
4、NameCheap
NameCheap 是一家领先的 ICANN 认可的域名注册和网站托管公司,成立于 2000 年,该公司提供免费 DNS 解析,网址转发(可隐藏原 URL,支持 301 重定向)等服务,此外,NameCheap 还提供了一年的 SSL 证书免费服务。