3.6 javax.net.ssl包详解

javax. net.ssl包提供用于安全套接字包的类。首先,作为本书加密与解密主题所涉及的最后一个话题,本节主要包含用于密钥和信任材料管理的工厂类(KeyManagerFactory类和TrustManagerFactory类);其次,详述了用于表示安全套接字上下文的SSLContext类;最后,我们通过HttpsURLConnection类完成加密的网络通信。

3.6.1 KeyManagerFactory

KeyManagerFactory类是一个引擎类,它用来管理密钥,称为密钥管理工厂。


/此类充当基于密钥内容源的密钥管理器的工厂。每个密钥管理器管理特定类型的、由安全套接字所使用的密钥内容。密钥内容是基于KeyStore和/或提供者特定的源。/

public class KeyManagerFactory

extends Object


❑方法详述

KeyManagerFactory类是引擎类,自然少不了通过getInstance()工厂方法完成对象实例化。

我们可以通过指定算法名称获得实例化对象,方法如下所示:


//返回充当密钥管理器工厂的KeyManagerFactory对象。

public final static KeyManagerFactory getInstance(String algorithm)


或者,指定算法名称的同时指定该算法的提供者:


//返回充当密钥管理器工厂的KeyManagerFactory对象。

public final static KeyManagerFactory getInstance(String algorithm, Provider provider)

//返回充当密钥管理器工厂的KeyManagerFactory对象。

public final static KeyManagerFactory getInstance(String algorithm, String provider)


当我们不知道该选用何种算法实例化对象时,可使用默认算法,方法如下所示:


//获取默认的KeyManagerFactory算法名称。

public final static String getDefaultAlgorithm()


得到实例化对象后,可通过如下方法完成初始化:


//使用密钥内容源初始化此KeyManagerFactory对象。

public final void init(KeyStore ks, char[]password)

//使用特定于提供者的密钥内容源初始化此KeyManagerFactory对象。

public final void init(ManagerFactoryParameters spec)


我们可以通过如下方法获得密钥管理器数组:


//为每类密钥内容返回一个密钥管理器。

public final KeyManager[]getKeyManagers()


KeyManagerFactory类是引擎类,同样提供了如下方法:


//返回此KeyManagerFactory对象的提供者。

public final Provider getProvider()

//返回此KeyManagerFactory对象的算法名称。

public final String getAlgorithm()


❑实现示例

我们可通过代码清单3-26构建密钥管理工厂。

代码清单3-26 构建密钥管理工厂


//实例化KeyManagerFactory对象

KeyManagerFactory keyManagerFactory=KeyManagerFactory.getInstance("SunX509");

//加载密钥库文件

FileInputStream is=new FileInputStream("D:\x.keystore");

//实例化KeyStore对象

KeyStore ks=KeyStore.getInstance("JKS");

//加载密钥库

ks.load(is,"password".toCharArray());

//关闭流

is.close();

//初始化KeyManagerFactory对象

keyManagerFactory.init(keyStore,"password".toCharArray());


获得密钥管理工厂后做什么用呢?我们将在后面介绍。