Module java.base
Package javax.net.ssl

Class SSLContext

java.lang.Object
javax.net.ssl.SSLContext

public class SSLContext extends Object
该类的实例表示一个安全套接字协议实现,作为安全套接字工厂或SSLEngine的工厂。该类初始化时可选地设置一组密钥和信任管理器以及安全随机字节的来源。

Java平台的每个实现都必须支持以下标准的SSLContext协议:

  • TLSv1.2
该协议在Java安全标准算法名称规范的SSLContext部分中有描述。请查阅您的实现的发布文档,以查看是否支持其他协议。
自版本:
1.4
  • Constructor Details

    • SSLContext

      protected SSLContext(SSLContextSpi contextSpi, Provider provider, String protocol)
      创建一个SSLContext对象。
      参数:
      contextSpi - 代理
      provider - 提供者
      protocol - 协议
  • Method Details

    • getDefault

      public static SSLContext getDefault() throws NoSuchAlgorithmException
      返回默认的SSL上下文。

      如果使用SSLContext.setDefault()方法设置了默认上下文,则将返回该上下文。否则,第一次调用此方法将触发调用SSLContext.getInstance("Default")。如果成功,该对象将成为默认的SSL上下文并返回。

      默认上下文可立即使用,无需初始化

      返回:
      默认的SSL上下文
      抛出:
      NoSuchAlgorithmException - 如果SSLContext.getInstance()调用失败
      自版本:
      1.6
    • setDefault

      public static void setDefault(SSLContext context)
      设置默认的SSL上下文。后续调用getDefault()将返回该上下文。默认上下文必须立即可用,不需要初始化
      参数:
      context - SSLContext
      抛出:
      NullPointerException - 如果上下文为null
      SecurityException - 如果存在安全管理器且其checkPermission方法不允许SSLPermission("setDefaultSSLContext")
      自版本:
      1.6
    • getInstance

      public static SSLContext getInstance(String protocol) throws NoSuchAlgorithmException
      返回实现指定安全套接字协议的SSLContext对象。

      此方法遍历已注册的安全提供者列表,从最优先的提供者开始。返回封装了支持指定协议的第一个提供者的SSLContextSpi实现的新SSLContext对象。

      请注意,已注册提供者列表可通过Security.getProviders()方法检索。

      实现说明:
      JDK参考实现还使用jdk.security.provider.preferred Security属性来确定指定算法的首选提供者顺序。这可能与Security.getProviders()返回的提供者顺序不同。
      参数:
      protocol - 请求协议的标准名称。有关标准协议名称的信息,请参阅Java安全标准算法名称规范中的SSLContext部分。
      返回:
      新的SSLContext对象
      抛出:
      NoSuchAlgorithmException - 如果没有Provider支持指定协议的SSLContextSpi实现
      NullPointerException - 如果protocolnull
      参见:
    • 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 - 如果protocolnull
      参见:
    • 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 - 如果protocolnull
      参见:
    • getProtocol

      public final String getProtocol()
      返回此SSLContext对象的协议名称。

      这是在创建此SSLContext对象的getInstance调用中指定的名称。

      返回:
      SSLContext对象的协议名称。
    • getProvider

      public final Provider 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

      public final SSLSocketFactory getSocketFactory()
      返回此上下文的SocketFactory对象。
      返回:
      SocketFactory对象
      抛出:
      UnsupportedOperationException - 如果底层提供程序未实现该操作。
      IllegalStateException - 如果SSLContextImpl需要初始化且未调用init()
    • getServerSocketFactory

      public final SSLServerSocketFactory getServerSocketFactory()
      返回此上下文的ServerSocketFactory对象。
      返回:
      ServerSocketFactory对象
      抛出:
      UnsupportedOperationException - 如果底层提供程序未实现该操作。
      IllegalStateException - 如果SSLContextImpl需要初始化且未调用init()
    • createSSLEngine

      public final SSLEngine createSSLEngine()
      使用此上下文创建一个新的SSLEngine

      使用此工厂方法的应用程序未提供内部会话重用策略的提示。如果需要提示,应改用createSSLEngine(String, int)

      某些密码套件(如Kerberos)需要远程主机名信息,在这种情况下,不应使用此工厂方法。

      实现注意:
      返回的SSLEngine默认使用客户端模式还是服务器模式取决于提供程序。JDK SunJSSE提供程序实现默认使用服务器模式。但是,建议在调用SSLEngine的其他方法之前始终通过调用SSLEngine.setUseClientMode()显式设置所需模式。
      返回:
      SSLEngine对象
      抛出:
      UnsupportedOperationException - 如果底层提供程序未实现该操作。
      IllegalStateException - 如果SSLContextImpl需要初始化且未调用init()
      自1.5起:
      1.5
    • createSSLEngine

      public final SSLEngine createSSLEngine(String peerHost, int peerPort)
      使用此上下文和建议的对等信息创建一个新的SSLEngine

      使用此工厂方法的应用程序为内部会话重用策略提供提示。

      某些密码套件(如Kerberos)需要远程主机名信息,在这种情况下,需要指定peerHost。

      实现注意:
      返回的SSLEngine默认使用客户端模式还是服务器模式取决于提供程序。JDK SunJSSE提供程序实现默认使用服务器模式。但是,建议在调用SSLEngine的其他方法之前始终通过调用SSLEngine.setUseClientMode()显式设置所需模式。
      参数:
      peerHost - 主机的非权威名称
      peerPort - 非权威端口
      返回:
      新的SSLEngine对象
      抛出:
      UnsupportedOperationException - 如果底层提供程序未实现该操作。
      IllegalStateException - 如果SSLContextImpl需要初始化且未调用init()
      自1.5起:
      1.5
    • getServerSessionContext

      public final SSLSessionContext getServerSessionContext()
      返回服务器会话上下文,表示在服务器端SSL套接字的握手阶段可用的SSL会话集。

      在某些环境中,此上下文可能不可用,在这种情况下,此方法返回null。例如,当底层SSL提供程序未提供SSLSessionContext接口的实现时,此方法返回null。否则将返回非null会话上下文。

      返回:
      绑定到此SSL上下文的服务器会话上下文
    • getClientSessionContext

      public final SSLSessionContext getClientSessionContext()
      返回客户端会话上下文,表示在客户端SSL套接字的握手阶段可用的SSL会话集。

      在某些环境中,此上下文可能不可用,在这种情况下,此方法返回null。例如,当底层SSL提供程序未提供SSLSessionContext接口的实现时,此方法返回null。否则将返回非null会话上下文。

      返回:
      绑定到此SSL上下文的客户端会话上下文
    • getDefaultSSLParameters

      public final SSLParameters getDefaultSSLParameters()
      返回SSL上下文的SSLParameters的副本,指示此SSL上下文的默认设置。

      参数将始终将密码套件和协议数组设置为非null值。

      返回:
      具有默认设置的SSLParameters对象的副本
      抛出:
      UnsupportedOperationException - 如果无法获取默认SSL参数。
      自1.6起:
      1.6
    • getSupportedSSLParameters

      public final SSLParameters getSupportedSSLParameters()
      返回SSL上下文的SSLParameters的副本,指示此SSL上下文支持的设置。

      参数将始终将密码套件和协议数组设置为非null值。

      返回:
      具有支持设置的SSLParameters对象的副本
      抛出:
      UnsupportedOperationException - 如果无法获取支持的SSL参数。
      自1.6起:
      1.6