参考文章:
这两篇文章写的非常好,本文是读后笔记
-------------------------------------------------------------------------------
  我们都知道日常上网使用的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. RGB565的转换

    RGB色彩模式也就是“红绿蓝”模式是一种颜色标准,是通过对红(R).绿(G).蓝(B)三种颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红.绿.蓝三个通道的颜色,这个标准几 ...

  2. [raspberry pi3] 编译安装chromium

    想要试试arm板上使用selenium是不是可能,发现Firefox什么的不顶用,网上有提供的chrome的安装手顺,但是没有arm版本的对应的chromedriver,只能自己搞了. 这边介绍的方法 ...

  3. winFrom程序更新自动安装

    我就以一个计算字符长度的程序为例子吧界面如下 代码如下 [C#] 纯文本查看 复制代码 ? 01 02 03 04 private void  button1_Click(object sender, ...

  4. HttpWebRequest,HttpWebResponse 使用

    目的:工作中已经两次使用了,特此记录一下,并写好注释 /// <summary> /// HttpWebRequest的基本配置 /// </summary> public c ...

  5. asp.net core tags 扩展之 id 和 name

    asp.net core 页面 TagHelper  的 Id 和 Name 属性扩展 . [HtmlTargetElement(Attributes = "asp-name")] ...

  6. c#线程-线程同步

    线程同步 上一篇介绍了如何开启线程,线程间相互传递参数,及线程中本地变量和全局共享变量区别. 本篇主要说明线程同步. 如果有多个线程同时访问共享数据的时候,就必须要用线程同步,防止共享数据被破坏.如果 ...

  7. Python3中装饰器的使用

    较为复杂的装饰器使用: user,passwd = 'hjc',111111 def auth(type): print('auth type:',type) def outwrapper(func) ...

  8. asp遍历前端的所有控件

    //遍历ID为Panel1的panel里的所有label控件 foreach (Control ctl in this.Panel1.Controls) { //判断类型为Label的 if (ctl ...

  9. [BZOJ4521][Cqoi2016]手机号码 (数位dp)

    题目描述 人们选择手机号码时都希望号码好记.吉利.比如号码中含有几位相邻的相同数字.不含谐音不吉利的数字等.手机运营商在发行新号码时也会考虑这些因素,从号段中选取含有某些特征的号码单独出售.为了便于前 ...

  10. 10.19 qbxt国庆day3

    最近的题都莫名简单 经常AK 炼金术 [问题描述] 即使是最伟大的ACM选手也是需要足够的金钱来把妹的的.于是ZYB发明了一台炼金机器. 这台机器一共有三个功能: 1.能把a位沙子变成b位石油. 2. ...