前面两篇文章分别解释了在websphere环境下建立SSL连接的两种办法,那么一更进一步:
两者的区别是什么?
本质上两者是一样的都是通过JVM来建立socket连接,区别在于配置JVM socket连接方式。
两种配置方式的优先级?
系统变量方式的优先级高,会覆盖websphere的配置。具体可看下面一篇文章。
http://www.ibm.com/developerworks/websphere/techjournal/0502_benantar/0502_benantar.html
如何选择?
通常应该选择让websphere来管理你的ssl socket连接,因为这是容器的工作内容之一,但如果你采用了第三方jar包,而该第三方jar包有调用SSLContext.getInstance()语句,那么别无选择,只能小心处理你的keystore和truststore,因为这种方式下它不会读取websphere的ssl配置,你只能通过系统变量的方式指定keystore和truststore,但该系统变量是全局性的,会覆盖websphere的配置,所以你要小心的处理两个keystore。
当然如果你想自己指定keystore但又不想覆盖websphere的相关配置,也是可以的,你要在sslcontext.getInstance()之后继续调用jdk api去设置当前instance的key store和truststore,这样的设置是局部的只对当前instance可见,但往往第三方jar包并没有暴露出该instance。
另一个可行的办法就是把你所有的certificate都import进websphere配置的keystore和truststore中去,然后让javax.net.ssl.keystore指向sal配置的keystore文件,这样就完全不用担心一个被另一个覆盖的问题,因为两者用同一个文件,唯一的问题是能不能拿到websphere的keystore和truststore的密码。