一个实际问题分析及解决之二:理解SSL协议
来源:互联网 发布:如何查看端口带宽 h3c 编辑:程序博客网 时间:2024/06/04 19:49
SSL协议并不陌生,平常见到的以https开头的网站都是采用了SSL协议,虽然SSL协议加在HTTP上最为常见,但它的使用并不限于http,应该说http是在SSL协议层之上的协议,因为http协议属于应用层协议而SSL协议则属于网络层协议。
下面几篇文章对SSL协议做了详细说明:
https://en.wikipedia.org/wiki/Transport_Layer_Security
http://baike.baidu.com/view/14121.htm
我们以常见的https为例,它的工作原理就是在客户端和服务器间建立网络连接的时候,服务器会发送一个证书(certificate)给客户端表明自己的身份,通常该证书是由一个专业CA机构签发的(当然你也自己签发一个证书,但客户端一般不信任),客户端检查并接收了该证书后,双方就要协商和交换加密方法和密钥,等这些步骤完成了,一个基于SSL的网络连接也就建立了,这就是我们通常所说的握手。下面是对SSL握手过程的详细描述。
http://tse2.mm.bing.net/th?id=OIP.M4194b9e9f77470d1936cdafb0423ca16H0&pid=15.1
客户端怎么信任一个证书的签名方呢?
客户端一般维护自己的一个信任的签名方库(trust store),如果该证书的签名在自己的库里,那么就接受,否则就拒绝或警告,通常浏览器会采用警告的方式,如下面。Oracle Java也同样维护一个标准CA列表。
http://tse4.mm.bing.net/th?id=OIP.M39ac598f871f385775b5566ac205b886o0&pid=15.1
什么是双向验证?
普通的https协议一般是单向验证,用来让浏览器确保接收的网页内容是未经网络攻击者(如一些国内的电信服务商)窜改的,在这种情况下,网站提供方的shu求并不是确保客户端合规等,而是确保所有客户端接收到的内容是如实提供的内容。反过来双向检验是在单向检验(客户端检验服务器的证书)的基础上,服务器还要检验客户端是否是一个被授权的用户。如何检验?那就让客户端在建立连接时发一个表明自己身份的证书。由于每个客户端不太可能自己去CA机构上购买证书,所以一般采用的方法是服务器在前期授权用户时给用户提供一个证书,由于该证书是由服务器方提供的,所以可以为每个用户提供一个专用证书,用于在连接时识别每个客户。
由此可见,双向检验一般应用于非公共服务的情况,因为它限制客户;而单向检验往往用于公共服务,因为它不限制客户。
0 0
- 一个实际问题分析及解决之二:理解SSL协议
- 一个实际问题分析及解决之三:websphere中SSL配置及使用
- 一个实际问题分析及解决之四:通过IBM的JDK建立SSL连接
- 一个实际问题分析及解决之七:理解websphere的classloader
- 一个实际问题分析及解决之九:什么是应用服务器
- 一个实际问题分析及解决之五:两种方法的区别和选择
- 一个实际问题分析及解决之六:java keystore的操作
- 一个实际问题分析及解决之一:问题描述
- SSL协议的分析及实现
- SSL协议的分析及实现
- SSL协议的分析及实现
- SSL协议的分析及实现
- SSL协议的分析及实现
- SSL协议的分析及实现
- HTTPS之SSL/TLS协议分析
- 深入理解HTTP协议及原理分析之缓存
- 深入理解HTTP协议及原理分析之Https
- 用最小堆解决一个实际问题
- VMware Workstation 不可恢复错误: (vcpu-0) vcpu-0:VERIFY vmcore/vmm/main/physMem_monitor.c:1123
- 【华为OJ】【030-整数与IP地址间的转换】
- SSM框架入门和搭建 十部曲
- LeetCode 51. N-Queens
- 一个实际问题分析及解决之一:问题描述
- 一个实际问题分析及解决之二:理解SSL协议
- CentOS 7的yum 安装mysql
- thinkphp集成系列之短信验证码、订单通知
- Android textAppearance的属性设置及TextView属性详解
- 一个实际问题分析及解决之三:websphere中SSL配置及使用
- 一个实际问题分析及解决之四:通过IBM的JDK建立SSL连接
- 一个实际问题分析及解决之五:两种方法的区别和选择
- 一个实际问题分析及解决之六:java keystore的操作
- 一个实际问题分析及解决之七:理解websphere的classloader