2010-01-20 42 views

回答

3

它没有出现,你可以传入文件名以外的任何东西。如果您查看source并查看validateConfiguration()createSSLContext()方法,则会看到它将keyStoreFile变量直接传递给FileInputStream构造函数。

短期来看,您可能会停留在解压缩并使用直接文件名。或者你可以重写上面列出的两个方法来正确验证和初始化SSLContext。长期来看,我会提交一个补丁。

2

@ Kevin的想法奏效了!利用灰熊-servlet的Web服务器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); 
    } 
} 
}; 

我花了几个快捷方式(不记录异常,使用几个字符串常量,等等),但你可以得到的想法。