本文作者:茄果,专注前端开发领域,更多文章请关注知乎专栏《前端小事》

现在打开各大知名网站,你有没有发现地址栏都已经加了个绿色的小锁?

是的,这就是https,这就是https的时代。

然而,你了解https吗?

简单来说,https就是套在SSL/TLS内的http,也就是安全的http。何为安全?一个安全的网络通信环境要解决3个问题:

  1. 通信内容的保密
  2. 通信双方身份不可伪造
  3. 通信内容不被篡改

而https就是为了解决这3大问题而诞生的(准确来说应该是ssl),下面分别看看这3个问题的解决方案。

通信内容的保密

通信内容的保密需要通过加密来实现。我们的互联网环境是非常透明的,通信需要经过很多中转才能到接收方手中,这个情形有点像你上课的时候给第一排的小红递纸条一样,纸条上你肯定不会直接写今夜三更操场见,而是机灵地写了老地方见。这个老地方只有你和小红知道,这样就算小明小李看到了纸条,他也不知道老地方是图书馆还是英语角,这就是加密,而老地方就是所谓的密钥。

当然,这个例子并不是很准确。更具体的加解密就是一个功能函数,而密钥则是这个函数的参数。比如我们定义一个简单的加密函数,f(x)=x+b,x就是输入的明文,而b是密钥;解密函数就是加密函数的反函数,也就是g(x)=x-b。当不知道b的时候,你就算看到了密文也猜不出真实内容,这样就实现了加密。这种加解密都用同样的密钥的方式,叫对称加密。

但这里有个问题,这里的b怎么得到的?你和小红可以花前月下的时候约定,但是在真实网络环境中你和小红根本没有直接沟通的可能,所有沟通都要靠小明小李去传纸条的话怎么做呢?

这里就需要用到非对称加密算法了,这种算法有公钥和私钥一对钥匙,公钥是所有人都能获取到的钥匙,私钥则是服务器私自保密的钥匙。非对称加密算法中公钥加密的内容只能用私钥解密,私钥加密的内容则只有公钥才能解密。所以当你使用小红的公钥加密你的纸条之后,帮你传递纸条小明小李等人看到纸条也无法读取内容了,只有拥有私钥的小红才能读出你的信息。

对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。你可能比较好奇非对称加密算法的原理,但是我这里不展开讲算法,有兴趣的同学可以自行搜索。

那么问题来了,小红给你的回应也想加密怎么办?如果小红用她的私钥加密的话,班上所有人都知道公钥,而公钥可以解私钥的加密,也意味着所有人都能解密小红的回应消息。

聪明的你一定想到了解决方案:利用非对称加密算法加密出一个对称密钥给小红,小红用她的私钥读取对称密钥,然后你们就用这个对称密钥来做对称加密,然后就可以愉快地约约约了。

当然,https也是这么干的。

通信双方身份不可伪造

加密之后貌似通信过程就完美了?且慢,小红的公钥是怎么公告天下的呢?
要知道在网络环境中所有信息交互都是通过传纸条的方式来进行的,小红的公钥也不例外,万一在经过小明手里的时候被掉包了怎么办?怎么保证你手上的小红公钥是就是真正的小红公钥呢?

看到班上的痴男怨女的情书被各种掉包,文娱委员凤姐决定挺身而出。凤姐想出了一个办法,所有加密通信都要带上一本证,用来证明自己的身份。这本证是凤姐特意为班上所有单身狗做的,公钥就放在证书里面返回给纸条的发起人,证书里面除了公钥还有学号、人名、甚至星座身高三围等各种信息。证书上盖了一个大大的鉴定章,这是凤姐独有的章,表示证上的信息真实性由凤姐保证,看到这个章就可以认为对方是个真·单身狗

通过这些信息你就可以知道对方是小红还是如花了,这就是证书机制。

显然你会怀疑证书上凤姐的公章是有可能被伪造的,怀疑有理!所以证书上的公章也是非对称加密过的,加密方式跟上面提到的刚好相反:用凤姐的私钥加密,用凤姐公钥就可以解密,这样就可以鉴定证书的真伪。这个公章就是证书的数字签名,具体来说就是先将证书用哈希算法提取摘要,然后对摘要进行加密的过程。另外你也可以直接拿着证书去找凤姐,凤姐就会帮你验证证书的有效性。(证书是有期限的,所以即使是真证书也会可能过期,需要注意)

这个机制看起来相当完善,但是我们要以怀疑一切的态度去做安全机制,凤姐保证的东西是可信任的了。但是,凤姐真的是凤姐吗???

所以,凤姐本身也要由证书来保证,凤姐的证书由上一级的班主任颁发,而班主任的证书由校长颁发……这个链一直到最权威的几个机构,这些机构在https体系中就是所谓的根CA。根是不可怀疑的权威,他们为自己带盐,自己证明自己,也就是用自己的。在https证书体系里面,根证书是操作系统/浏览器自带的,我们可以相信被这些机构认证的证书的,从而一层一层推导到凤姐这个级别。

另外,由于证书其实很容易做,地铁口10块一本,无论哈佛还是斯坦福统统10块啦,还自带超大的公章一枚,所以有些公司会自己做证书,根本不去找根CA机构,比如著名的12306。你也可以自己做证书放到网上让用户下载导入浏览器,但因为你没有凤姐的影响力,所以没人会相信你,当然你也许连凤姐都不相信……

通信内容不被篡改

密也加了,凤姐也出来了,是不是这套机制就perfect了呢?NoNoNo,想一下暗恋着你的小明看到你给小红传纸条,心里肯定不爽,虽然看不懂但是还是可以改密文呀。本来你是要约小红半夜三更操场见,结果小明删掉了前半部分的密文,解密后恰好变成了“操场见”,然后小红下课马上往操场跑,而你却跑回宿舍好好洗了个澡……然后,然后小红就跟小明跑了。这种篡改通信内容的场景相信大家都深有体会,我们访问一些站点的时候无缘无故就出现了运营商的广告,这就是运营商给我们的目标站点加料了!!

所以内容的完整性也需要保证,这比较简单:先用哈希算法提取内容摘要,然后对摘要进行加密生成数字签名,验证数字签名就可以判断出通信内容的完整性了。

以上就是https用到技术的简化版,一个http通信流程如下:

大体步骤:

  1. 客户端发送Client Hello报文开始SSL通信,报文中包含SSL版本、可用算法列表、密钥长度等。
  2. 服务器支持SSL通信时,会以Server Hello报文作为应答,报文中同样包括SSL版本以及加密算法配置,也就是协商加解密算法。
  3. 然后服务器会发送Certificate报文,也就是将证书发送给客户端。
  4. 客户端发送Client Key Exchange报文,使用3中的证书公钥加密Pre-master secret随机密码串,后续就以这个密码来做对称加密进行通信。
  5. 服务器使用私钥解密成功后返回一个响应提示SSL通信环境已经搭建好了。
  6. 然后就是常规的http c/s通信。

根据前文所述,在步骤3和步骤6都会使用摘要和签名算法来保证传递的证书和通信内容不被篡改。通过这个流程可以看出,https的核心在于加密,尤其是非对称加密算法被多次使用来传送关键信息。

理解了加密,认识到网络的透明性,抱着怀疑一切的态度,理解https这套体系就变得简单了。

结语

最近在系统地重温http相关的东西,这一篇先介绍了https的基本原理,才疏学浅,文中有不当之处,还望斧正!
后续会介绍https的实际应用、静态服务器的配置等。

附录:未了解https前的一些困惑点

https如何避免中间人劫持?

首先,在申请证书的时候CA会对所要申请的域名进行控制权认证,所以你是不可能用隔壁老王的网站来申请证书的。就算你黑了他的站点,只要老王去申请证书的时候就能发现了。如果中间人劫持了你的dns服务器,将www.icbc.com的解析为中间人的网站,再伪造一个证书,这个证不是权威CA签发的,那么浏览器检查的时候会报警提示用户证书非法。当然用户仍然可以继续操作,比如抢火车票什么的。。。证书上的域名也是www.icbc.com,只是将公钥替换掉。那么浏览器比对证书数字签名的时候就能发现对不上了,二话不说,报警。如果中间人直接用www.icbc.com的真实证书,那么他虽然能收到客户端的消息,但是无法解密,所以也无法响应客户端的请求,劫持无效!

证书的数字签名

之前对哈希算法和数字签名了解不多,了解之后发现其实原理还是挺简单的。哈希算法可以将大量的数据转换成定长的摘要,而且摘要是与输入对应的,输入变化后摘要也会发生变化。所以对数据应用哈希算法求出摘要,比对摘要就可以判断数据是否被篡改过了。证书使用了私钥加密摘要,然后客户端就可以用公钥解密得到摘要,对比哈希算法算出来的摘要就可以判断证书是否被篡改过。另一方面,因为公私钥是成对的,篡改后的证书虽然能求出摘要,但是无法加密出签名,所以摘要和加密组合使用就可以保证证书的真实性了。这里的私钥是证书的发证机构的私钥,也就是CA链上CA加密用户服务器证书,上级CA加密下级CA的证书,从而形成一个信任环。

本文作者:茄果,专注前端开发领域,更多文章请关注知乎专栏《前端小事》

***原创文章,转载请注明出处!本文链接:http://www.cnblogs.com/qieguo/p/6280292.html***

https时代来了,你却还一无所知?的更多相关文章

  1. 全球HTTPS时代已来,你跟上了吗?

    全球HTTPS时代已来,你跟上了吗? 互联网发展20多年,大家都习惯了在浏览器地址里输入HTTP格式的网址.但前两年,HTTPS逐渐取代HTTP,成为传输协议界的"新宠". ​ 早 ...

  2. HTTPS时代已来,你做好准备了吗?

    早在今年年初,Google在其安全博客上已经表明,从7月开始,Chrome68会将所有的HTTP网站标记为不安全.随后,Mozilla也表明,Firefox浏览器也准备将所有HTTP网站标记为不安全. ...

  3. HTTPS时代全面到来,你准备好了吗?

    近一年可能有很多朋友发现在使用百度搜索时,是这个样子的 如我们所见,浏览器地址栏里的HTTP可能将成为永远的过去时,取而代之的是更安全的HTTPS. 首先,HTTPS是什么? HTTPS是Http O ...

  4. 全民https时代,Let's Encrypt免费SSL证书的申请及使用(Tomcat版)

    近几年,在浏览器厂商的强力推动下,HTTPS的使用率大增.据统计,Firefox加载的网页中启用HTTPS的占比为67%,谷歌搜索结果中HTTPS站点占比已达50%,HTTPS网站已获得浏览器和搜索引 ...

  5. Windows XP时代终结:假设你还在用它怎么办

    2014 年 4 月 8 日.是Windows XP退休的日子. 4 月 8 日过后,Windows XP 的安全性更新将停止了. watermark/2/text/aHR0cDovL2Jsb2cuY ...

  6. 【转】互联网全站HTTPS的时代已经到来

    原文地址:http://blog.csdn.net/luocn99/article/details/39777707 前言 我目前正在从事HTTPS方面的性能优化工作.在HTTPS项目的开展过程中明显 ...

  7. 为什么全世界都对HTTPS抛出了橄榄枝,HTTPS到底有什么好?HTTPS如何配置?

    整个互联网世界,正从"裸奔"向HTTPS时代转型. 淘宝.天猫在2015年完成规模巨大的数据"迁徙",将百万计的页面从HTTP切换到HTTPS:苹果要求所有iO ...

  8. 全站 HTTPS 来了

    !版权声明:本文为腾讯Bugly原创文章,转载请注明出处腾讯Bugly特约作者:刘强 最近大家在使用百度.谷歌或淘宝的时候,是不是注意浏览器左上角已经全部出现了一把绿色锁,这把锁表明该网站已经使用了 ...

  9. 全站 HTTPS 来了(转载)

    转载:本文为腾讯Bugly原创文章. 最近大家在使用百度.谷歌或淘宝的时候,是不是注意浏览器左上角已经全部出现了一把绿色锁,这把锁表明该网站已经使用了 HTTPS 进行保护.仔细观察,会发现这些网站已 ...

随机推荐

  1. 客户端Webview重定向

    今天在客户端的网页中写了句alert的代码,发现执行了两次,后来发现网页的地址写的是http://192.168.14.72/app 客户端Webview加载网页,对于不完全路径会重定向到完全路径,导 ...

  2. placeholder 属性的支持

    placeholder 是HTML5的. 在IE6-8中不能使用.可以使用  JQ 来设置. 给input一个value, JQ判断得到焦点时  value="": 移开焦点时,若 ...

  3. ajax的get请求

    get和post是http请求方法最主要的两种方式. get: 先实现一个简单的get请求 index.html <!DOCTYPE html> <html lang="e ...

  4. ODBC操作数据库

    /*ODBC使用步骤:(ODBC数据源由微软平台提供) * 1.配置ODBC数据源(控制面板->管理工具->ODBC数据源) * 2.加载并注册驱动程序,导入java.sql.*包 * 3 ...

  5. vue.js源码精析

    MVVM大比拼之vue.js源码精析 VUE 源码分析 简介 Vue 是 MVVM 框架中的新贵,如果我没记错的话作者应该毕业不久,现在在google.vue 如作者自己所说,在api设计上受到了很多 ...

  6. JAVA实例化class的三种方式

    不多说  直接上例子 package org.lxh.demo15.getclassdemo ; class X{ }; public class GetClassDemo02{ public sta ...

  7. WebService支持多平台上传文件的实现

    WebService支持多平台上传文件的实现   要使用网站上传文件,在ASP.NET的范畴,我基本上能想到的有两类,一类是通过HTTP POST请求获得文件信息,另外一类是通过WebService或 ...

  8. 调式WP程序报0x80131500错误的解决办法

    在虚拟机上安装了win8系统和VS2013,但是在允许第一个WP程序时,居然报0x80131500错误信息,经查询原来是VS2013需更新的问题,如果你用的是VS2012,但是又系统升级到了win8. ...

  9. vim实用笔记

    vim实用笔记   真是不知不觉过了一年,前段时间忙着考试什么的,没再写笔记写博客,考完又懒懒地玩了几天.这几天其实都在读别人的博客,感受一下大神的工作和生活感悟,感受一下过来人的经历和经验,对自己总 ...

  10. .NET编程规范

    .NET开发编程规范 第1章 程序的版式 版式虽然不会影响程序的功能,但会影响可读性.程序的版式追求清晰.美观,是程序风格的重要构成因素. 可以把程序的版式比喻为"书法".好的&q ...