参考文章:
这两篇文章写的非常好,本文是读后笔记
-------------------------------------------------------------------------------
  我们都知道日常上网使用的http协议是不安全的,比如日常开发中我们就可以利用一些工具比如青花瓷等进行抓包,然后更改请求内容进行发送。中间人(黑客)当然也可以这么做,这样的话我们的信息安全水平就非常的低,对于银行转账一类的操作就无法在网上进行,基于安全的需求,也就诞生了https。通常我们说https协议是加密的http协议,是安全的,这么说也没有错,但实际上https要比http复杂的多的多的多。
想信息不被获取或更改,我们最先想到的办法是加密。客户端跟服务端在不见面的情况下,密钥如何传递就是个问题。关于这个问题,参见:http://blog.jobbole.com/113883/
通过信鸽问题理解了https的逻辑处理过程,我们来看https具体是如何处理的。
几个角色跟名词:
  客户端:理解为我们日常上网的pc
  服务端:各个网站的服务器,比如银行网站服务器
  中间人:黑客,介于客户端跟服务端中间,从网络上窃取数据的不明人士
  证书:客户端识别服务器返回信息是否经过篡改的依据文件
  认证机构:制作证书的公司
  数字签名:证书中的一部分内容,用于跟其他内容联合鉴别证书真伪
服务端搭建过程
  网站管理员从认证机构申请证书,然后搭建网站,并将证书放到网站服务器上。申请证书的过程根据证书颁发机构的不同略有差异,具体部署网站的过程也跟所使用web服务器是nginx,apache还是tomcat的不同而不同。
客户端访问
  客户端通过浏览器访问网站,网站返回证书给客户端,证书中包含加密算法,公钥等相关信息(这些信息是被加密的)。客户端拿到证书后进行解密,获取服务端所给的公钥。这里有个问题,服务端所给的证书是加密的,客户端拿到后是怎么解密的呢?总不能再请求一次证书颁发机构获取解密信息吧,这访问量有点大,也不安全;实际上,客户端操作系统或者浏览器中就包含证书如何解密的信息,这些内容是证书颁发机构跟操作系统厂商浏览器厂商协调沟通后内置进去的,这里边主要内容就是颁发机构加密证书对应的公钥(认证机构加密证书用的私钥)。
  题外话:由于证书的解密方式是内置到操作系统中或浏览器的,如果证书是可信任的,访问的时候就可以正常访问,并且地址栏会有绿色的锁头标志,点击可以查看证书信息,如果证书不可信任,浏览器就会提示“您的连接不是私密连接”。那么问题来了,网站如果不使用https,用户信息就有泄露的危险,如果使用自己制作的,就会有提示而且页面看上去挺有问题的,那只能找认证机构购买证书交保护费了。对了,既然证书公钥可以在浏览器上,如果我自己开发一个浏览器,,,那显示谁有问题不就是我说了算么,哎呀,一本万利的买卖啊,,,难怪难怪。
交互过程
  现在客户端拿到了网站返回的证书,然后用本地浏览器内置的公钥打开证书,拿到网站给的公钥,然后就可以用公钥加密信息跟网站进行通信了。不过https(实际是ssl)不是这么干的,因为非对称加密效率一般,不如对称加密来的快,所以一般是用公钥加密一个对称加密的密钥给服务端,然后双方用这个对称加密的密钥加密信息进行通信;这就是为什么https既有对称加密又有非对称加密的原因。
思考
  这个过程真的安全吗?
  1、如果中间人也有有认证机构的公钥,解开了证书内容拿到了网站公钥
    a、如果不修改网站公钥,那么下次客户端发来的加密私钥就无法解读(中间人没有网站私钥)
    b、如果修改了网站公钥,证书就会被客户端识别错误(证书会根据网站域名,公钥等信息生成一个证书编号,客户端会根据证书描述,计算自己生成的证书编号跟证书中的是否相同,不同则被修改。中间人想要篡改证书,就要了解认证机构的证书编号生成规则,这个是基本无法做到的,因此伪造证书难度非常高)。
  2、如果中间人也从认证机构申请了证书,对客户端申请的证书进行了调包
这种情况下,中间人有自己证书的私钥,只要客户端信任这个证书就万事ok。很遗憾,也不行,因为当初中间人从认证机构申请证书的时候也需要填写域名等相关信息,这些也是客户端证书校验的一部分,中间人的域名跟客户端请求的网站地址肯定是不一样的(要不那个中间人就是真实网站了),也就导致证书无法验证通过。
-------------------------------------------------------------------------------
工作中用到https,简单记一下,权作笔记吧

https的设计原理的更多相关文章

  1. BigPipe设计原理

    高性能页面加载技术--BigPipe设计原理及Java简单实现 1.技术背景 动态web网站的历史可以追溯到万维网初期,相比于静态网站,动态网站提供了强大的可交互功能.经过几十年的发展,动态网站在互动 ...

  2. 一篇读懂HTTPS:加密原理、安全逻辑、数字证书等

    1.引言 HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.本文,就来深入介绍下其 ...

  3. 一文读懂Https的安全性原理、数字证书、单项认证、双项认证等

    本文引用了作者Smily(博客:blog.csdn.net/qq_20521573)的文章内容,感谢无私分享. 1.前言 目前苹果公司已经强制iOS应用必须使用HTTPS协议开发(详见<苹果即将 ...

  4. 高性能页面加载技术--BigPipe设计原理及Java简单实现

    1.技术背景 动态web网站的历史可以追溯到万维网初期,相比于静态网站,动态网站提供了强大的可交互功能.经过几十年的发展,动态网站在互动性和页面显示效果上有了很大的提升,但是对于网站动态网站的整体页面 ...

  5. HTML5设计原理

    HTML5是Web标准的巨大飞跃,它为什么要包含那些东西,它背后的设计原则是什么? <JavaScript DOM编程艺术>和<HTML5 For Web Designer>作 ...

  6. 【Redis】四、Redis设计原理及相关问题

    (六)Redis设计原理及相关问题   通过前面关于Redis五种数据类型.相关高级特性以及一些简单示例的使用,对Redis的使用和主要的用途应该有所掌握,但是还有一些原理性的问题我们在本部分做一个探 ...

  7. http 和 https(通俗原理了解)

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...

  8. 1.http 协议和 https 协议的原理

    首先,我们得知道应用层是 OSI 七层网络模型的第七层,不同类型的网络应用有不同的通信规则,因此应用层协议是多种多样的,比如 DNS.FTP.Telnet.SMTP.HTTP. 等协议都是用于解决其各 ...

  9. RocketMQ详解(四)核心设计原理

    专题目录 RocketMQ详解(一)原理概览 RocketMQ详解(二)安装使用详解 RocketMQ详解(三)启动运行原理 RocketMQ详解(四)核心设计原理 RocketMQ详解(五)总结提高 ...

随机推荐

  1. 【转】虚拟机 NAT网络设置

    我以下写的配置方法别人在网上已经发布过类似的文章.但是我觉的别人写的东西不一定是对的,必须自己亲自试验一下才行.就像有句话说的:“实践是检验真理的唯一标准”以下是我操作的步骤.希望不足的地方,读者能够 ...

  2. MacBook Pro (13 英寸, 2017 年)安装win10系统

    准备: windows10系统镜像 16G或更大容量U盘(存放驱动,必须格式化为FAT) 官方提供的驱动软件 详细步骤: 1.打开Bootcamp,选择镜像文件 2.点击下一步,选择Bootcamp分 ...

  3. jQuery到Vue的迁移之路

    背景 在前段时间做了L10的某个超复杂超多坑的三端专题之后,组里的小伙伴们一致认为是时候想办法统一一下组里的开发模式了.因为用nie那一套jQuery/zepto(下文jQuery默认包括zepto) ...

  4. windows下启动Apache报443错误!

    windows下启动apache报make_sock: could not bind to address [::]:443错误! 查看指定端口的占用情况 netstat -aon|findstr & ...

  5. selenium自动化测试、Python单元测试unittest框架以及测试报告和日志输出

    部分内容来自:https://www.cnblogs.com/klb561/p/8858122.html 一.基础介绍 核心概念:test case, testsuite, TestLoder,Tex ...

  6. Glib学习笔记(三)

    你将学到什么 如何实现Object的方法 Object的方法 Object的public方法 在头文件声明一个函数,然后在源文件中实现函数即可 /* declaration in the header ...

  7. ubuntu - 14.04,创建菜单

    我们有的时候可能会把一个执行程序放到一个位置,随后我们希望在ubuntu的菜单里面加入它,这个操作非常简单: 我在Gnome桌面里,选择:“系统工具”->“首选项”->"主菜单& ...

  8. cuda by example

    int offset= x+y*dim   x 线程块内的线程索引 y 线程块索引 dim 线程块的维度   tid = threadIdx.x+blockIdx.x*blockDim.x 计算大于或 ...

  9. iOS 11 ScrollView偏移问题解决

    if (@available(iOS 11.0, *)){//避免滚动视图顶部出现20的空白以及push或者pop的时候页面有一个上移或者下移的异常动画的问题 [[UIScrollView appea ...

  10. 小程序首页不显示tabBar

    app.json中配置了tabBar,但是首页不想显示,首页跳转时使用 wx.redirectTo和wx.navigateTo无法完成跳转 这时用到了 wx.switchTab 可以实现我们的需求,首 ...