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

SSL配置是websphere security中很重要的一部分,具体详细阅读下面内容。

http://www.ibm.com/developerworks/websphere/techjournal/0612_birk/0612_birk.html

这里重点分析两个问题:KeyStore和TrustStore的区别以及如何使用websphere的ssl配置。

一. KeyStore和TrustStore的区别

  1. TrustStore主要用于存放public certificate,即公钥。而公钥一般是被标准CA机构签发的,故IBM websphere称之为Signer Certiificate,故名思议被签过名的证书。公钥很常见,当你用浏览器打开一个https时得到的证书一般都是公钥。
  2. KeyStore主要用于存放personal certificate,即私钥。因为私钥一般是由服务商提前通过其他途径提供给你的,且一般该证书只是提供给你一个用户,用于识别用户身份,故IBM websphere称这为personal certificate,不能共享给别的用户。
  3. TrustStore中的证书用于信任服务器的证书,如果服务器的证书在TrustStore中那么会被信任。注意在Java中,如果服务器的证书并不在TrustStore中,但如果它的签名方是一个标准的CA机构那么Java也是会接受的。
  4. KeyStore中的证书用于“双向校验”(详细关于双向检验的解决请看上一篇)中的服务器检验客户的过程,即在握手过程中服务器会要求客户端提供证书,那么客户端就会从KeyStore中但找相应证书并发送给服务器检验。
  5. 注意,两者都是一个文件(websphere的web console中会显示keystore是哪个文件)。并且keystore里也可以存放signer certificate而truststore里也可以存放personal certificate,只是keystore里的signer certificate在握手过程中不会被检索,而truststore中的personal certificate在握手过程中也不会被用到。一种特例就是你把KeyStore和TrustStore指向同一个文件,那么该文件中的signer
    certificate和personal certificate在握手时都会被用到,当然用在不同的步骤。

二. websphere中如何使用ssl配置

  • websphere的admin console中有一个专门的"ssl configuration"项目,用于配置ssl,你可以新建一个"ssl configuration"项并给它一个对你有意义的名字,在其中你可以指定KeyStore和TrustStore分别是什么,另外还可以在QoF中配置SSL协议(如TLSv1, SSLv2等,默认是TSL_SSL),可用的加密算法等。

Quality of Protection panel for SSL configurations

  • 把你在上一步中添加的SSL配置绑定到websphere的一个域上,如cell,node或app server上,注意绑定后按范围由大到小继承,那cell上的ssl配置会被继承到node上,除非node上自己配置了一个ssl configuration。

SSL configuration panel

  • 在绑定ssl configuration时,注意一下Inbound和Outbound的区别。Inbound表示当前的websphere上的应用充当服务器,别的外部应用来连。而Outbound则表示当前websphere上的应用作为客户端去连接外部服务器。

Overview of the centrally-managed topology view

到此为止,SSL配置已经完全可以被websphere上的应用使用了。但是在使用时又会有两种情况,一种是websphere上的应用完全不管SSL握手的建立,调用一个Java API去要求websphere建立一个SSL连接,那么websphere就会找到Inbound或Outbound上的SSL配置,然后完成SSL握手后返回给websphere上的应用。在这种方式下,SSL连接的建立对应用来说是透明的,所有需要用到的证书库(包括keystore和truststore)都提前在ssl配置中设置好。

另一种方式则是由应用自己主导SSL连接的建立,通常的方式是调用Oracle Java制定的标准接口,SSLContext.getInstance(String)来完成。注意这种方式建立的SSL连接是绕过了websphere层而直接跟JVM交互,要求建立SSL连接。这种方式下,上面提到的在websphere中的SSL配置是不会被用到,所以需要自己指定KeyStore和TrustStore,而JDK也提供了接口,只要设置下面几个system property即可:

javax.net.KeyStore

javax.net.KeyStorePassword

javax.net.KeyStoreType

javax.net.TrustStore

javax.net.TrustStorePassword

javax.net.TrustStoreType

下图表示了这两种使用方法的区别。

时间: 2024-11-05 18:51:15

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

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

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

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

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

一个实际问题分析及解决之二:理解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为例,它

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包查找的

JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法

今天在程序中出现一个bugger ,调试了好久,最后才发现,原来是这个问题. 做了一个实验: alert(parseInt("01")),当这个里面的值为01====>07时都是正常的,但是在"08","09"就会返回0 (这种现象出现在ie内核的浏览器中,如360浏览器就会出现这种错误)(谷歌,火狐不受影响). 查阅资料得知着这种现象原因: 大神的解释: 01--07自然没有问题,但是09,08都是不合格的八进制形式,所以被按照0处理了.

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

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

分析解决 spring quartz 中出现的执行两次问题

1. 问题描述 在开发询盘功能时,遇到一个需求,就是后台定时任务执行用电施工业务的工单下发. 使用的技术是 spring quartz,因为其他应用有先例,配置quartz 完成后,先写了一个 helloworld 测试下. 然而却发现,每次到定时时间后,程序都会执行两次. 2. 分析过程 先使用 bing 搜索了下看别人是否也遇到过类似问题,果然有. http://blog.csdn.net/jiang117/article/details/43077275 上面文档的作者,查找的原因是 Co