我正在使用Progress DataDirect(光荣...)Microsoft SQL Server 2012的JDBC驱动程序
我现在正在尝试使用具有适当java.security文件、罐子、无限强度密码套件的符合FIPS的信任存储与我的java客户端应用程序连接到它们。信任存储包含我自己的CA的自签名证书。使用的算法是RSA。
使用JDK 1.7.0_。之后,它只是通过连接重置断开连接。
此外,我还尝试过在不同的组合中单独设置这些属性,但是在JDK 1.8中没有一个有效。
JDBC 连接属性也是开/关的不同组合:
我尝试了TLS 1.2、1.1和1,但都不起作用。
因为它与JDK 1.7一起工作,我倾向于认为JDK 1.8打破了这个机制。
JDK 1.8的调试日志包含此日志条目,这与JDK 1.7完全不同
1.8:
Ignoring unavailable cipher suite: TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
Ignoring unavailable cipher suite: TLS_RSA_WITH_AES_128_GCM_SHA256
Ignoring unavailable cipher suite: TLS_RSA_WITH_AES_256_GCM_SHA384
Ignoring unavailable cipher suite: TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
Ignoring unavailable cipher suite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
Ignoring unavailable cipher suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
1.7
Ignoring unavailable cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
Ignoring unavailable cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA
Ignoring unavailable cipher suite: TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256
Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
Ignoring unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
Ignoring unavailable cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
Ignoring unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
Ignoring unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
Ignoring unavailable cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA
Ignoring unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
Ignoring unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
Ignoring unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
Ignoring unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
Ignoring unavailable cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
Ignoring unavailable cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_128_CBC_SHA256
Ignoring unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
我还能尝试什么来解决这个问题?不幸的是,切换回1.7对我来说不是一个选择,也不是可能的。
编辑:
这是-Djavax.net.debug=all的最后一部分:
*** ClientHello, TLSv1.2
RandomCookie: GMT: 1440778452 bytes = { 133, 30, 185, 72, 50, 27, 253, 188, 73, 244, 59, 197, 169, 24, 142, 134, 78, 66, 122, 216, 60, 62, 232, 121, 107, 245, 32, 53 }
Session ID: {}
Cipher Suites: [TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_EMPTY_RENEGOTIATION_INFO_SCSV]
Compression Methods: { 0 }
Extension signature_algorithms, signature_algorithms: SHA512withECDSA, SHA512withRSA, SHA384withECDSA, SHA384withRSA, SHA256withECDSA, SHA256withRSA, SHA224withECDSA, SHA224withRSA, SHA1withECDSA, SHA1withRSA, SHA1withDSA, MD5withRSA
Extension server_name, server_name: [type=host_name (0), value=my.sqlserver.com]
***
[write] MD5 and SHA1 hashes: len = 130
<HEX DUMP>
main, WRITE: TLSv1.2 Handshake, length = 130
[Raw write]: length = 135
<HEX DUMP>
呼叫代码是这样的:
Connection connection = DriverManager.getConnection(url, getProps());
private static Properties getProps()
{
Properties properties = new Properties();
properties.setProperty("User", "sa");
properties.setProperty("Password", "password");
properties.setProperty("EncryptionMethod", "SSL");
properties.setProperty("HostNameInCertificate", "my.sqlserver.com");
properties.setProperty("TrustStore", "<Path to trust store");
properties.setProperty("TrustStorePassword", "password");
properties.setProperty("ValidateServerCertificate", "true");
properties.setProperty("CryptoProtocolVersion", "TLSv1.2");
return properties;
}
对我来说,升级到JDK8(更新191)失败了,因为它对允许(TLS)加密算法的更严格政策。我只是通过修改我的${jdk.home}/jre/lib/Security/java.security
文件再次启用了3DES_EDE_CBC
:
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, \
EC keySize < 224, 3DES_EDE_CBC
至:
jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768, \
EC keySize < 224
或以编程方式:
java.security.Security.setProperty("jdk.tls.disabledAlgorithms",
"SSLv3, RC4, MD5withRSA, DH keySize < 768, EC keySize < 224");
或在Spring:
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="java.security.Security" />
<property name="targetMethod" value="setProperty" />
<property name="arguments">
<list>
<value>jdk.tls.disabledAlgorithms</value>
<value>SSLv3, RC4, MD5withRSA, DH keySize < 1024, EC keySize < 224</value>
</list>
</property>
</bean>
另请参阅与 SSLv3 相关的答案
出身背景我需要让我的网站通过IdentityServer(IDS)进行身份验证。“example.com” 我正在用DotNetCore构建我所有的网站,用apache在代理服务器上托管它们,让我们调用私有ip12.3.4.5。 它们应该如何工作。我去网站的例子。我应该可以和ids通话。例如。com获取身份验证信息,然后重新路由回示例。具有身份验证令牌的com。相反,我得到了一个SSL握手错误。见
我有一个pythonwebsocket服务器和一个nodejs客户端,但我无法实现websocket的协议握手。 下面的最小WebSocket服务器使用(使用)。文件名为: 以下最小websocket客户端使用库。文件名为: 启动python ws-server: 从nodejs ws客户端连接: 客户端的输出是 服务器终端的输出为: 在我看来,python服务器需要设置一个名为的头,该头的值与它
Response响应对象主要将JSP容器处理后的结果传回到客户端。可以通过response变量设置HTTP的状态和向客户端发送数据,如Cookie、HTTP文件头信息等。 一个典型的响应看起来就像下面这样: HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (空行) <!doctype ...> <ht
问题内容: 我正在尝试使用http客户端通过为单个主机设置最大连接来访问服务器 HttpParams httpParam = httpclient.getParams(); HttpConnectionParams.setSoTimeout(httpParam,SOCKET_TIMEOUT); 那就是我们使用连接池来实现http持久性。 我们偶尔会收到此错误: 有谁知道如何解决这个问题? 我们也将
我使用vert. x java客户端连接安慰服务器。当使用SSL证书进行连接时,收到以下SSL握手错误。我在代码中使用setTrust all(true)。有人能帮助解释错误的原因和解决方案吗? 以下是错误:SEVERE:未处理的异常java.lang.IllegalStateExctive:桥没有成功启动io.vertx.amqpbridge.impl.AmqpBridgeImpl.create
我正在使用T.Rob的建议调试Websphere MQ服务器和客户机之间的SSL错误,并需要帮助理解SSL握手(SSL连接到MQ使用。NET MQ客户机SSLv3?)。 我的WMQ7.5客户机应用程序是C代码,使用密钥库(.kdb)。利用WebSphere管理员提供的CHLTAB。WMQ服务器运行Java,通道是用相互身份验证定义的。 本文指出,在SSL/TLS握手中,服务器总是发送其公共证书以响