如何使用自签名证书通过java程序实现与mssql服务器的SSL连接以进行测试?目前我已经尝试使用连接字符串进行连接,如下所示:
String dbUrl = "jdbc:sqlserver://" + server + ":" + port
+ ";databaseName=" + database + ";user="+ username
+ ";password=" + password
+ ";encrypt="+true
+ ";integratedSecurity="+true
+ ";trustServerCertificate="+false
+ ";hostNameInCertificate=?"
+ ";trustStore=?;trustStorePassword=?";
我现在很困惑“?”应该放什么?上面连接字符串中的位置。
我还可以通过以下方法从 Management Studio 连接 mssql:
然后在服务器证书的右侧面板上,单击创建自签名证书并提供友好名称。 > 好的。现在证书已经准备好了。
在cmd中输入mmc打开MMC
添加MSSQL用户,添加读权限。
现在打开 SQL Server 配置管理器
在证书选项卡中,选择最近添加的证书
重新启动 SQL Server 服务。
但是如何与java程序连接呢? trustStore 和 trustStorePassword 字段中应该保留什么?
工作环境:Windows 8、mssql server 2012
我确信您现在已经解决了这个问题!但如果其他人遇到同样的问题,请在此处解决: https://msdn.microsoft.com/en-us/library/bb879949(v=sql.110).aspx
当 encrypt 属性设置为 true 且 trustServerCertificate 属性设置为 true 时,Microsoft JDBC Driver for SQL Server 将不会验证 SQL Server SSL 证书。这通常是允许在测试环境中进行连接所必需的,例如 SQL Server 实例只有自签名证书。
String connectionUrl =
"jdbc:sqlserver://localhost:1433;" +
"databaseName=AdventureWorks;integratedSecurity=true;" +
"encrypt=true;trustServerCertificate=true";
在官方文档中,它说使用这个:
String connectionUrl =
"jdbc:sqlserver://localhost:1433;" +
"databaseName=AdventureWorks;integratedSecurity=true;" +
"encrypt=true;trustServerCertificate=true";
但它对我不起作用,我必须删除
integratedSecurity=true
才能起作用。最终连接 URL 为:
spring.datasource.url=jdbc:sqlserver://888.000.999.666;database=mydatabase;encrypt=true;trustServerCertificate=true