我正在尝试使用com.sun.grizzly.SSLConfig.setKeyStoreFile()为Grizzly设置SSL。它只接受一个字符串作为输入(不是InputStream或File)。我想使用JAR文件中的jks文件。如果我为jar路径传递一个字符串(例如C:\ dir \ my.jar!\ resources \ my.jks),它将失败。除了从JAR中解压文件外,我怎么可以将这个JKS用于灰熊。设置Grizzly的keystore在jar中使用jks
1
A
回答
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);
}
}
};
我花了几个快捷方式(不记录异常,使用几个字符串常量,等等),但你可以得到的想法。
相关问题
- 1. 设置Spring 4 RestTemplate以使用SSL(JKS)
- 2. 如何使用Groovy脚本设置Keystore
- 3. 如何将x509.pem pk8文件导入到jks-keystore中?
- 4. 将GNU-CRYPTO gkr keystore转换为默认JKS
- 5. 以PKCS12格式为tomcat/JKS Keystore转换证书
- 6. Glassfish使用p12 keystore覆盖keystore
- 7. 在Robolectric测试中使用Android KeyStore
- 8. 在jar中使用JAR
- 9. 设置JAR的类路径
- 10. 如何以编程方式将java jks keystore转换为pkcs12证书?
- 11. Grizzly HttpServer:为每个响应设置永久标头
- 12. Eclipse(Helios)使用哪个keystore?
- 13. 更改默认.keystore位置
- 14. Keystore Eclipse ADT文件位置
- 15. Swagger + Jersey + Grizzly
- 16. 运行jar,设置classpath
- 17. 在BouncyCastle-Keystore中导入.pfx
- 18. 在dll中使用设置?
- 19. Java:在jar应用程序中设置图标
- 20. 如何在Eclipse中的Target Platform JAR中设置断点?
- 21. 在jks(ssl)中使用多个密钥时出现问题
- 22. 使用keytool将属性添加到.jks
- 23. 我应该在Android Market的Keystore中使用“Distinguished Name”
- 24. 使用存储在KeyStore中的密钥加密领域
- 25. 使用Android KeyStore的ECDH生成私钥
- 26. 根据请求的主机名在JBoss中配置多个keystore
- 27. 在SOAPUI插件中使用keystore用于Eclipse
- 28. 如何在使用Maven时从jar文件中排除一些设置文件?
- 29. 访问Tomcat配置的KeyStore和TrustStore
- 30. 使用JKS配置SSL RestTemplate而不使用httpClient进行弹簧启动