您的位置:jsp学习站首页 >> JAVA类 >> JAVA高级 >> 在 WAS 中使用 Java 安全套接字扩展(图)

在 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
[1] [2] [3] [4] [5] [6] [7] [8]
Tags:关键字:使用
责任编辑:glen