一个实际问题分析及解决之二:理解SSL协议

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机构上购买证书,所以一般采用的方法是服务器在前期授权用户时给用户提供一个证书,由于该证书是由服务器方提供的,所以可以为每个用户提供一个专用证书,用于在连接时识别每个客户。

由此可见,双向检验一般应用于非公共服务的情况,因为它限制客户;而单向检验往往用于公共服务,因为它不限制客户。

时间: 2024-10-04 16:30:14

一个实际问题分析及解决之二:理解SSL协议的相关文章

一个实际问题分析及解决之三:websphere中SSL配置及使用

SSL配置是websphere security中很重要的一部分,具体详细阅读下面内容. http://www.ibm.com/developerworks/websphere/techjournal/0612_birk/0612_birk.html 这里重点分析两个问题:KeyStore和TrustStore的区别以及如何使用websphere的ssl配置. 一. KeyStore和TrustStore的区别 TrustStore主要用于存放public certificate,即公钥.而公钥

一个实际问题分析及解决之四:通过IBM的JDK建立SSL连接

接前面内容,这里主要谈我们实现一开始描述的实际的技术需求的过程. 我们在建立与服务器的SonicMQ的SSL连接时,用了第三方jar去完成握手,而该第三方包采用的是标准的Java接口方式,即SSLContext.getInstance().这也很容易理解,因为第三方jar的提供方并不能假设用户一定是在websphere环境下使用该第三方jar,所以采用标准方式更为可取. 我们的碰到的最大问题就是该jar在Oracle的jdk上可以工作,而在IBM的jdk都不能工作,出现SSLHandShake

一个实际问题分析及解决之五:两种方法的区别和选择

前面两篇文章分别解释了在websphere环境下建立SSL连接的两种办法,那么一更进一步: 两者的区别是什么? 本质上两者是一样的都是通过JVM来建立socket连接,区别在于配置JVM socket连接方式. 两种配置方式的优先级? 系统变量方式的优先级高,会覆盖websphere的配置.具体可看下面一篇文章. http://www.ibm.com/developerworks/websphere/techjournal/0502_benantar/0502_benantar.html 如何选

5WHY分析法:一个问题分析与解决的工具

5WHY分析法很多做项目的都知道,但是却很少有人能用到实处,或者是灵活运用,所以今天小编又来翻一遍这个“旧账”,让大家更了解5WHY分析法. 什么是5WHY分析法? 所谓5why分析法,又称“5问法”,也就是对一个问题点连续以5个“为什么”来自问,以追究其根本原因. 5why法的关键所在:鼓励解决问题的人要努力避开主观或自负的假设和逻辑陷阱,从结果着手,沿着因果关系链条,顺藤摸瓜,直至找出原有问题的根本原因. 5WHY分析法的运用 如图,沿着“为什么——为什么”的因果路径逐一提问,先问第一个“为

文《关于c++与java中文乱码问题分析与解决》中一个bug分析

文<关于c++与java中文乱码问题分析与解决>中一个bug分析 DionysosLai([email protected]) 2014/10/21 在前几篇一博客<关于c++与java中文乱码问题分析与解决>,地址如下:http://blog.csdn.net/dionysos_lai/article/details/38389765.文中详细介绍了c++与java数据传递时,为何会出现中文乱码的原因,并提出了适当的解决方法.方法如下: int CCDirector::GBKTo

YARN环境中应用程序JAR包冲突问题的分析及解决

Hadoop框架自身集成了很多第三方的JAR包库.Hadoop框架自身启动或者在运行用户的MapReduce等应用程序时,会优先查找Hadoop预置的JAR包.这样的话,当用户的应用程序使用的第三方库已经存在于Hadoop框架的预置目录,但是两者的版本不同时,Hadoop会优先为应用程序加载Hadoop自身预置的JAR包,这种情况的结果是往往会导致应用程序无法正常运行. 下面从我们在实践中遇到的一个实际问题出发,剖析Hadoop on YARN 环境下,MapReduce程序运行时JAR包查找的

C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析与解决方法

对于C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析,目前本人分析两种情况,如下: 情况一: 借鉴麒麟.NET的类型初始值设定项引发异常文章!!!写的很详细,大家可以看一看! 其实麒麟.NET的这篇文章主要讲解分析了静态成员的方面,总的说就是:类型初始化或访问类型的静态成员时,都会对类中的其他静态成员进行初始化,如果有静态构造函数的话,一并执行静态构造函数.在这过程中所引发的异常我就直接借鉴麒麟.NET的例

&#160; 挖矿程序minerd,wnTKYg入侵分析和解决

挖矿程序minerd,wnTKYg入侵分析和解决                                   作者:CYH 一.起因:最近登陆一台redis服务器 发现登陆的时间非常长,而且各种命令敲大显示出的内容延迟很高 二,分析:  首先我安装了iftop监控em1这个网卡流量 Iftop -i  em1 发现里面的流量使用很低,没多少服务使用大的流量,没占用带宽,排除了ddos大流量攻击可能 接着我输入命令top 查看各种负载,一看吓一跳,cpu平均负载达到70左右,使用率达到99

【转】java提高篇(二)-----理解java的三大特性之继承

[转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句话中最引人注目的是"复用代码",尽可能的复用代码使我们程序员一直在追求的,现在我来介绍一种复用代码的方式,也是java三大