在 WAS 中使用 Java 安全套接字扩展(图) (7)
[ 来源:互网络 | 更新日期:2007-10-05 04:19:41 | 浏览次数:9355]
简介:对于大多数情况,这样的配置就足够了。极少的情况下,您可能需要不只一个单独的缺省信任库/密钥库。随后,您将会看到如何程序化地将您的信任库和密钥库指定到 JSSE 运行时中,以及如何在您的应用程序中使用多重信任库及密钥库。
将您需要的信任库库载入运行时(实例化为 KeyStore 对象):
KeyStore ts = KeyStore.getInstance("JKS");
ts.load(new FileInputStream("yourTrustStore"),
"yourPassword".toCharArray());
实例化 TrustManagerFactory 对象并且使用您的信任库将其初始化:
TrustManager[] tm;
TrustManagerFactory tmf =
TrustManagerFactory.getInstance("IbmX509");
tmf.init(ts);
tm = tmf.getTrustManagers();
获得 SSLContext 类的实例:
sslContext = SSLContext.getInstance("SSL");
使用当前的信任管理员(封装带信任的 CA)以及密钥管理员(封装客户端的证书)初始化该实例:
sslContext.init(kmf.getKeyManagers(), tm, null);
使用当前的 SSLContext 对象来获取 SSL Socket Factory 并且实例化其中的 SSL 套接字,如同前面章节中所描述的:
SSLSocketFactory factory = sslContext.getSocketFactory();
此处的关键是 SSLContext 类并不是唯一的;也就是说,每个 getInstance 调用返回了不同的 SSLContext 对象。
具有多重密钥库的 HTTPS
如我们所见,用于 HTTPS URL 实现的信任和密钥管理是环境指定的。这使得通过简单配置或指定一些 JVM 属性来使用 SSL 变得非常容易。然而,该方法存在缺陷,即指定的属性将规定单一的信任库/密钥库。为了解决这一问题,我们使用 JSSE 接口为每个独立的 HTTP 连接定义 SSLContext。下述的编码向您展示了如何为您的 URL 连接建立定制的密钥库/信任库:
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("yourKeyStore"),
"yourPassword".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("IbmX509");
kmf.init(ks, " yourPassword ".toCharArray());
TrustManager[] tm;
TrustManagerFactory tmf = TrustManagerFactory.getInstance("IbmX509");
tmf.init(ks);
tm = tmf.getTrustManagers();
KeyStore ts = KeyStore.getInstance("JKS");
ts.load(new FileInputStream("yourTrustStore"),
"yourPassword".toCharArray());
TrustManager[] tm;
TrustManagerFactory tmf =
TrustManagerFactory.getInstance("IbmX509");
tmf.init(ts);
tm = tmf.getTrustManagers();
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(kmf.getKeyManagers(), tm, null);
SSLSocketFactory sslSocketFactory =
sslContext.getSocketFactory();
URL url = new URL(stringURL);
urlc = (HttpsURLConnection) url.openConnection();
urlc.setSSLSocketFactory(sslSocketFactory);
// at this point communication with this target url
// is set to use SSL with your custom truststore and keystore
而我们无法在此展示,如果您希望执行一些类似于 Web 服务客户端的操作,那么您必须通过 Web 服务客户端部署描述符来指定使用的 keyrings。
结束语
WebSphere Application Server 充分地支持 JSSE 作为框架的 SPI 提供方,以及作为一组用户 API。同样的,对于需要在 WebSphere Applica


您的位置:
