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

 

本文试图以通俗易通的方式介绍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

 

时间: 2024-11-01 05:19:34

Https 客户端与服务器交互过程梳理(转)的相关文章

php结合安卓客户端实现查询交互实例_php技巧

PHP 服务器端: function getids() { $this->output->set_header('Content-Type: application/json; charset=utf-8'); $jsonstr = ''; $pname = $pcallid = $pworkid = ''; if (isset($_GET['name'])) { $pname = $_GET['name']; } if (isset($_GET['callid'])) { $pcallid

客户端与服务器接口的交互。

DefaultHttpClient httpClient = new DefaultHttpClient();//http://tulogin.erzao.org/tu-login/_____localhost:8080 HttpPost method = new HttpPost("http://localhost:8080/tu-login/tuloginMethod"); JSONObject jsonParam = new JSONObject(); jsonParam.put

spring-Spring MVC使用hessian客户端与服务器之间通讯步骤,求教详细过程!谢谢

问题描述 Spring MVC使用hessian客户端与服务器之间通讯步骤,求教详细过程!谢谢 Spring MVC使用hessian客户端与服务器之间通讯步骤,求教详细过程!谢谢 解决方案 http://www.blogjava.net/iduido/archive/2012/04/11/373831.html

Android开发使用json实现服务器与客户端数据的交互功能示例

本文实例讲述了Android开发使用json实现服务器与客户端数据的交互功能.分享给大家供大家参考,具体如下: 第一步:写一个远程查询工具类,使用单例模式 /** * 查询远程服务器的工具 * @author chen.lin * */ public class QueryUtils { //private static final String TAG = "CommonUtils"; private static QueryUtils instance; private Share

ios项目中客户端与服务器通信 认证加密怎么做?

问题描述 ios项目中客户端与服务器通信 认证加密怎么做? ios项目中客户端与服务器通信 认证加密怎么做? 主要是还不理解 解决方案 Apple 的 iAP认证,需要参考协议 + 加密 IC 来实现不懂就要看协议,是比较复杂,且只是 E 文版本的文档 解决方案二: iAP是内购吧,与问题不太相关吧..通信中感觉主要做好这几点吧1.HTTPS2.字符串参数.文件等敏感信息传输过程中保持加密状态,至于加密算法,建议使用非对称的RSA

AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】_AngularJS

本文实例讲述了AngularJS实现与Java Web服务器交互操作的方法.分享给大家供大家参考,具体如下: AngularJS是Google工程师研发的产品,它的强大之处不是几句话就能描述的,只有真正使用过的人才能体会到,笔者准备在这篇文章中,以一个简单的登录校验的例子说明如何使用AngularJs和Web服务器进行交互. 准备工作 1.下载angular js库. 官网下载地址:https://angularjs.org/ 或者点击此处本站下载. 2.开发环境准备,由于是和Tomcat服务器

FLASH AS3 中使用URLRequest 和URLLoader 与服务器交互

request|服务器|交互 AS3 中使用URLRequest 和URLLoader 与服务器交互 AS3 中使用 URLLoader 与 URLRequest 取代了先前版本 LoadVars 方法. 初学者可能又会迷糊了.在现在帮助系统没有完善的情况下 (Flash 9 没有帮助, Flex Builder 2 的只有英文), 这里写篇简单的教程, 方便大家往 AS3 过渡. 在 AS3 中, 有关于网络操作的内置类全部在 flash.net 里. 下面是本教程要用到的类的清单 : URL

客户端和服务器的中间件是什么

问题描述 客户端和服务器的中间件是什么 课程设计,老师让我们设计一个客户端服务器模式(CS)的程序,要求有一个中间件,因为不让直接用客户端连接服务器. 老师说中间件就像一个网关,可以弄的简单点,但是我平常弄的都是直接在客户端登陆服务器修改服务器的数据,不知道 这个中间件该做什么,该怎么做.我想问下,这个中间件应该怎么弄,大概意思说下就可以. 谢谢. 解决方案 中间间网关,其实就是在客户端和服务器中间的一种服务器,他提供透传的功能,即服务器和客户端的交互比较通过gate中转. 通常只有网关有外网I

客户端 长连接-linux下客户端与服务器怎么保持长连接

问题描述 linux下客户端与服务器怎么保持长连接 项目过程中建立的客户端一直把数据发送给服务器 可是过大概五分钟的时间,就会断开出现 signalipe broke pipe 的问题 while() { write (fd,buffer,bufsize); sleep(3); } 为什么呢,求高手指点 解决方案 心跳包机制,发送心跳包维持连接 解决方案二: 试过了,还是有问题呢,直接结束进程了,能不能解释详细一点呢,谢啦