2010-01-20 10 views
1

com.sun.grizzly.SSLConfig.setKeyStoreFile()을 사용하여 Grizzly에 SSL을 설정하려고합니다. 입력 (InputStream 또는 File이 아님)으로 String을 사용합니다. JAR 파일 내에있는 jks 파일을 사용하고 싶습니다. jar 경로 (예 : C : \ dir \ my.jar! \ resources \ my.jks)에 문자열을 전달하면 실패합니다. JAR에서 파일을 압축 해제하는 것 이외에, 어떻게 그 JKS를 그리즐리 용으로 사용할 수 있습니까?Grizzly의 키 저장소에서 jar 파일의 jks를 사용하도록 설정

답변

3

파일 이름 이외의 것을 전달할 수있는 것으로 보이지 않습니다. source을보고 validateConfiguration()createSSLContext() 메서드를 보면 keyStoreFile 변수를 FileInputStream 생성자에 직접 전달하고 있음을 알 수 있습니다.

단기간에 압축을 풀면 직접 파일 이름이 사용됩니다. 또는 위에 나열된 두 가지 메소드를 대체하여 SSLContext의 유효성을 올바르게 검증하고 초기화 할 수 있습니다. 장기적으로, 나는 패치를 제출할 것이다.

2

@ Kevin의 아이디어가 작동했습니다. 회색 - 서블릿 웹 서버 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); 
    } 
} 
}; 

내가 (등, 여러 문자열 상수를 사용하여 예외를 기록하지 않음) 몇 가지 단축키를했다,하지만 당신은 아이디어를 얻을 수 있습니다.