2013-09-03 2 views
1

Я хочу использовать jdbc для подключения к удаленной базе данных mysql, которая была недавно защищена через ssl. Я нашел простой пример java-программы для проверки соединения. Соединение не работает и жалуется, что файл хранилища ключей не найден. Я подтверждаю, что хранилище ключей действительно там, где я говорю, что это код. По крайней мере, я думаю, что знаю. Тестовое приложение выглядит следующим образом:ssl jdbc connection keystore не найден

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 ** 

файл хранилища ключей существует, но я подозреваю, что может быть что-то не так с ним. Я запускаю приложение на окнах. Есть ли проблемы с файлом? Любая помощь будет оценена по достоинству.

С уважением, Дэйв Semeraro

+0

Вы пытались использовать '/' вместо '\\' в свойствах? И вы знаете, что вы показываете пароль магазина? :) – Qben

ответ

1

Оказывается, администратор базы данных заблокировал все, кроме одного доступа внутрибрюшинен к серверу. Как только мой IP был добавлен, я смог получить вышеприведенный код. Извините за то, что тратишь время всех.

+1

Я не думаю, что ни вопрос, ни ответ были пустой тратой времени. Я нахожу, что эти ситуации довольно распространены, и в любом случае это хорошее напоминание о проверке всей среды. Ни один из нас не просто кодирует мировые примеры. – Steen