1

jdbc を使用して、ssl 経由で最近保護されたリモート mysql データベースに接続したいと考えています。接続をテストするための簡単なサンプル Java プログラムを見つけました。接続が失敗し、キーストア ファイルが見つからないというメッセージが表示されます。キーストアが実際にコード内の場所にあることを確認します。少なくとも私はすると思う。テスト アプリケーションは次のようになります。

import java.io.File;
import java.sql.*;
public class TestMySQLSSL {
    public static void main (String[] args)
    {
        Connection con = null;
        System.getProperties().setProperty("javax.net.debug","all");
        System.getProperties().setProperty("javax.net.ssl.keyStore","c:\\LiferayStuff\\bundles\\liferay-portal-6.0.6\\tomcat-6.0.29\\jrel.6.0_20\\keystore");
        System.getProperties().setProperty("javax.net.ssl.keyStorePassword","####");
        System.getProperties().setProperty("javax.net.ssl.trustStore","c:\\LiferayStuff\\bundles\\liferay-portal-6.0.6\\tomcat-6.0.29\\jrel.6.0_20\\truststore");
        System.getProperties().setProperty("javax.net.ssl.trustStorePassword","####");
        try
        {
            String url = "jdbc:mysql://xxx.xxx.xxx.xxx:3306/isc"+
            "?verifyServerCertificate=true"+
            "&useSSL=true"+
            "&requireSSL=true";
            String user = "*******";
            String password = "******";

            Class dbDriver = Class.forName("com.mysql.jdbc.Driver");
            boolean filelives;
            filelives = new File("c:/LiferayStuff/bundles/liferay-portal-6.0.6/tomcat-6.0.29/jre1.6.0_20/keystore").exists();
            System.out.println("keystore " + filelives);
            con = DriverManager.getConnection(url, user, password);
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            if (con != null)
            {
                try
                {
                    con.close();
                }
                catch (Exception e){}
            }
        }
    }
}

出力の最初のビットは次のようになります。

keystore true
keyStore is : c:/LiferayStuff/bundles/liferay-portal-6.0.6/tomcat-6.0.29/jrel.6.0_20/keystore
keyStore type is : jks
keyStore provider is : 
default context init failed:java.security.PrivilegedActionException:java.io.FileNotFoundException: c:\LiferayStuff\bundles\liferay-portal-6.0.6\tomcat-6.0.29\jrel.6.0_20\keystore (The system cannot find the path specified)
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlyingexception: 

** BEGIN NESTED EXCEPTION ** 

com.mysql.jdbc.CommunicationsException
MESSAGE: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

キーストアファイルはそこにありますが、何か問題があるのではないかと思います。Windowsでアプリケーションを実行しています。おそらくファイルに権限の問題がありますか? どんな助けでも大歓迎です。

よろしく、 デイブ・セメラロ

4

1 に答える 1

1

データベース管理者がサーバーへの 1 つの IP アクセスを除くすべてをブロックしていたことが判明しました。IP を追加すると、上記のコードを機能させることができました。みんなの時間を無駄にしてごめんなさい。

于 2013-09-11T17:54:02.300 に答える