参考文章:
这两篇文章写的非常好,本文是读后笔记
-------------------------------------------------------------------------------
  我们都知道日常上网使用的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. jQuery+css实现tab功能

    点击我我会消失 Click me 点击按钮我会消失,再点击我会出现 演示tab tab1 tab2 tab3 [环球时报记者 郭芳] “中国秘密发射新快速响应火箭”,25日,在中国官方媒体报道我国“快 ...

  2. [raspberry pi3] aarch64 mongodb 编译和安装

    raspberry pi3官方支持是32bit的系统,使用mongodb的时候有2G数据库大小的限制,32bit的系统上数据大点基本上就可以认为不能用了,所以要装64bit的opensuse. 安装了 ...

  3. Dynamic Rankings(整体二分)

    Dynamic Rankings(整体二分) 带修区间第k小.\(n,q\le 10^4\). 这次我们旧瓶装新酒,不用带修主席树.我们用整体二分!整体二分是啥东西呢? 二分答案可以解决一次询问的问题 ...

  4. 形态形成场(矩阵乘法优化dp)

    形态形成场(矩阵乘法优化dp) 短信中将会涉及前\(k\)种大写字母,每个大写字母都有一个对应的替换式\(Si\),替换式中只会出现大写字母和数字,比如\(A→BB,B→CC0,C→123\),代表 ...

  5. Python和FTP

    1.HTTP主要用于基于Web的文件下载以及访问Web服务,一般客户端无须登录就可以访问服务器上的文件和服务.大部分HTTP文件传输请求都用于获取网页(即将网页文件下载到本地). 2.FTP主要用于匿 ...

  6. luogu2723 丑数

    提供一种单调队列做法(非正解) 显然每一个丑数能够由一个质数乘以另一个丑数得到 所以我们开k个单调递增队列,每次从这些队列顶部找到一个最小的元素把他捞出来,然后枚举所有质数,用这个元素乘以质数,放入相 ...

  7. win10全半角切换

    shift+sapce shift+sapce:全半角切换快捷键,编程的时候发现英文是这种状态,就需要用快捷键切换成半角. (查过老是忘记,在这里写一下记住它)

  8. C++11 特性:成员函数引用限定 (Reference qualifier)

    学了这么多年C++今天拜读scott meyes的more effective cpp第一次看到这种写法... 引用限定可以让成员函数只能被左值对象调用或者只能被右值对象调用: #include &l ...

  9. Linux下的hosts文件和network文件区别

    Linux下的hosts文件和network文件区别   Linux下有两种与计算机名相关的配置文件     1.hosts文件,路径:/etc/hosts,此文间是在网络上使用的, 用于解析计算机名 ...

  10. PHP中SESSION无法获取问题

    近期在看公司老项目,前台可以正常访问,但是后台却无法登录,一直报请求超时,请重新登录!进入服务后发现是有一处SESSION的值无法获取,这就让人很郁闷了,通常SESSION无法使用都是因为没有使用se ...