Настройка хранилища ключей Grizzly для использования jks в банке - PullRequest
1 голос
/ 20 января 2010

Я пытаюсь использовать com.sun.grizzly.SSLConfig.setKeyStoreFile () , чтобы установить SSL для Grizzly. Он принимает только String в качестве входных данных (не InputStream или File). Я хочу использовать файл JKS, который находится в файле JAR. Если я передаю строку для пути JAR (например, C: \ dir \ my.jar! \ Resources \ my.jks), это не удается. Кроме как разархивировать файл из JAR, как я могу использовать этот JKS для гризли.

Ответы [ 2 ]

3 голосов
/ 21 января 2010

Не похоже, что вы можете передать что-либо кроме имени файла. Если вы посмотрите source и посмотрите на методы validateConfiguration() и createSSLContext(), вы увидите, что переменная keyStoreFile передается непосредственно в конструктор FileInputStream.

В краткосрочной перспективе вы, вероятно, застряли при распаковке и использовании прямого имени файла. Или вы можете переопределить два метода, перечисленных выше, чтобы правильно проверить и инициализировать SSLContext. В долгосрочной перспективе я бы отправил патч.

2 голосов
/ 22 января 2010

@ Идея Кевина сработала! Используя grizzly-servlet-webserver 1.9.8, вот мой код:


SSLConfig ssl = new SSLConfig(){
 @Override
 public SSLContext createSSLContext() { 
  try{
   //Load the keystore.
   KeyStore keyStore=KeyStore.getInstance(KeyStore.getDefaultType());
   InputStream keyStream=ClassLoader.getSystemResourceAsStream("my.jks");
   //InputStream keyStream=new java.net.URL("jar:file:/C:/dir/my.jar!/my.jks").openStream();
   keyStore.load(keyStream,"mypassword");
   keyStream.close();

   //Create the factory from the keystore.
   String kmfAlgorithm=System.getProperty("ssl.KeyManagerFactory.algorithm",KeyManagerFactory.getDefaultAlgorithm());
   KeyManagerFactory keyManagerFactory=KeyManagerFactory.getInstance(kmfAlgorithm);
   keyManagerFactory.init(keyStore,"mypassword");

   //Create the SSLContext
   SSLContext sslContext=SSLContext.getInstance("TLS");
   sslContext.init(keyManagerFactory.getKeyManagers(), null, null);
   return sslContext;
  }

  //Wrap all Exceptions in a RuntimeException.
  catch(Exception e){
   throw new RuntimeException(e);
  }
 }
};

Я сделал несколько ярлыков (не регистрируя исключения, используя несколько строковых констант и т. Д.), Но вы можете понять суть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...