org.apache.http.conn.ssl

## Class SSLConnectionSocketFactory

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

- All Implemented Interfaces:
    ConnectionSocketFactory ， LayeredConnectionSocketFactory

      @Contract(threading=SAFE)
      public class SSLConnectionSocketFactory
      extends Object
      implements LayeredConnectionSocketFactory

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

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

  SSLSocketFactory将在提供包含一个或多个可信证书的`trust-store`文件时启用服务器身份验证。 如果目标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.3

- - ### 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
    `SSLConnectionSocketFactory(SSLContext sslContext)`
    `SSLConnectionSocketFactory(SSLContext sslContext, HostnameVerifier hostnameVerifier)`
    `SSLConnectionSocketFactory(SSLContext sslContext, String[] supportedProtocols, String[] supportedCipherSuites, HostnameVerifier hostnameVerifier)`
    `SSLConnectionSocketFactory(SSLContext sslContext, String[] supportedProtocols, String[] supportedCipherSuites, X509HostnameVerifier hostnameVerifier)` 已过时。 （4.4）使用`SSLConnectionSocketFactory(javax.net.ssl.SSLContext, String[], String[], javax.net.ssl.HostnameVerifier)`
    `SSLConnectionSocketFactory(SSLContext sslContext, X509HostnameVerifier hostnameVerifier)` 已过时。 （4.4）使用`SSLConnectionSocketFactory(javax.net.ssl.SSLContext, javax.net.ssl.HostnameVerifier)`
    `SSLConnectionSocketFactory(SSLSocketFactory socketfactory, HostnameVerifier hostnameVerifier)`
    `SSLConnectionSocketFactory(SSLSocketFactory socketfactory, String[] supportedProtocols, String[] supportedCipherSuites, HostnameVerifier hostnameVerifier)`
    `SSLConnectionSocketFactory(SSLSocketFactory socketfactory, String[] supportedProtocols, String[] supportedCipherSuites, X509HostnameVerifier hostnameVerifier)` 已过时。 （4.4）使用`SSLConnectionSocketFactory(javax.net.ssl.SSLSocketFactory, String[], String[], javax.net.ssl.HostnameVerifier)`
    `SSLConnectionSocketFactory(SSLSocketFactory socketfactory, X509HostnameVerifier hostnameVerifier)` 已过时。 （4.4）使用`SSLConnectionSocketFactory(javax.net.ssl.SSLSocketFactory, javax.net.ssl.HostnameVerifier)`

  - ### 方法摘要

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `Socket` | `connectSocket(int connectTimeout, Socket socket, HttpHost host, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpContext context)` 使用给定的解析远程地址将套接字连接到目标主机。
    `Socket` | `createLayeredSocket(Socket socket, String target, int port, HttpContext context)` 返回一个与现有套接字分层的给定主机连接的套接字。
    `Socket` | `createSocket(HttpContext context)` 创建新的，未连接的套接字。
    `static HostnameVerifier` | `getDefaultHostnameVerifier()`
    `static SSLConnectionSocketFactory` | `getSocketFactory()` 使用基于标准JSSE信任资料（安全属性目录中的 `cacerts`文件）获取SSL上下文的默认SSL套接字工厂。
    `static SSLConnectionSocketFactory` | `getSystemSocketFactory()` 根据 Java™ Secure Socket Extension (JSSE) Reference Guide中所述的系统属性获取具有SSL上下文的默认SSL套接字工厂。
    `protected void` | `prepareSocket(SSLSocket socket)` 对新创建的SSLSocket执行任何自定义初始化（SSL握手之前）。

    - ### 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

          @Deprecated
          public static final X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER

      已过时。

    - #### BROWSER_COMPATIBLE_HOSTNAME_VERIFIER

          @Deprecated
          public static final X509HostnameVerifier BROWSER_COMPATIBLE_HOSTNAME_VERIFIER

      已过时。

    - #### STRICT_HOSTNAME_VERIFIER

          @Deprecated
          public static final X509HostnameVerifier STRICT_HOSTNAME_VERIFIER

      已过时。

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

    - #### SSLConnectionSocketFactory

          public SSLConnectionSocketFactory(SSLContext sslContext)

    - #### SSLConnectionSocketFactory

          @Deprecated
          public SSLConnectionSocketFactory(SSLContext sslContext,
                                               X509HostnameVerifier hostnameVerifier)

      已过时。 （4.4）使用`SSLConnectionSocketFactory(javax.net.ssl.SSLContext, javax.net.ssl.HostnameVerifier)`

    - #### SSLConnectionSocketFactory

          @Deprecated
          public SSLConnectionSocketFactory(SSLContext sslContext,
                                               String[] supportedProtocols,
                                               String[] supportedCipherSuites,
                                               X509HostnameVerifier hostnameVerifier)

      已过时。 （4.4）使用`SSLConnectionSocketFactory(javax.net.ssl.SSLContext, String[], String[], javax.net.ssl.HostnameVerifier)`

    - #### SSLConnectionSocketFactory

          @Deprecated
          public SSLConnectionSocketFactory(SSLSocketFactory socketfactory,
                                               X509HostnameVerifier hostnameVerifier)

      已过时。 （4.4）使用`SSLConnectionSocketFactory(javax.net.ssl.SSLSocketFactory, javax.net.ssl.HostnameVerifier)`

    - #### SSLConnectionSocketFactory

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

      已过时。 （4.4）使用`SSLConnectionSocketFactory(javax.net.ssl.SSLSocketFactory, String[], String[], javax.net.ssl.HostnameVerifier)`

    - #### SSLConnectionSocketFactory

          public SSLConnectionSocketFactory(SSLContext sslContext,
                                    HostnameVerifier hostnameVerifier)

      从以下版本开始：
        4.4

    - #### SSLConnectionSocketFactory

          public SSLConnectionSocketFactory(SSLContext sslContext,
                                    String[] supportedProtocols,
                                    String[] supportedCipherSuites,
                                    HostnameVerifier hostnameVerifier)

      从以下版本开始：
        4.4

    - #### SSLConnectionSocketFactory

          public SSLConnectionSocketFactory(SSLSocketFactory socketfactory,
                                    HostnameVerifier hostnameVerifier)

      从以下版本开始：
        4.4

    - #### SSLConnectionSocketFactory

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

      从以下版本开始：
        4.4

  - ### 方法详细信息

    - #### getDefaultHostnameVerifier

          public static HostnameVerifier getDefaultHostnameVerifier()

      从以下版本开始：
        4.4

    - #### getSocketFactory

          public static SSLConnectionSocketFactory getSocketFactory()
                                                             throws SSLInitializationException

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

    - #### getSystemSocketFactory

          public static SSLConnectionSocketFactory getSystemSocketFactory()
                                                                   throws SSLInitializationException

      根据 Java™ Secure Socket Extension (JSSE) Reference Guide中所述的系统属性获取具有SSL上下文的默认SSL套接字工厂。
      结果
        默认系统SSL套接字工厂
      异常
        `SSLInitializationException`

    - #### prepareSocket

          protected void prepareSocket(SSLSocket socket)
                                throws IOException

      对新创建的SSLSocket执行任何自定义初始化（SSL握手之前）。 默认实现是无操作的，但可以被覆盖，例如调用`SSLSocket.setEnabledCipherSuites(String[])` 。
      异常
        `IOException` - 如果被覆盖，可能会抛出

    - #### 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