SSLEngine的工厂。该类初始化时可选地设置一组密钥和信任管理器以及安全随机字节的来源。
Java平台的每个实现都必须支持以下标准的SSLContext协议:
TLSv1.2
- 自版本:
- 1.4
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedSSLContext(SSLContextSpi contextSpi, Provider provider, String protocol) 创建一个SSLContext对象。 -
Method Summary
Modifier and TypeMethodDescriptionfinal SSLEngine使用此上下文创建一个新的SSLEngine。final SSLEnginecreateSSLEngine(String peerHost, int peerPort) 使用此上下文使用建议的对等信息创建一个新的SSLEngine。final SSLSessionContext返回客户端会话上下文,表示在客户端SSL套接字握手阶段可用的SSL会话集。static SSLContext返回默认的SSL上下文。final SSLParameters返回SSL上下文的默认设置的SSLParameters的副本。static SSLContextgetInstance(String protocol) 返回实现指定安全套接字协议的SSLContext对象。static SSLContextgetInstance(String protocol, String provider) 返回实现指定安全套接字协议的SSLContext对象。static SSLContextgetInstance(String protocol, Provider provider) 返回实现指定安全套接字协议的SSLContext对象。final String返回此SSLContext对象的协议名称。final Provider返回此SSLContext对象的提供者。final SSLSessionContext返回服务器会话上下文,表示在服务器端SSL套接字握手阶段可用的SSL会话集。final SSLServerSocketFactory返回此上下文的ServerSocketFactory对象。final SSLSocketFactory返回此上下文的SocketFactory对象。final SSLParameters返回此SSL上下文的支持设置的SSLParameters的副本。final voidinit(KeyManager[] km, TrustManager[] tm, SecureRandom random) 初始化此上下文。static voidsetDefault(SSLContext context) 设置默认的SSL上下文。
-
Constructor Details
-
SSLContext
创建一个SSLContext对象。- 参数:
-
contextSpi- 代理 -
provider- 提供者 -
protocol- 协议
-
-
Method Details
-
getDefault
返回默认的SSL上下文。如果使用
SSLContext.setDefault()方法设置了默认上下文,则将返回该上下文。否则,第一次调用此方法将触发调用SSLContext.getInstance("Default")。如果成功,该对象将成为默认的SSL上下文并返回。默认上下文可立即使用,无需初始化。
- 返回:
- 默认的SSL上下文
- 抛出:
-
NoSuchAlgorithmException- 如果SSLContext.getInstance()调用失败 - 自版本:
- 1.6
-
setDefault
设置默认的SSL上下文。后续调用getDefault()将返回该上下文。默认上下文必须立即可用,不需要初始化。- 参数:
-
context- SSLContext - 抛出:
-
NullPointerException- 如果上下文为null -
SecurityException- 如果存在安全管理器且其checkPermission方法不允许SSLPermission("setDefaultSSLContext") - 自版本:
- 1.6
-
getInstance
返回实现指定安全套接字协议的SSLContext对象。此方法遍历已注册的安全提供者列表,从最优先的提供者开始。返回封装了支持指定协议的第一个提供者的SSLContextSpi实现的新SSLContext对象。
请注意,已注册提供者列表可通过
Security.getProviders()方法检索。- 实现说明:
-
JDK参考实现还使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供者顺序。这可能与Security.getProviders()返回的提供者顺序不同。 - 参数:
-
protocol- 请求协议的标准名称。有关标准协议名称的信息,请参阅Java安全标准算法名称规范中的SSLContext部分。 - 返回:
-
新的
SSLContext对象 - 抛出:
-
NoSuchAlgorithmException- 如果没有Provider支持指定协议的SSLContextSpi实现 -
NullPointerException- 如果protocol为null - 参见:
-
getInstance
public static SSLContext getInstance(String protocol, String provider) throws NoSuchAlgorithmException, NoSuchProviderException 返回实现指定安全套接字协议的SSLContext对象。返回封装了来自指定提供者的SSLContextSpi实现的新SSLContext对象。指定的提供者必须在安全提供者列表中注册。
请注意,已注册提供者列表可通过
Security.getProviders()方法检索。- 参数:
-
protocol- 请求协议的标准名称。有关标准协议名称的信息,请参阅Java安全标准算法名称规范中的SSLContext部分。 -
provider- 提供者的名称。 - 返回:
-
新的
SSLContext对象 - 抛出:
-
IllegalArgumentException- 如果提供者名称为null或空 -
NoSuchAlgorithmException- 如果指定提供者中不可用指定协议的SSLContextSpi实现 -
NoSuchProviderException- 如果指定提供者未在安全提供者列表中注册 -
NullPointerException- 如果protocol为null - 参见:
-
getInstance
public static SSLContext getInstance(String protocol, Provider provider) throws NoSuchAlgorithmException 返回实现指定安全套接字协议的SSLContext对象。返回封装了来自指定Provider对象的SSLContextSpi实现的新SSLContext对象。请注意,指定的Provider对象不必在提供者列表中注册。
- 参数:
-
protocol- 请求协议的标准名称。有关标准协议名称的信息,请参阅Java安全标准算法名称规范中的SSLContext部分。 -
provider- 提供者的实例。 - 返回:
-
新的
SSLContext对象 - 抛出:
-
IllegalArgumentException- 如果提供者为null -
NoSuchAlgorithmException- 如果指定Provider对象中不可用指定协议的SSLContextSpi实现 -
NullPointerException- 如果protocol为null - 参见:
-
getProtocol
返回此SSLContext对象的协议名称。这是在创建此
SSLContext对象的getInstance调用中指定的名称。- 返回:
-
此
SSLContext对象的协议名称。
-
getProvider
返回此SSLContext对象的提供者。- 返回:
-
此
SSLContext对象的提供者
-
init
public final void init(KeyManager[] km, TrustManager[] tm, SecureRandom random) throws KeyManagementException 初始化此上下文。如果前两个参数中的任一参数为null,则将搜索已安装的安全提供者,以查找适当工厂的优先级最高的实现。同样,如果安全随机参数为null,则将使用默认实现。数组中特定密钥和/或信任管理器实现类型的第一个实例将被使用。(例如,数组中的第一个javax.net.ssl.X509KeyManager将被使用。)
- 参数:
-
km- 认证密钥的来源或为null -
tm- 对等认证信任决策的来源或为null -
random- 用于此生成器的随机源或为null - 抛出:
-
KeyManagementException- 如果此操作失败
-
getSocketFactory
返回此上下文的SocketFactory对象。- 返回:
-
SocketFactory对象 - 抛出:
-
UnsupportedOperationException- 如果底层提供程序未实现该操作。 -
IllegalStateException- 如果SSLContextImpl需要初始化且未调用init()
-
getServerSocketFactory
返回此上下文的ServerSocketFactory对象。- 返回:
-
ServerSocketFactory对象 - 抛出:
-
UnsupportedOperationException- 如果底层提供程序未实现该操作。 -
IllegalStateException- 如果SSLContextImpl需要初始化且未调用init()
-
createSSLEngine
使用此上下文创建一个新的SSLEngine。使用此工厂方法的应用程序未提供内部会话重用策略的提示。如果需要提示,应改用
createSSLEngine(String, int)。某些密码套件(如Kerberos)需要远程主机名信息,在这种情况下,不应使用此工厂方法。
- 实现注意:
-
返回的SSLEngine默认使用客户端模式还是服务器模式取决于提供程序。JDK SunJSSE提供程序实现默认使用服务器模式。但是,建议在调用SSLEngine的其他方法之前始终通过调用
SSLEngine.setUseClientMode()显式设置所需模式。 - 返回:
-
SSLEngine对象 - 抛出:
-
UnsupportedOperationException- 如果底层提供程序未实现该操作。 -
IllegalStateException- 如果SSLContextImpl需要初始化且未调用init() - 自1.5起:
- 1.5
-
createSSLEngine
使用此上下文和建议的对等信息创建一个新的SSLEngine。使用此工厂方法的应用程序为内部会话重用策略提供提示。
某些密码套件(如Kerberos)需要远程主机名信息,在这种情况下,需要指定peerHost。
- 实现注意:
-
返回的SSLEngine默认使用客户端模式还是服务器模式取决于提供程序。JDK SunJSSE提供程序实现默认使用服务器模式。但是,建议在调用SSLEngine的其他方法之前始终通过调用
SSLEngine.setUseClientMode()显式设置所需模式。 - 参数:
-
peerHost- 主机的非权威名称 -
peerPort- 非权威端口 - 返回:
-
新的
SSLEngine对象 - 抛出:
-
UnsupportedOperationException- 如果底层提供程序未实现该操作。 -
IllegalStateException- 如果SSLContextImpl需要初始化且未调用init() - 自1.5起:
- 1.5
-
getServerSessionContext
返回服务器会话上下文,表示在服务器端SSL套接字的握手阶段可用的SSL会话集。在某些环境中,此上下文可能不可用,在这种情况下,此方法返回null。例如,当底层SSL提供程序未提供SSLSessionContext接口的实现时,此方法返回null。否则将返回非null会话上下文。
- 返回:
- 绑定到此SSL上下文的服务器会话上下文
-
getClientSessionContext
返回客户端会话上下文,表示在客户端SSL套接字的握手阶段可用的SSL会话集。在某些环境中,此上下文可能不可用,在这种情况下,此方法返回null。例如,当底层SSL提供程序未提供SSLSessionContext接口的实现时,此方法返回null。否则将返回非null会话上下文。
- 返回:
- 绑定到此SSL上下文的客户端会话上下文
-
getDefaultSSLParameters
返回SSL上下文的SSLParameters的副本,指示此SSL上下文的默认设置。参数将始终将密码套件和协议数组设置为非null值。
- 返回:
- 具有默认设置的SSLParameters对象的副本
- 抛出:
-
UnsupportedOperationException- 如果无法获取默认SSL参数。 - 自1.6起:
- 1.6
-
getSupportedSSLParameters
返回SSL上下文的SSLParameters的副本,指示此SSL上下文支持的设置。参数将始终将密码套件和协议数组设置为非null值。
- 返回:
- 具有支持设置的SSLParameters对象的副本
- 抛出:
-
UnsupportedOperationException- 如果无法获取支持的SSL参数。 - 自1.6起:
- 1.6
-