2015-04-20 19 views
0

我试图做一个POST调用一个安全的网站:抛出:NoSuchAlgorithmException:DER密钥库不可用

步骤:

1)进入https://www.mywebsite.com(仅供参考)

2)出口上述网站的钥匙库到C:\Program Files\Java\jre7\lib\security

3)将其导入到cacerts中添加使用密钥工具自签名的签名

keytool -import -alias my-cert -file c:\cert.crt -keystore %JAVA_HOME%/jre/lib/security/cacerts 

做我用下面的程序上面的步骤后:

String keystorePathAndName = "C:\\Program Files\\Java\\jre7\\lib\\security\\mykeystore"; 
String keystoreType = "der"; 

String keystorePass = ""; 

Integer port = 8089; 
if (System.getProperty("port") != null) { 
    port = Integer.valueOf(System.getProperty("port")); 
} 
// Create a server listening on port 8089 
Component component = new Component(); 
Server server = component.getServers().add(Protocol.HTTPS, port); 
Series<Parameter> params = server.getContext().getParameters(); 
params.add("keystorePath", keystorePathAndName); 
params.add("keystoreType", keystoreType); 

params.add("keystorePassword", keystorePass); 


component.getDefaultHost().attach("/Simulator",new UserApplication()); 
component.start(); 

错误日志:

Exception in thread "main" java.security.KeyStoreException: der not found 
    at java.security.KeyStore.getInstance(KeyStore.java:616) 
    at org.restlet.engine.ssl.DefaultSslContextFactory.createSslContext(DefaultSslContextFactory.java:299) 
    at org.restlet.engine.connector.HttpsServerHelper.start(HttpsServerHelper.java:92) 
    at org.restlet.Server.start(Server.java:579) 
    at org.restlet.Component.startServers(Component.java:642) 
    at org.restlet.Component.start(Component.java:567) 
    at com.user.app.userapp.main.AppServer.main(AppServer.java:78) 
Caused by: java.security.NoSuchAlgorithmException: der KeyStore not available 
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:159) 
    at java.security.Security.getImpl(Security.java:695) 
    at java.security.KeyStore.getInstance(KeyStore.java:613) 
    ... 6 more 

更新:

回应洛洛的答案,我没有得到PKCS12JKS格式时试图保存密钥库。

enter image description here

回答

2

答案是在异常的消息:“明镜找不到”在调用KeyStore.getInstance()意味着der不是您的密钥存储已知的格式。您应尝试使用已知格式之一,例如JKS(Oracle的JVM的默认值)或PKCS12。有关密钥库格式的更多详细信息,请参阅other post

编辑:

在你的屏幕截图所示,您保存该文件是一个证书文件。假设你再使用甲骨文的“keytool”和你没有指定信任格式导入到信任库,那么对于Oracle的JVM的默认格式JKS应该在你的代码中使用,而不是der,:

String keystoreType = "JKS"; 
+0

请检查我的问题更新。我的保存对话框没有给我保存为'JKS'或'PKSC12'类型的选项。 –

+0

我很困惑。您的屏幕截图显示您正在保存证书,而不是密钥库或信任库。您需要有效地保存证书文件(可能具有“.der”扩展名),然后使用适当的格式(使用'keytool')将其导入到truststore_中。或者我错过了什么? – Lolo

+0

是的,这是我正在做的。我将它保存为'.der',然后使用keytool'keytool -import -alias my-cert -file c:\ cert.crt -keystore%JAVA_HOME%/ jre/lib/security/cacerts'导入,然后我的代码给出异常正如我所提到的'NoSuchAlgorithmException:der KeyStore not available'。 –