簡體   English   中英

通過帶有SSL的JDBC連接到Google Cloud PostgreSQL

[英]Connection to Google Cloud PostgreSQL via JDBC with SSL

我無法使用JDBC連接Google Cloud PostgreSQL。

Java版本:1.8.0_162

PostgreSQL JDBC版本:42.2.2

 try {
    Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
    System.out.println("Class not found");
}

String url = "jdbc:postgresql://ipaddresshere:5432/postgres";

Properties props = new Properties();
props.setProperty("user","postgres");
props.setProperty("password","passwordhere");

props.setProperty("ssl","true");
props.setProperty("sslcert","/Users/bguler/Desktop/GoogleCloudPGSSL/client-cert.pem");
props.setProperty("sslkey","/Users/bguler/Desktop/GoogleCloudPGSSL/client-key.pem");
props.setProperty("sslrootcert","/Users/bguler/Desktop/GoogleCloudPGSSL/server-ca.pem");

try {

    Connection conn = DriverManager.getConnection(url, props);
    System.out.println(conn);

} catch (SQLException ex) {

    System.out.println(ex.getMessage());

}

我測試了證書路徑是否正確。

它拋出錯誤為;

引起原因:sun.security.provider.certpath.SunCertPathBuilderException:無法找到到請求目標的有效證書路徑

SSL錯誤:sun.security.validator.ValidatorException:PKIX路徑構建失敗:sun.security.provider.certpath.SunCertPathBuilderException:無法找到到請求目標的有效證書路徑

我可以毫無問題地通過psql在終端上進行連接;

psql "sslrootcert=server-ca.pem \
  sslcert=client-cert.pem sslkey=client-key.pem \
  hostaddr=ipaddress \
  port=5432 \
  user=postgres dbname=postgres"

Java使用自己的密鑰存儲(而不是psql使用的系統存儲),該密鑰存儲不知道此特定證書,因此不信任該證書。

嘗試使用最新版本的Java和/或檢查數據庫實例的文檔。 這應該是一個已知的問題。

如果Java默認信任庫不信任Postgres服務器使用的證書,則需要添加它。

首先,將您的證書轉換為DER格式:

openssl x509 -outform der -in server-ca.pem -out server-ca.der

然后,將其導入密鑰庫中:

keytool -import -trustcacerts -alias your-alias -keystore cacerts -file server-ca.der

或者,您可以使用Java系統屬性來更改通過添加命令行參數使用的信任庫:

-Djavax.net.ssl.trustStore=<path to your trusstore>.jks -Djavax.net.ssl.trustStorePassword=<your password>

通過將以下內容添加到啟動命令行中,將Java SSL類置於調試狀態也可能會有所幫助:

-Djavax.net.debug=ssl,handshake:verbose

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM