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());
获得密钥管理工厂后做什么用呢?我们将在后面介绍。