驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。

                      

其实解决方法很简单,只需要加上一个字段就行了,只要是关于套接字连接错误的都可以这样解决,而且不用修改SQL server管理器的配置

                                     trustServerCertificate=true;

 trustServerCertificate=true;

在不同的环境下有不同的加法,具体情况请往下看

说明:我的1433端口被占用了,所以使用的是1434端口

1.1

先看报错信息:ERROR c.a.d.p.DruidDataSource - create connection SQLException, url: jdbc:sqlserver://localhost;DatabaseName=PT_STORE_HLW, errorCode 0, state 08S01

com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“SQL Server 未返回响应。连接已关闭。 ClientConnectionId:22dc49b0-221d-4a51-9a84-8d507658df6e”。
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667)
    at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1668)

下面这一段是在测试idea使用数据源连接数据库时

08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target”。 ClientConnectionId:64509506-0bbe-41b4-87e7-3c9ce5085eed sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. 

ERROR c.a.d.p.DruidDataSource - create connection SQLException, url: jdbc:sqlserver://localhost;DatabaseName=PT_STORE_HLW, errorCode 0, state 08S01
com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“SQL Server 未返回响应。连接已关闭。 ClientConnectionId:22dc49b0-221d-4a51-9a84-8d507658df6e”。
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667)
	at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1668)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1323)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
	at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156)
	at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:218)
	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150)
	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1560)
	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1623)
	at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2468)
Caused by: java.io.IOException: SQL Server 未返回响应。连接已关闭。 ClientConnectionId:22dc49b0-221d-4a51-9a84-8d507658df6e
	at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.ensureSSLPayload(IOBuffer.java:651)
	at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.readInternal(IOBuffer.java:708)
	at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.read(IOBuffer.java:700)
	at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.readInternal(IOBuffer.java:895)
	at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.read(IOBuffer.java:883)
	at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
	at sun.security.ssl.InputRecord.read(InputRecord.java:503)
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
	at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1618)
	... 10 common frames omitted


2.1

jidbc连接:

   String RL="jdbc:sqlserver://localhost:1434;database=数学建模;encrypt=true;trustServerCertificate=true"

完整代码如下:

public static void main(String[] args) {
        //使用jbdc进行驱动;
        //String RL="jdbc:sqlserver://localhost:1434;"+"DatabaseName=Student_info";
        //只需要跳过检查就行并不用那些又是删除又是修改的
        String RL="jdbc:sqlserver://localhost:1434;database=数学建模;encrypt=true;trustServerCertificate=true";
        String sqlStr="select *\r\n"
                + "from 颜色\r\n"
              ;
        try {
            //加载驱动包
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            System.out.println("启动成功");
            String userName="eclipse";
            String userPwd="wkz123";
            //创建数据库连接
            Connection dbConn= DriverManager.getConnection(RL,userName,userPwd);
            System.out.println("链接成功");
            //向数据库发送个东西
            Statement stmt=dbConn.createStatement();

            ResultSet rs=stmt.executeQuery(sqlStr);//执行数据库查询语句存在于sqlStr中
            while(rs.next())
            {
//
                String  str=rs.getString("文物编号")+"   "+rs.getNString("纹饰")+
                        "   "+rs.getString("类型")+"   "+rs.getString("颜色")+
                        "   "+rs.getString("表面风化");

                System.out.println(str);

            }
            dbConn.close();
        }catch(Exception e) {
            e.printStackTrace(System.out);
        }
    }

2.2

mybatis连接:

<property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
                <property name="url" value="jdbc:sqlserver://localhost:1434;database=数学建模;encrypt=true;trustServerCertificate=true"/>
                <property name="username" value="eclipse"/>
                <property name="password" value="wkz123"/>

完整代码:


 <environments default="development">

        <!--environments 是数据库的环境,可以是多个环境·,此时为默认的环境-->
        <environment id="development">

        <!--这是事务管理器,类型是jdbc意思是用jdbc的事务进行管理
DBC – 这个配置直接使用了 JDBC 的提交和回滚功能,它依赖从数据源获得的连接来管理事务作用域
MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)

-->
            <transactionManager type="JDBC"/>
        <!--
        数据源使用连接池jdbc自带的
POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来
UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接,就是不使用连接池
JNDI 是个连接池的名字,可以在tomcat中使用啦
-->
            <dataSource type="POOLED">
<!--                <property name="driver" value="${driver}"/>   &lt;!&ndash;配置文件在db文件中&ndash;&gt;-->
<!--                <property name="url" value="${url}"/>-->
<!--                <property name="username" value="${username}"/>-->
<!--                <property name="password" value="${password}"/>-->

                <property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
                <property name="url" value="jdbc:sqlserver://localhost:1434;database=数学建模;encrypt=true;trustServerCertificate=true"/>
                <property name="username" value="eclipse"/>
                <property name="password" value="wkz123"/>

            </dataSource>
        </environment>
    </environments>

2.3

spring boot+druid+mybatis plus连接:

spring.datasource.url=jdbc:sqlserver://localhost:1434;database=server;encrypt=true;trustServerCertificate=true



spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://localhost:1434;database=server;encrypt=true;trustServerCertificate=true
spring.datasource.username=eclipse
spring.datasource.password=wkz123
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

server.port=8088

2.4

在idea中测试链接数据库:

报错信息:

08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target”。 ClientConnectionId:64509506-0bbe-41b4-87e7-3c9ce5085eed sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. 

 

08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target”。 ClientConnectionId:64509506-0bbe-41b4-87e7-3c9ce5085eed sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. 

解决方法:

trustServerCertificate改为true,如下图所示:

 

  • 25
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
要在 IDEA使用 JDK 17 连接 SQL Server 数据库,需要进行以下步骤: 1. 首先,需要在项目的 `pom.xml` 文件中添加 Microsoft JDBC 驱动依赖。可以在 Microsoft 的官网上下载最新版的 Microsoft JDBC 驱动,然后在 `pom.xml` 文件中添加以下依赖: ```xml <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>9.4.0.jre17-preview</version> </dependency> ``` 2. 在代码中使用 JDBC 连接数据库。例如,如果你要连接 SQL Server 数据库,可以使用以下代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Main { public static void main(String[] args) throws SQLException { String url = "jdbc:sqlserver://localhost:1433;databaseName=mydatabase"; String user = "sa"; String password = "123456"; Connection connection = DriverManager.getConnection(url, user, password); // 使用 connection 进行数据库操作 } } ``` 其中,`url` 是数据库的连接地址,`user` 是数据库用户名,`password` 是数据库密码。 注意,SQL Server 的默认连接端口为 1433。 3. 在 IDEA 中配置 JDK 17 环境。在菜单栏中选择 `File -> Project Structure`,在弹出的窗口中选择 `SDKs`,点击 `+` 号添加 JDK 17 的装路径。 4. 在 IDEA 中配置数据库连接。在菜单栏中选择 `View -> Tool Windows -> Database`,在弹出的窗口中点击 `+` 号添加数据库连接,选择数据库类型为 Microsoft SQL Server,填写连接信息,测试连接是否成功。 希望这些步骤能够帮助你在 IDEA使用 JDK 17 连接 SQL Server 数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值