認証にPKI
を使用するJavaアプリケーションを作成しようとしています。私はMicrosoft証明書ストア(MCS)から証明書を取得し、それをOracleデータベース(11.2)に渡す必要があります。Windowsキーストア(MCS)をJDBCで使用するには?
私はjdbc:oracle:thin
ドライバを使用して接続しています。 Googleでかなりの時間を過ごした後、私は空になる。 私は(記事に応じて)変更するために、異なる性質を発見しました:
- は、私は以来、動作するとは考えていないカスタムのKeyManagerを使用している場合
javax.net.ssl.keyStoreType = "Windows-MY"
- は(
javax.net.ssl.keyStore = "Windows-MY"
javax.net.ssl.keyStore should be set to "None"
を設定するプロパティを設定します私のカスタムKeyManagerに入るまでに、接続プロパティで指定されたキーストアからすでに証明書が与えられます)。
もちろん、これらの人々のすべてが成功を主張していますが、何も私のために働いていません。私はすべての事例を試してみましたが、私は運がないすべてを見つけることができました。 Oracle Walletを使用しているときに正常に認証できたので、証明書が正常であることがわかりました。誰でもこれを前にしていて、素晴らしいコードを投稿しても構いません。
ほとんどの人がウェブサイトでWindowsキーストアを使用しているため、独自のSSLContextを作成していますが、私はJDBCを使ってこれをやりたがっているとは思えません。 SSLContextを提供することができます)。
これは私がうまくいくはずのコードですが、そうではありません。
DriverManager.registerDriver)new OracleDriver());
String url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=host)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=someName))(SECURITY= (SSL_SERVER_CERT_DN=\"CN=TESTSERVER\")))";
java.util.Properties props = new java.util.Properties();
props.setProperty("javax.net.ssl.keyStoreType", "Windows-MY");
props.setProperty("javax.net.ssl.keyStore", "NONE");
props.setProperty("javax.net.ssl.trustStoreType", "Windows-ROOT");
props.setProperty("javax.net.ssl.trustStore", "NONE");
props.setProperty("oracle.net.ssl_server_dn_match", "true");
props.setProperty("oracle.net.authentication_services", "(TCPS)");
Connection conn = DriverManager.getConnection(url, props);
このコードは例外で失敗します
java.sql.SQLRecoverableException: IOException: The Network Adapter could not establish the connection
コードではないテキストのコードの書式設定は使用しないでください。 – EJP