本文试图以通俗易通的方式介绍Https的工作原理,不纠结具体的术语,不考证严格的流程。我相信弄懂了原理之后,到了具体操作和实现的时候,方向就不会错,然后条条大路通罗马。阅读文本需要提前大致了解对称加密、非对称加密、信息认证等密码学知识。如果你不太了解,可以阅读Erlang发明人Joe Armstrong最近写的Cryptography Tutorial。大牛出品,通俗易懂,强力推荐。

Https涉及到的主体

  1. 客户端。通常是浏览器(Chrome、IE、FireFox等),也可以自己编写的各种语言的客户端程序。
  2. 服务端。一般指支持Https的网站,比如github、支付宝。
  3. CA(Certificate Authorities)机构。Https证书签发和管理机构,比如Symantec、Comodo、GoDaddy、GlobalSign。

下图里我画出了这几个角色:

发明Https的动机

  1. 认证正在访问的网站。什么叫认证网站?比如你正在访问支付宝,怎样确定你正在访问的是阿里巴巴提供的支付宝而不是假冒伪劣的钓鱼网站呢?
  2. 保证所传输数据的私密性和完整性。众所周知,Http是明文传输的,所以处在同一网络中的其它用户可以通过网络抓包来窃取和篡改数据包的内容,甚至运营商或者wifi提供者,有可能会篡改http报文,添加广告等信息以达到盈利的目的。

Https的工作流程

这一节通过介绍Https协议的工作流程,来说明Https是如何达成自己的两个目的的。下图我画出了Https的工作流程,注意,这只是原理示意图,并不是详细的协议解析。

可以看到工作流程,基本分为三个阶段:

  1. 认证服务器。浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我们可以管理这个受信任CA机构列表,添加我们想要信任的CA机构,或者移除我们不信任的CA机构。

  2. 协商会话密钥。客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。

  3. 加密通讯。此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有Http数据,都通过会话密钥加密。这样网路上的其它用户,将很难窃取和篡改客户端和服务端之间传输的数据,从而保证了数据的私密性和完整性。

使用Https的流程

如果你是一个服务器开发者,想使用Https来保护自己的服务和用户数据安全,你可以按照以下流程来操作。

总结

  1. 说是讨论Https,事实上Https就是Http跑在SSl或者TLS上,所以本文讨论的原理和流程其实是SSL和TLS的流程,对于其它使用SSL或者TLS的应用层协议,本文内容一样有效。
  2. 本文只讨论了客户端验证服务端,服务端也可以给客户端颁发证书并验证客户端,做双向验证,但应用没有那么广泛,原理类似。
  3. 由于采用了加密通讯,Https无疑要比Http更耗费服务器资源,这也是很多公司明明支持Https却默认提供Http的原因。

http://www.cnblogs.com/xinzhao/p/4949344.html

Https 客户端与服务器交互过程梳理(转)相关推荐

  1. 客户端与服务器交互的功能,如何进行测试?

    测试客户端与服务器交互的功能,如何进行测试,需要考虑哪些内容呢?下面我们分阶段来说明一下~ 测试沟通阶段 需要跟客户端和服务器端开发沟通,确定客户端发送请求的样式,需要包含哪些参数值,参数值具体有什么 ...

  2. 客户端(https)与服务器交互过程

    Https涉及到的主体 客户端.通常是浏览器,也可是自己编写的各种语言的客户端程序 服务端.一般指的是支持https的网站 CA(certificate authorites)机构.HTTPS证书签发 ...

  3. Teamtalk登录流程详解,客户端和服务器交互流程分析

    提示:要学习客户端和服务器如何交互, 就是去找它们通信协议中对应命令发送过程. 对于登录过程,对应登录命令就是去分析CID_LOGIN_REQ_USERLOGIN 客户端登录模块 客户端工程一共包含十 ...

  4. 安卓客户端与服务器交互Json数据

    ---恢复内容开始--- 1.首先要定义一个Internet类用于连接服务器 1 public class Internet { 2 public static String gethttpresul ...

  5. Android学习总结(2)——App客户端与服务器交互中的token

    学习Token Token是什么? Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Tok ...

  6. android客户端与服务器交互数据(基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合)

    在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,做过JAVA ME的人都知道有K ...

  7. 浅析Java web程序之客户端和服务器端交互原理

    原文链接: https://www.iteye.com/topic/470019 1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型.传统的开放式系统互连参考 ...

  8. Android客户端与服务器交互方式-小结

    最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json.要在Android手机客户端与pc服务器交互,需要 ...

  9. Android 客户端与服务器交互方式

    突然想到一个问题就是Android客户端与服务器交互有几种方式,因为在脑袋里想当然的就是webservices和json.要在Android手机客户端与pc服务器交互,需要满足下面几种条件:跨平台.传 ...

最新文章

  1. Aliyun LOG Java Producer 快速入门
  2. RMI、Hessian、Burlap、Httpinvoker、WebService的比较
  3. asp.net mvc 3 RTM 发布了!
  4. web项目中关于引入JS/css文件, 浏览器console出现 net::ERR_ABORTED错误的解决方法
  5. 机器学习实战:k-近邻算法(手写数字识别)
  6. 一二三维矩阵的拼接问题
  7. 燃烧学往年精选真题解析
  8. linux 文件服务,linux系统文件服务
  9. ubuntu 自动加载ko_开屏广告太烦人?用这个只有 2M 的 App,助你自动跳过 5 秒等待...
  10. 周志华任大会首个华人程序主席!
  11. 在Linux上安装Mysql 以及 涉及问题
  12. 在 Linux 中使用 SSD(固态驱动器):启用 TRIM
  13. 个人博客网站可以通过写系列连载文章来吸引用户
  14. ERP物料信息编码体系的研究与实践
  15. 基础网络连接及拓扑图
  16. discuz 模板php代码,自定义HTML模板DIY支持PHP代码解析
  17. 防摸鱼小软件——鼠标键盘检测器
  18. java 面试 自我介绍
  19. 红米手机4A怎么样刷入开发版获得ROOT权限
  20. 【文献翻译】思科路由器安全配置合规性的SCAP基准-SCAP Benchmark for Cisco Router Security Configuration Compliance

热门文章

  1. B - Collisions
  2. Windows 2008 VS2008 IIS7 中调试Asp.net 2.0 两个问题
  3. 微软免费图书《Introducing Microsoft LINQ》翻译Chapter2.1:C# 3.0 特性(对象初始化表达式\匿名类型\查询表达式)...
  4. 怎么复制黑苹果config配置_估计是最后一次折腾黑苹果,技嘉 Z490 Vision D 的 OC 配置分享...
  5. hdu4038贪心(最快上升倍率,好题)
  6. 【数字信号处理】序列傅里叶变换 ( 序列傅里叶变换与反变换 | 序列绝对可和 与 存在傅里叶变换之间的关系 | 序列傅里叶变换性质 )
  7. 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )
  8. 【错误记录】Flutter 混合开发报错 ( Android 端与 Flutter 端 EventChannel 初始化顺序错误导致无法通信 | EventChannel 通信流程 )
  9. 【鸿蒙 HarmonyOS】UI 组件 ( Button 组件 )
  10. 手机用appnium,web自动化用eclips+webdriver2