参考文章:
这两篇文章写的非常好,本文是读后笔记
-------------------------------------------------------------------------------
  我们都知道日常上网使用的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. [译]我们应该在HTML文档中何处放script标签

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

  2. sql语句增加字段 索引

    alter table order_info add area varchar(50) create index group_compar on ry_order (group_compar);   ...

  3. ASP.NET MVC 视图层-生成链接相关(Html.ActionLink,Url.Action)

    1. @Html.ActionLink()  参考 也是使用在chtml模板中,返回参数中指定controller.指定action的所生成的超链接标签<a>标签html文本.如果没有指定 ...

  4. 内容可循环重用的ScrollView

    UIScrollView是iOS中最常用的交互控件之一,本文讨论当设定为翻页模式,内容页很多的时候,如果给每个页面都创建一个新View,会导致资源爆表.比较好的做法是参考UITableViewCell ...

  5. VirtualBox 5.0(虚拟机软件)里,安装Fedora遇到的问题!!

    问题一: 安装完毕后,重新启动竟然还是进入了Fedora安装过程里. 问题原因:Fedora,并没有处理安装时候加载的ISO文件,依旧让VirtualBox 5.0运行它. 解决方法:在运行Fedor ...

  6. go语言入门教程百度网盘 mysql图形化操作与数据导入

    mysql图形化操作与数据导入 @author:Davie 版权所有:北京千锋互联科技有限公司 数据库存储技术 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.每个数据库都有一个 ...

  7. CF70D(动态凸包)

    CF70D(动态凸包) 给出q(<=1e5)个询问,每次在加上一个点,维护凸包,或者询问某个点是否在凸包内(在边上也算). 听说可以用cdq做--但是并不会.我等蒟蒻只会用平衡树做. 首先,假设 ...

  8. 洛谷P1973 [NOI2011]Noi嘉年华(决策单调性)

    传送门 鉴于FlashHu大佬讲的这么好(而且我根本不会)我就不再讲一遍了->传送 //minamoto #include<iostream> #include<cstdio& ...

  9. java.lang.Exception: No tests found matching(Junit测试异常)

    java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=save], {ExactMatcher:fDispl ...

  10. sharepoint_study_11

    描述:修改管理员密码和账户后,管理中心无法打开.(提示:HTTP Error 503. The service is unavailable.) 解决: 1.打开iis 2.右击“应用程序池”下的”S ...