org.apache.http.conn.ssl

## Class SSLSocketFactory

- java.lang.Object
- - org.apache.http.conn.ssl.SSLSocketFactory

- All Implemented Interfaces:
    LayeredSchemeSocketFactory ， LayeredSocketFactory ， SchemeLayeredSocketFactory ， SchemeSocketFactory ， SocketFactory ， ConnectionSocketFactory ， LayeredConnectionSocketFactory

  已过时。
  （4.3）使用`SSLConnectionSocketFactory` 。

      @Contract(threading=SAFE_CONDITIONAL)
      @Deprecated
      public class SSLSocketFactory
      extends Object
      implements LayeredConnectionSocketFactory, SchemeLayeredSocketFactory, LayeredSchemeSocketFactory, LayeredSocketFactory

  分层插座工厂用于TLS / SSL连接。

  SSLSocketFactory可用于根据可信证书列表验证HTTPS服务器的身份，并使用私钥对HTTPS服务器进行身份验证。

  当提供包含一个或多个可信证书的`trust-store`文件时，SSLSocketFactory将启用服务器身份验证。 如果目标HTTPS服务器尝试使用不可信证书进行身份验证，客户端安全套接字将在SSL会话握手期间拒绝连接。

  使用JDK keytool实用程序导入受信任的证书并生成信任存储文件：

        keytool -import -alias "my server cert" -file server.crt -keystore my.truststore

  在特殊情况下，标准信任验证过程可以通过使用自定义`TrustStrategy`来绕过。 此接口主要用于允许自签名证书被接受为受信任的，而无需将其添加到信任存储文件。

  当提供的包含私钥/公共证书对的`key-store`文件时，SSLSocketFactory将启用客户端身份验证。 客户端安全套接字将在SSL会话握手期间使用私钥对目标HTTPS服务器进行身份验证，如果服务器请求这样做。 目标HTTPS服务器将反过来验证客户端提供的证书，以建立客户端的真实性。

  使用以下操作顺序来生成密钥存储文件

  - 使用JDK keytool实用程序生成一个新的密钥

          keytool -genkey -v -alias "my client key" -validity 365 -keystore my.keystore

    为了简单起见，使用与密钥库相同的密钥密钥

  - 发出证书签名请求（CSR）

          keytool -certreq -alias "my client key" -file mycertreq.csr -keystore my.keystore

  - 将证书请求发送到受信任的证书颁发机构进行签名。 可以选择作为自己的CA，并使用PKI工具（如OpenSSL）签署证书请求。

  - 导入受信任的CA根证书

          keytool -import -alias "my trusted ca" -file caroot.crt -keystore my.keystore

  - 导入包含完整证书链的PKCS＃7文件

          keytool -import -alias "my client key" -file mycert.p7 -keystore my.keystore

  - 验证内容的结果密钥库文件

          keytool -list -v -keystore my.keystore

  从以下版本开始：
    4

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static X509HostnameVerifier` | `ALLOW_ALL_HOSTNAME_VERIFIER` 已过时。
    `static X509HostnameVerifier` | `BROWSER_COMPATIBLE_HOSTNAME_VERIFIER` 已过时。
    `static String` | `SSL` 已过时。
    `static String` | `SSLV2` 已过时。
    `static X509HostnameVerifier` | `STRICT_HOSTNAME_VERIFIER` 已过时。
    `static String` | `TLS` 已过时。

  - ### 构造方法摘要

    构造方法
    Constructor and Description
    `SSLSocketFactory(KeyStore truststore)` 已过时。
    `SSLSocketFactory(KeyStore keystore, String keystorePassword)` 已过时。
    `SSLSocketFactory(KeyStore keystore, String keystorePassword, KeyStore truststore)` 已过时。
    `SSLSocketFactory(SSLContext sslContext)` 已过时。
    `SSLSocketFactory(SSLContext sslContext, HostNameResolver nameResolver)` 已过时。
    `SSLSocketFactory(SSLContext sslContext, String[] supportedProtocols, String[] supportedCipherSuites, X509HostnameVerifier hostnameVerifier)` 已过时。
    `SSLSocketFactory(SSLContext sslContext, X509HostnameVerifier hostnameVerifier)` 已过时。
    `SSLSocketFactory(SSLSocketFactory socketfactory, String[] supportedProtocols, String[] supportedCipherSuites, X509HostnameVerifier hostnameVerifier)` 已过时。
    `SSLSocketFactory(SSLSocketFactory socketfactory, X509HostnameVerifier hostnameVerifier)` 已过时。
    `SSLSocketFactory(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, HostNameResolver nameResolver)` 已过时。
    `SSLSocketFactory(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, TrustStrategy trustStrategy, X509HostnameVerifier hostnameVerifier)` 已过时。
    `SSLSocketFactory(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, X509HostnameVerifier hostnameVerifier)` 已过时。
    `SSLSocketFactory(TrustStrategy trustStrategy)` 已过时。
    `SSLSocketFactory(TrustStrategy trustStrategy, X509HostnameVerifier hostnameVerifier)` 已过时。

  - ### 方法摘要

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `Socket` | `connectSocket(int connectTimeout, Socket socket, HttpHost host, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpContext context)` 已过时。 使用给定的解析远程地址将套接字连接到目标主机。
    `Socket` | `connectSocket(Socket socket, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpParams params)` 已过时。 使用给定的远程地址将套接字连接到目标主机。
    `Socket` | `connectSocket(Socket socket, String host, int port, InetAddress local, int localPort, HttpParams params)` 已过时。 将套接字连接到给定的主机。
    `Socket` | `createLayeredSocket(Socket socket, String host, int port, boolean autoClose)` 已过时。 返回一个与现有套接字分层的给定主机连接的套接字。
    `Socket` | `createLayeredSocket(Socket socket, String target, int port, HttpContext context)` 已过时。 返回一个与现有套接字分层的给定主机连接的套接字。
    `Socket` | `createLayeredSocket(Socket socket, String host, int port, HttpParams params)` 已过时。 返回一个与现有套接字分层的给定主机连接的套接字。
    `Socket` | `createSocket()` 已过时。 创建一个新的，未连接的套接字。
    `Socket` | `createSocket(HttpContext context)` 已过时。 创建新的，未连接的套接字。
    `Socket` | `createSocket(HttpParams params)` 已过时。 创建一个新的，未连接的套接字。
    `Socket` | `createSocket(Socket socket, String host, int port, boolean autoClose)` 已过时。 返回一个与现有套接字分层的给定主机连接的套接字。
    `X509HostnameVerifier` | `getHostnameVerifier()` 已过时。
    `static SSLSocketFactory` | `getSocketFactory()` 已过时。 根据标准JSSE信任资料（安全属性目录中的 `cacerts`文件）获取具有SSL上下文的默认SSL套接字工厂。
    `static SSLSocketFactory` | `getSystemSocketFactory()` 已过时。 根据 "JavaTM Secure Socket Extension (JSSE) Reference Guide for the JavaTM 2 Platform Standard Edition 5中所述的系统属性获取具有SSL上下文的默认SSL套接字工厂
    `boolean` | `isSecure(Socket sock)` 已过时。 检查插座连接是否安全。
    `protected void` | `prepareSocket(SSLSocket socket)` 已过时。 对新创建的SSLSocket执行任何自定义初始化（SSL握手之前）。
    `void` | `setHostnameVerifier(X509HostnameVerifier hostnameVerifier)` 已过时。

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### 字段详细信息

    - #### TLS

          public static final String TLS

      已过时。
      另请参见：
        Constant Field Values

    - #### SSL

          public static final String SSL

      已过时。
      另请参见：
        Constant Field Values

    - #### SSLV2

          public static final String SSLV2

      已过时。
      另请参见：
        Constant Field Values

    - #### ALLOW_ALL_HOSTNAME_VERIFIER

          public static final X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER

      已过时。

    - #### BROWSER_COMPATIBLE_HOSTNAME_VERIFIER

          public static final X509HostnameVerifier BROWSER_COMPATIBLE_HOSTNAME_VERIFIER

      已过时。

    - #### STRICT_HOSTNAME_VERIFIER

          public static final X509HostnameVerifier STRICT_HOSTNAME_VERIFIER

      已过时。

  - ### 构造方法详细信息

    - #### SSLSocketFactory

          public SSLSocketFactory(String algorithm,
                          KeyStore keystore,
                          String keyPassword,
                          KeyStore truststore,
                          SecureRandom random,
                          HostNameResolver nameResolver)
                           throws NoSuchAlgorithmException,
                                  KeyManagementException,
                                  KeyStoreException,
                                  UnrecoverableKeyException

      已过时。
      异常
        `NoSuchAlgorithmException`
        `KeyManagementException`
        `KeyStoreException`
        `UnrecoverableKeyException`

    - #### SSLSocketFactory

          public SSLSocketFactory(String algorithm,
                          KeyStore keystore,
                          String keyPassword,
                          KeyStore truststore,
                          SecureRandom random,
                          TrustStrategy trustStrategy,
                          X509HostnameVerifier hostnameVerifier)
                           throws NoSuchAlgorithmException,
                                  KeyManagementException,
                                  KeyStoreException,
                                  UnrecoverableKeyException

      已过时。
      异常
        `NoSuchAlgorithmException`
        `KeyManagementException`
        `KeyStoreException`
        `UnrecoverableKeyException`
      从以下版本开始：
        4.1

    - #### SSLSocketFactory

          public SSLSocketFactory(String algorithm,
                          KeyStore keystore,
                          String keyPassword,
                          KeyStore truststore,
                          SecureRandom random,
                          X509HostnameVerifier hostnameVerifier)
                           throws NoSuchAlgorithmException,
                                  KeyManagementException,
                                  KeyStoreException,
                                  UnrecoverableKeyException

      已过时。
      异常
        `NoSuchAlgorithmException`
        `KeyManagementException`
        `KeyStoreException`
        `UnrecoverableKeyException`
      从以下版本开始：
        4.1

    - #### SSLSocketFactory

          public SSLSocketFactory(KeyStore keystore,
                          String keystorePassword,
                          KeyStore truststore)
                           throws NoSuchAlgorithmException,
                                  KeyManagementException,
                                  KeyStoreException,
                                  UnrecoverableKeyException

      已过时。
      异常
        `NoSuchAlgorithmException`
        `KeyManagementException`
        `KeyStoreException`
        `UnrecoverableKeyException`

    - #### SSLSocketFactory

          public SSLSocketFactory(KeyStore keystore,
                          String keystorePassword)
                           throws NoSuchAlgorithmException,
                                  KeyManagementException,
                                  KeyStoreException,
                                  UnrecoverableKeyException

      已过时。
      异常
        `NoSuchAlgorithmException`
        `KeyManagementException`
        `KeyStoreException`
        `UnrecoverableKeyException`

    - #### SSLSocketFactory

          public SSLSocketFactory(KeyStore truststore)
                           throws NoSuchAlgorithmException,
                                  KeyManagementException,
                                  KeyStoreException,
                                  UnrecoverableKeyException

      已过时。
      异常
        `NoSuchAlgorithmException`
        `KeyManagementException`
        `KeyStoreException`
        `UnrecoverableKeyException`

    - #### SSLSocketFactory

          public SSLSocketFactory(TrustStrategy trustStrategy,
                          X509HostnameVerifier hostnameVerifier)
                           throws NoSuchAlgorithmException,
                                  KeyManagementException,
                                  KeyStoreException,
                                  UnrecoverableKeyException

      已过时。
      异常
        `NoSuchAlgorithmException`
        `KeyManagementException`
        `KeyStoreException`
        `UnrecoverableKeyException`
      从以下版本开始：
        4.1

    - #### SSLSocketFactory

          public SSLSocketFactory(TrustStrategy trustStrategy)
                           throws NoSuchAlgorithmException,
                                  KeyManagementException,
                                  KeyStoreException,
                                  UnrecoverableKeyException

      已过时。
      异常
        `NoSuchAlgorithmException`
        `KeyManagementException`
        `KeyStoreException`
        `UnrecoverableKeyException`
      从以下版本开始：
        4.1

    - #### SSLSocketFactory

          public SSLSocketFactory(SSLContext sslContext)

      已过时。

    - #### SSLSocketFactory

          public SSLSocketFactory(SSLContext sslContext,
                          HostNameResolver nameResolver)

      已过时。

    - #### SSLSocketFactory

          public SSLSocketFactory(SSLContext sslContext,
                          X509HostnameVerifier hostnameVerifier)

      已过时。
      从以下版本开始：
        4.1

    - #### SSLSocketFactory

          public SSLSocketFactory(SSLContext sslContext,
                          String[] supportedProtocols,
                          String[] supportedCipherSuites,
                          X509HostnameVerifier hostnameVerifier)

      已过时。
      从以下版本开始：
        4.3

    - #### SSLSocketFactory

          public SSLSocketFactory(SSLSocketFactory socketfactory,
                          X509HostnameVerifier hostnameVerifier)

      已过时。
      从以下版本开始：
        4.2

    - #### SSLSocketFactory

          public SSLSocketFactory(SSLSocketFactory socketfactory,
                          String[] supportedProtocols,
                          String[] supportedCipherSuites,
                          X509HostnameVerifier hostnameVerifier)

      已过时。
      从以下版本开始：
        4.3

  - ### 方法详细信息

    - #### getSocketFactory

          public static SSLSocketFactory getSocketFactory()
                                                   throws SSLInitializationException

      已过时。
      根据标准的JSSE信任资料（安全属性目录中的`cacerts`文件）获取具有SSL上下文的默认SSL套接字工厂。 不考虑系统属性。
      结果
        默认SSL套接字工厂
      异常
        `SSLInitializationException`

    - #### getSystemSocketFactory

          public static SSLSocketFactory getSystemSocketFactory()
                                                         throws SSLInitializationException

      已过时。
      根据 "JavaTM Secure Socket Extension (JSSE) Reference Guide for the JavaTM 2 Platform Standard Edition 5中所述的系统属性获取具有SSL上下文的默认SSL套接字工厂
      结果
        默认系统SSL套接字工厂
      异常
        `SSLInitializationException`

    - #### createSocket

          public Socket createSocket(HttpParams params)
                              throws IOException

      已过时。
      说明从界面复制： `SchemeSocketFactory`
      创建一个新的，未连接的套接字。 插座应随后传递至`SchemeSocketFactory.connectSocket(Socket, InetSocketAddress, InetSocketAddress, HttpParams)` 。
      Specified by:
        `createSocket`在界面 `SchemeSocketFactory`
      参数
        `params` - 可选参数。 传递给此方法的参数将不起作用。 此方法将创建一个未连接的实例`Socket`类。
      结果
        一个新插座
      异常
        `IOException` - 如果在创建套接字时发生I / O错误
      从以下版本开始：
        4.1

    - #### createSocket

          public Socket createSocket()
                              throws IOException

      已过时。
      描述从界面： `SocketFactory`复制
      创建一个新的，未连接的套接字。 插座应随后传递至`connectSocket` 。
      Specified by:
        `createSocket`在接口 `SocketFactory`
      结果
        一个新插座
      异常
        `IOException` - 如果在创建套接字时发生I / O错误

    - #### connectSocket

          public Socket connectSocket(Socket socket,
                             InetSocketAddress remoteAddress,
                             InetSocketAddress localAddress,
                             HttpParams params)
                               throws IOException,
                                      UnknownHostException,
                                      ConnectTimeoutException

      已过时。
      描述从界面： `SchemeSocketFactory`复制
      使用给定的远程地址将套接字连接到目标主机。

      请注意， `HttpInetSocketAddress`类应该用于传递目标远程地址以及用于解析地址的原始`HttpHost`值。 `HttpInetSocketAddress`的使用也可以确保如果将目标远程地址指定为IP地址，则不会执行反向DNS查找。

      Specified by:
        `connectSocket`在接口 `SchemeSocketFactory`
      参数
        `socket` - 要从`createSocket`获得的套接字 。 `null`表示应该创建并连接一个新的套接字。
        `remoteAddress` - 要连接的远程地址。
        `localAddress` - 将套接字绑定到的本地地址，或任意的 `null`
        `params` - 附加`parameters`用于连接
      结果
        连接的插座。 如果此工厂支持分层协议，返回的对象可能与`sock`参数不同。
      异常
        `IOException` - 如果发生I / O错误
        `UnknownHostException` - 如果目标主机的IP地址无法确定
        `ConnectTimeoutException` - 如果套接字在 `params`定义的时间限制内无法连接
      从以下版本开始：
        4.1
      另请参见：
        `HttpInetSocketAddress`

    - #### isSecure

          public boolean isSecure(Socket sock)
                           throws IllegalArgumentException

      已过时。
      检查插座连接是否安全。 该工厂创建TLS / SSL套接字连接，默认情况下，它们被认为是安全的。

      派生类可以覆盖此方法来执行运行时检查，例如基于cypher套件。

      Specified by:
        `isSecure`在接口 `SchemeSocketFactory`
      Specified by:
        `isSecure`在接口 `SocketFactory`
      参数
        `sock` - 连接的插座
      结果
        `true`
      异常
        `IllegalArgumentException` - 如果参数无效

    - #### createLayeredSocket

          public Socket createLayeredSocket(Socket socket,
                                   String host,
                                   int port,
                                   HttpParams params)
                                     throws IOException,
                                            UnknownHostException

      已过时。
      描述从界面： `SchemeLayeredSocketFactory`复制
      返回一个与现有套接字分层的给定主机连接的套接字。 主要用于通过代理创建安全套接字。
      Specified by:
        `createLayeredSocket`在接口 `SchemeLayeredSocketFactory`
      参数
        `socket` - 现有套接字
        `host` - 目标主机的名称。
        `port` - 目标主机上要连接的端口
        `params` - HTTP参数
      结果
        插座一个新插座
      异常
        `IOException` - 如果在创建套接字时发生I / O错误
        `UnknownHostException` - 如果主机的IP地址无法确定
      从以下版本开始：
        4.2

    - #### createLayeredSocket

          public Socket createLayeredSocket(Socket socket,
                                   String host,
                                   int port,
                                   boolean autoClose)
                                     throws IOException,
                                            UnknownHostException

      已过时。
      说明从界面： `LayeredSchemeSocketFactory`复制
      返回一个与现有套接字分层的给定主机连接的套接字。 主要用于通过代理创建安全套接字。
      Specified by:
        `createLayeredSocket`在界面 `LayeredSchemeSocketFactory`
      参数
        `socket` - 现有套接字
        `host` - 目标主机的名称。
        `port` - 目标主机上要连接的端口
        `autoClose` - 当创建的套接字关闭时关闭 `autoClose`的标志
      结果
        插座一个新插座
      异常
        `IOException` - 如果在创建套接字时发生I / O错误
        `UnknownHostException` - 如果无法确定主机的IP地址

    - #### setHostnameVerifier

          public void setHostnameVerifier(X509HostnameVerifier hostnameVerifier)

      已过时。

    - #### getHostnameVerifier

          public X509HostnameVerifier getHostnameVerifier()

      已过时。

    - #### connectSocket

          public Socket connectSocket(Socket socket,
                             String host,
                             int port,
                             InetAddress local,
                             int localPort,
                             HttpParams params)
                               throws IOException,
                                      UnknownHostException,
                                      ConnectTimeoutException

      已过时。
      说明从界面： `SocketFactory`复制
      将套接字连接到给定的主机。
      Specified by:
        `connectSocket`在界面 `SocketFactory`
      参数
        `socket` - 要从`createSocket`获取的套接字 。 `null`表示应该创建并连接一个新的套接字。
        `host` - 要连接的主机
        `port` - 主机上要连接的端口
        `local` - 将套接字绑定到的本地地址，或任何 `null`
        `localPort` - 本地机器上的端口，0或任何负数
        `params` - 附加`parameters`用于连接
      结果
        连接的插座。 如果此工厂支持分层协议，返回的对象可能与`sock`参数不同。
      异常
        `IOException` - 如果发生I / O错误
        `UnknownHostException` - 如果无法确定目标主机的IP地址
        `ConnectTimeoutException` - 如果套接字在 `params`定义的时间限制内无法连接

    - #### createSocket

          public Socket createSocket(Socket socket,
                            String host,
                            int port,
                            boolean autoClose)
                              throws IOException,
                                     UnknownHostException

      已过时。
      说明从界面： `LayeredSocketFactory`复制
      返回一个与现有套接字分层的给定主机连接的套接字。 主要用于通过代理创建安全套接字。
      Specified by:
        `createSocket`在界面 `LayeredSocketFactory`
      参数
        `socket` - 现有套接字
        `host` - 主机名/ IP
        `port` - 主机上的端口
        `autoClose` - 创建的套接字关闭时关闭 `autoClose`插座的标志
      结果
        插座一个新插座
      异常
        `IOException` - 如果在创建套接字时发生I / O错误
        `UnknownHostException` - 如果主机的IP地址无法确定

    - #### prepareSocket

          protected void prepareSocket(SSLSocket socket)
                                throws IOException

      已过时。
      对新创建的SSLSocket执行任何自定义初始化（SSL握手之前）。 默认实现是无操作的，但可以被覆盖，例如调用`SSLSocket.setEnabledCipherSuites(java.lang.String[])` 。
      异常
        `IOException` - （仅限覆盖）
      从以下版本开始：
        4.2

    - #### createSocket

          public Socket createSocket(HttpContext context)
                              throws IOException

      已过时。
      说明从界面： `ConnectionSocketFactory`复制
      创建新的，未连接的套接字。 插座应随后传递至`connectSocket`方法。
      Specified by:
        `createSocket`在界面 `ConnectionSocketFactory`
      结果
        一个新插座
      异常
        `IOException` - 如果在创建套接字时发生I / O错误

    - #### connectSocket

          public Socket connectSocket(int connectTimeout,
                             Socket socket,
                             HttpHost host,
                             InetSocketAddress remoteAddress,
                             InetSocketAddress localAddress,
                             HttpContext context)
                               throws IOException

      已过时。
      说明从界面： `ConnectionSocketFactory`复制
      使用给定的解析远程地址将套接字连接到目标主机。
      Specified by:
        `connectSocket`在界面 `ConnectionSocketFactory`
      参数
        `connectTimeout` - 连接超时。
        `socket` - 从`ConnectionSocketFactory.createSocket(HttpContext)`获得的套接字 。 `null`表示应该创建并连接新的套接字。
        `host` - 由主叫方指定的目标主机（最终用户）。
        `remoteAddress` - 解析的远程地址要连接。
        `localAddress` - 将套接字绑定到的本地地址，或任意的 `null` 。
        `context` - 实际的HTTP上下文。
      结果
        连接的插座。 如果此工厂支持分层协议，则返回的对象可能与`sock`参数不同。
      异常
        `IOException` - 如果发生I / O错误

    - #### createLayeredSocket

          public Socket createLayeredSocket(Socket socket,
                                   String target,
                                   int port,
                                   HttpContext context)
                                     throws IOException

      已过时。
      描述从界面： `LayeredConnectionSocketFactory`复制
      返回一个与现有套接字分层的给定主机连接的套接字。 主要用于通过代理创建安全套接字。
      Specified by:
        `createLayeredSocket`在界面 `LayeredConnectionSocketFactory`
      参数
        `socket` - 现有套接字
        `target` - 目标主机的名称。
        `port` - 目标主机上要连接的端口。
        `context` - 实际的HTTP上下文。
      结果
        插座一个新插座
      异常
        `IOException` - 如果在创建套接字时发生I / O错误

Copyright © 1999–2017 The Apache Software Foundation. All rights reserved.

本帮助文档是使用 《谷歌翻译》翻译，请与英文版配合使用 by--QQ:654638585