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를 사용하도록 설정
1
A
답변
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);
}
}
};
내가 (등, 여러 문자열 상수를 사용하여 예외를 기록하지 않음) 몇 가지 단축키를했다,하지만 당신은 아이디어를 얻을 수 있습니다.