SSLConnectionSocketFactory 。
@Contract(threading=SAFE_CONDITIONAL) @Deprecated public class SSLSocketFactory extends Object implements LayeredConnectionSocketFactory, SchemeLayeredSocketFactory, LayeredSchemeSocketFactory, LayeredSocketFactory
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 | 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)
已过时。
|
| 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)
已过时。
|
public static final String TLS
public static final String SSL
public static final String SSLV2
public static final X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER
public static final X509HostnameVerifier BROWSER_COMPATIBLE_HOSTNAME_VERIFIER
public static final X509HostnameVerifier STRICT_HOSTNAME_VERIFIER
public SSLSocketFactory(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, HostNameResolver nameResolver) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
public SSLSocketFactory(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, TrustStrategy trustStrategy, X509HostnameVerifier hostnameVerifier) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
public SSLSocketFactory(String algorithm, KeyStore keystore, String keyPassword, KeyStore truststore, SecureRandom random, X509HostnameVerifier hostnameVerifier) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
public SSLSocketFactory(KeyStore keystore, String keystorePassword, KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
public SSLSocketFactory(KeyStore keystore, String keystorePassword) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
public SSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
public SSLSocketFactory(TrustStrategy trustStrategy, X509HostnameVerifier hostnameVerifier) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
public SSLSocketFactory(TrustStrategy trustStrategy) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException
public SSLSocketFactory(SSLContext sslContext)
public SSLSocketFactory(SSLContext sslContext, HostNameResolver nameResolver)
public SSLSocketFactory(SSLContext sslContext, X509HostnameVerifier hostnameVerifier)
public SSLSocketFactory(SSLContext sslContext, String[] supportedProtocols, String[] supportedCipherSuites, X509HostnameVerifier hostnameVerifier)
public SSLSocketFactory(SSLSocketFactory socketfactory, X509HostnameVerifier hostnameVerifier)
public SSLSocketFactory(SSLSocketFactory socketfactory, String[] supportedProtocols, String[] supportedCipherSuites, X509HostnameVerifier hostnameVerifier)
public static SSLSocketFactory getSocketFactory() throws SSLInitializationException
cacerts文件)获取具有SSL上下文的默认SSL套接字工厂。
不考虑系统属性。
SSLInitializationException
public static SSLSocketFactory getSystemSocketFactory() throws SSLInitializationException
SSLInitializationException
public Socket createSocket(HttpParams params) throws IOException
SchemeSocketFactory
SchemeSocketFactory.connectSocket(Socket, InetSocketAddress, InetSocketAddress, HttpParams) 。
createSocket在界面
SchemeSocketFactory
params - 可选参数。
传递给此方法的参数将不起作用。
此方法将创建一个未连接的实例Socket类。
IOException - 如果在创建套接字时发生I / O错误
public Socket createSocket() throws IOException
SocketFactory复制
connectSocket 。
createSocket在接口
SocketFactory
IOException - 如果在创建套接字时发生I / O错误
public Socket connectSocket(Socket socket, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpParams params) throws IOException, UnknownHostException, ConnectTimeoutException
SchemeSocketFactory复制
请注意, HttpInetSocketAddress类应该用于传递目标远程地址以及用于解析地址的原始HttpHost值。 HttpInetSocketAddress的使用也可以确保如果将目标远程地址指定为IP地址,则不会执行反向DNS查找。
connectSocket在接口
SchemeSocketFactory
socket - 要从createSocket获得的套接字 。
null表示应该创建并连接一个新的套接字。
remoteAddress - 要连接的远程地址。
localAddress - 将套接字绑定到的本地地址,或任意的
null
params - 附加parameters用于连接
sock参数不同。
IOException - 如果发生I / O错误
UnknownHostException - 如果目标主机的IP地址无法确定
ConnectTimeoutException - 如果套接字在
params定义的时间限制内无法连接
HttpInetSocketAddress
public boolean isSecure(Socket sock) throws IllegalArgumentException
派生类可以覆盖此方法来执行运行时检查,例如基于cypher套件。
isSecure在接口
SchemeSocketFactory
isSecure在接口
SocketFactory
sock - 连接的插座
true
IllegalArgumentException - 如果参数无效
public Socket createLayeredSocket(Socket socket, String host, int port, HttpParams params) throws IOException, UnknownHostException
SchemeLayeredSocketFactory复制
createLayeredSocket在接口
SchemeLayeredSocketFactory
socket - 现有套接字
host - 目标主机的名称。
port - 目标主机上要连接的端口
params - HTTP参数
IOException - 如果在创建套接字时发生I / O错误
UnknownHostException - 如果主机的IP地址无法确定
public Socket createLayeredSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException
LayeredSchemeSocketFactory复制
createLayeredSocket在界面
LayeredSchemeSocketFactory
socket - 现有套接字
host - 目标主机的名称。
port - 目标主机上要连接的端口
autoClose - 当创建的套接字关闭时关闭
autoClose的标志
IOException - 如果在创建套接字时发生I / O错误
UnknownHostException - 如果无法确定主机的IP地址
public void setHostnameVerifier(X509HostnameVerifier hostnameVerifier)
public X509HostnameVerifier getHostnameVerifier()
public Socket connectSocket(Socket socket, String host, int port, InetAddress local, int localPort, HttpParams params) throws IOException, UnknownHostException, ConnectTimeoutException
SocketFactory复制
connectSocket在界面
SocketFactory
socket - 要从createSocket获取的套接字 。
null表示应该创建并连接一个新的套接字。
host - 要连接的主机
port - 主机上要连接的端口
local - 将套接字绑定到的本地地址,或任何
null
localPort - 本地机器上的端口,0或任何负数
params - 附加parameters用于连接
sock参数不同。
IOException - 如果发生I / O错误
UnknownHostException - 如果无法确定目标主机的IP地址
ConnectTimeoutException - 如果套接字在
params定义的时间限制内无法连接
public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException
LayeredSocketFactory复制
createSocket在界面
LayeredSocketFactory
socket - 现有套接字
host - 主机名/ IP
port - 主机上的端口
autoClose - 创建的套接字关闭时关闭
autoClose插座的标志
IOException - 如果在创建套接字时发生I / O错误
UnknownHostException - 如果主机的IP地址无法确定
protected void prepareSocket(SSLSocket socket) throws IOException
SSLSocket.setEnabledCipherSuites(java.lang.String[]) 。
IOException - (仅限覆盖)
public Socket createSocket(HttpContext context) throws IOException
ConnectionSocketFactory复制
connectSocket方法。
createSocket在界面
ConnectionSocketFactory
IOException - 如果在创建套接字时发生I / O错误
public Socket connectSocket(int connectTimeout, Socket socket, HttpHost host, InetSocketAddress remoteAddress, InetSocketAddress localAddress, HttpContext context) throws IOException
ConnectionSocketFactory复制
connectSocket在界面
ConnectionSocketFactory
connectTimeout - 连接超时。
socket - 从ConnectionSocketFactory.createSocket(HttpContext)获得的套接字 。
null表示应该创建并连接新的套接字。
host - 由主叫方指定的目标主机(最终用户)。
remoteAddress - 解析的远程地址要连接。
localAddress - 将套接字绑定到的本地地址,或任意的
null 。
context - 实际的HTTP上下文。
sock参数不同。
IOException - 如果发生I / O错误
public Socket createLayeredSocket(Socket socket, String target, int port, HttpContext context) throws IOException
LayeredConnectionSocketFactory复制
createLayeredSocket在界面
LayeredConnectionSocketFactory
socket - 现有套接字
target - 目标主机的名称。
port - 目标主机上要连接的端口。
context - 实际的HTTP上下文。
IOException - 如果在创建套接字时发生I / O错误
Copyright © 1999–2017 The Apache Software Foundation. All rights reserved.