【问题标题】:SSl Handshake validation error in connection to SQL Server by JDBC driver通过 JDBC 驱动程序连接到 SQL Server 的 SSL 握手验证错误
【发布时间】:2018-12-31 13:10:52
【问题描述】:

我正在尝试在 Spring Boot 应用程序中使用其最新的 JDBC 驱动程序从 linux 连接到 SQL Server。当我使用 eclipse 运行 junit 测试用例时,出现“ssl 握手”错误。当我使用 mvn 在命令行中运行时,一切都很好。

我是否遗漏了什么或在我的配置中犯了任何错误:

@RunWith(SpringRunner.class)
@SpringBootTest
public class BarcodeRepositoryTest {

    @Autowired
    private BarcodeRepository addressRepository;

    @Test
    public void testFetchData() {
        List<Barcode> addresses = addressRepository.findAll();

        assertNotNull(addresses);
        assertNotEquals(0, addresses.size());
    }
}




spring.datasource.url=jdbc:sqlserver://[server]:1433;databaseName=ITTemp
spring.datasource.username=[username]
spring.datasource.password=[password]
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2008Dialect
spring.jpa.hibernate.ddl-auto=none

错误堆栈跟踪:

引起:java.security.cert.CertificateException:证书确实 不符合算法约束 sun.security.ssl.AbstractTrustManagerWrapper.checkAlgorithmConstraints(SSLContextImpl.java:1120) ~[na:1.8.0_172] 在 sun.security.ssl.AbstractTrustManagerWrapper.checkAdditionalTrust(SSLContextImpl.java:1044) ~[na:1.8.0_172] 在 sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:986) ~[na:1.8.0_172] 在 sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1596) ~[na:1.8.0_172] ... 省略了 86 个常用帧 原因: java.security.cert.CertPathValidatorException:算法约束 检查密钥大小限制失败。与证书一起使用的 RSA 1024 位密钥: CN=SSL_Self_Signed_Fallback。用法是 tls 服务器在 sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraint.permits(DisabledAlgorithmConstraints.java:817) ~[na:1.8.0_172] 在 sun.security.util.DisabledAlgorithmConstraints$Constraints.permits(DisabledAlgorithmConstraints.java:419) ~[na:1.8.0_172] 在 sun.security.util.DisabledAlgorithmConstraints.permits(DisabledAlgorithmConstraints.java:167) ~[na:1.8.0_172] 在 sun.security.provider.certpath.AlgorithmChecker.check(AlgorithmChecker.java:332) ~[na:1.8.0_172] 在 sun.security.ssl.AbstractTrustManagerWrapper.checkAlgorithmConstraints(SSLContextImpl.java:1116) ~[na:1.8.0_172]

当我从 Eclipse 运行测试用例时,我看到了这个错误。

【问题讨论】:

    标签: sql-server eclipse hibernate ssl jdbc


    【解决方案1】:

    我在使用 SQL Server 2014 和 Open JDK 11 时遇到了同样的问题。我最终通过按照说明为 SQL Server 2014 实例创建自签名证书解决了这个问题:

    https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/enable-encrypted-connections-to-the-database-engine?view=sql-server-2014

    此问题是因为 SQL Server 生成的默认自签名证书在尝试验证 SQL Server 实例提供的证书时使用了 JDK 不允许的一种或多种算法。关键是生成一个新的自签名证书(按照上面的指导),它将被 JDK 接受。重新添加不允许的算法几乎肯定会导致您使用较弱的加密。

    【讨论】:

      【解决方案2】:

      看起来客户端和服务器之间的 SSL 算法不兼容,请参阅 $JAVA_HOME/jre/lib/security/java.security 中的 jdk.tls.disabledAlgorithms。

      服务器端的java版本和客户端的一样吗?

      【讨论】:

      • 我试过这个没有成功。问题是它可以在命令行中工作,但不能在 eclipse 中工作。我使用 STS 并在其中安装了 Eclipse 数据库开发插件,因为我使用 linux fedora 作为我的工作站并且我无权访问 sql management studio。每当我尝试创建与 sql server 机器的连接时,我都会收到该错误。此外,当我尝试在 eclipse 中运行我的测试用例时,我得到了同样的错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 2015-07-08
      • 2017-01-06
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      相关资源
      最近更新 更多