首页 > 解决方案 > 尝试从加密列-sql 服务器获取纯文本时,如何解决“在证书存储中找不到带有指纹 null 的证书”?

问题描述

我有一个SQLserver (2017 ) version带有数据库的远程Test_database1 加密列,使用“始终加密证书”加密。


如何使用 JDBC 解密此列中的值?

我尝试.pfx以格式导出证书并手动将其添加到certmgr.msc我系统中的“个人”文件夹下。该过程工作正常。但是,如果我尝试以编程方式执行此操作,则会收到错误消息。这就是我需要的地方,一些指导和帮助。

String connectionUrl = "jdbc:sqlserver://172.24.114.121:1433;database=Test_database;user=sqlSampleLogin;password=myPass;trustServerCertificate=true;encrypt=true;columnEncryptionSetting=Enabled;"
        +"keyStoreAuthentication=JavaKeyStorePassword"
        +";keyStoreLocation="+pfxCertificateLocation
        +";keyStoreSecret==myPass;";

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
connection = DriverManager.getConnection(connectionUrl);
PreparedStatement selectStatement = connection.prepareStatement("Select * from Table_1");
ResultSet results = selectStatement.executeQuery();
while (results.next()) {
    String name = results.getString("name");
    String sName = results.getString("sAMAccountName"); //Error in this line, since its encrypted
    System.out.println(name +"\t"+sName+"\t");
}

预期结果: “sAMAccountName”列的解密值
实际结果:证书存储中未找到具有指纹 null 的证书 null 在证书位置 null (SQLServerException)

标签: javajdbcssl-certificatealways-encrypted

解决方案


推荐阅读