You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When using key pair authentication to connect to snowflake through jdbc, and using a special character (like #) in the URL causes an exception: Private key provided is invalid or not supported: rsa_key_bad2.p8: Cannot retrieve the PKCS8EncodedKeySpec
Then, using the newly generated private and public keys, try to connect to Snowflake using this sample Java program, making sure to replace the placeholder values with your values for URL, KEYFILE, and KEYPWD:
import java.sql.*;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws Exception {
// get connection
System.out.println("Create JDBC connection");
Connection connection = getConnection();
System.out.println("Done creating JDBC connection\n");
// create statement
System.out.println("Create JDBC statement");
Statement statement = connection.createStatement();
System.out.println("Done creating JDBC statement\n");
// create a table
System.out.println("Create demo table");
statement.executeUpdate("create or replace table demo(c1 string)");
System.out.println("Done creating demo table\n");
// insert a row
System.out.println("Insert 'hello world'");
statement.executeUpdate("insert into demo values ('hello world')");
System.out.println("Done inserting 'hello world'\n");
// query the data
System.out.println("Query demo");
ResultSet resultSet = statement.executeQuery("select * from demo");
System.out.println("Metadata:");
System.out.println("================================");
// fetch metadata
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
System.out.println("Number of columns=" + resultSetMetaData.getColumnCount());
for (int colIdx = 0; colIdx < resultSetMetaData.getColumnCount(); colIdx++) {
System.out.println(
"Column " + colIdx + ": type=" + resultSetMetaData.getColumnTypeName(colIdx + 1));
}
// fetch data
System.out.println("\nData:");
System.out.println("================================");
int rowIdx = 0;
while (resultSet.next()) {
System.out.println("row " + rowIdx + ", column 0: " + resultSet.getString(1));
}
resultSet.close();
statement.close();
connection.close();
}
private static Connection getConnection() throws SQLException, ClassNotFoundException {
// build connection properties
Class.forName("net.snowflake.client.jdbc.SnowflakeDriver");
Properties properties = new Properties();
properties.put("user", ""); // replace "" with your user name
properties.put("warehouse", ""); // replace "" with target warehouse name
properties.put("db", ""); // replace "" with target database name
properties.put("schema", ""); // replace "" with target schema name
String connectStr = "jdbc:snowflake://URL?private_key_file=KEYFILE&private_key_file_pwd=KEYPWD";
return DriverManager.getConnection(connectStr, properties);
}
}
You should get the following exception:
Exception in thread "main" net.snowflake.client.jdbc.SnowflakeSQLLoggedException: Private key provided is invalid or not supported: C:/dev/temp/DAT-11888/rsa_key_bad2.p8: Cannot retrieve the PKCS8EncodedKeySpec
at net.snowflake.client.jdbc.DefaultSFConnectionHandler.initialize(DefaultSFConnectionHandler.java:109)
at net.snowflake.client.jdbc.DefaultSFConnectionHandler.initializeConnection(DefaultSFConnectionHandler.java:79)
at net.snowflake.client.jdbc.SnowflakeConnectionV1.initConnectionWithImpl(SnowflakeConnectionV1.java:116)
at net.snowflake.client.jdbc.SnowflakeConnectionV1.<init>(SnowflakeConnectionV1.java:96)
at net.snowflake.client.jdbc.SnowflakeDriver.connect(SnowflakeDriver.java:176)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:189)
at Main.getConnection(Main.java:63)
at Main.main(Main.java:8)
The text was updated successfully, but these errors were encountered:
@StevenMassaro Are you still able to reproduce the issue with the latest JDBC driver version? And if yes, can you please provide me with the OS version and OpenSSL version?
When using key pair authentication to connect to snowflake through jdbc, and using a special character (like
#
) in the URL causes an exception:Private key provided is invalid or not supported: rsa_key_bad2.p8: Cannot retrieve the PKCS8EncodedKeySpec
To reproduce this issue, set up key pair auth access to snowflake by following this page, and make sure to choose a password like
pass#ord
when generating the private key. (You may need to use these instructions to generate your keys: https://community.snowflake.com/s/article/Private-key-provided-is-invalid-or-not-supported-rsa-key-p8--data-isn-t-an-object-ID)Then, using the newly generated private and public keys, try to connect to Snowflake using this sample Java program, making sure to replace the placeholder values with your values for
URL
,KEYFILE
, andKEYPWD
:You should get the following exception:
The text was updated successfully, but these errors were encountered: