java - 从 jetty 服务器发出 SQL 请求时如何修复此 SSL 错误

标签 java sql-server hibernate ssl jetty-10

我正在升级 Java 应用程序。最初,应用程序是使用 jdk 8 构建的,服务器是 jetty 9。自从升级到 jetty 10 和 jdk 11 后,我在尝试向我们的 sql 数据源发出请求时遇到了问题。当应用程序尝试查询数据库时,它失败并出现以下错误:

java.sql.SQLException: Cannot create PoolableConnectionFactory 
(The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target". ClientConnectionId:redacted)
        at org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:653)
        at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:531)
        at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:731)
        at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:181)
我知道 jetty 服务器或 sql 服务器都缺少安全证书,但我不知道该怎么办。我在这里通读了文档:
https://www.eclipse.org/jetty/documentation/jetty-10/operations-guide/index.html#og-keystore但是 sql server 是一个我没有管理员访问权限的远程服务器,所以我不确定我什至可以做他们描述的事情。我是否需要以某种方式从 sql server 获取证书和 key ?我在这里想念什么?

最佳答案

您的程序失败是因为它试图连接到“不安全”的位置,您必须手动连接到目的地,获取证书/或证书,将它们安装到本地 keystore 中,然后重新启动程序。
可以在此处找到有关如何执行此操作的一些说明。
https://www.thesslstore.com/knowledgebase/ssl-install/jetty-java-http-servlet-webserver-ssl-installation/
如果您连接到多个位置,是的,您需要为每个位置设置一个条目,除非它们具有通配符证书(适用于所有位置的证书)。
或者! (不确定但很方便)您可以在不强制执行证书验证的情况下启动连接,在这种情况下,无论目的地实际上是假的,连接都会发生,这是一个安全问题,但有些情况下需要这样做,事实上,当您运行平衡器为您验证证书并且您通过 http 连接到它们时,这种情况经常发生,验证会自动被丢弃,因为即使验证失败,大多数平衡器也不会连接失败,但这是一个不一样的话题!
干杯。

关于java - 从 jetty 服务器发出 SQL 请求时如何修复此 SSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71617788/

相关文章:

java - 如何在 Java/中打开 Netbeans 空文件

java - 使用 lambda 表达式返回具有不同类型主体的 ResponseEntity 对象

sql-server - 将存储过程返回值分配给 VBA 变量

java - 在 hibernate 状态下从集合中删除实体

mysql - 多对一hibernate在删除一个时删除多个?

java - 更新 TextView

java - 如何在不录制的情况下在 Android 上对麦克风进行采样以获得实时幅度/电平?

c# - 不正确的语法错误

sql - SQL Server 中第一个实例 0 rest other 变成 1

java - Spring Boot 应用程序启动卡住加载 hibernate 文件