Java NoSuchAlgorithmException:der密钥库不可用

Java NoSuchAlgorithmException:der密钥库不可用,java,post,httpclient,restlet,Java,Post,Httpclient,Restlet,我正在尝试对一个安全的网站进行POST呼叫: 步骤: 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(DefaultSslContex

我正在尝试对一个安全的网站进行
POST
呼叫:

步骤:

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
1) 转到(供参考)

2) 将上述网站的密钥库导出到
C:\ProgramFiles\Java\jre7\lib\security

3) 将其导入cacerts以使用keytool添加自签名签名作为

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
作为对Lolo答案的回应,在尝试保存密钥库时,我没有得到
PKCS12
JKS
格式


在调用
KeyStore.getInstance()
时,答案在异常消息中:“未找到der”。这意味着
der
不是密钥存储的已知格式。您应该尝试一种已知的格式,例如
JKS
(Oracle JVM的默认值)或
PKCS12
。有关密钥库格式的更多详细信息,请参见本文

编辑:

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
如屏幕截图所示,您保存的文件是一个证书文件。假设您随后使用Oracle的“
keytool
”将其导入信任库,并且您没有指定信任库格式,那么您的代码中应该使用Oracle JVM的默认格式
JKS
,而不是
der

String keystoreType = "JKS";

请检查问题中我的更新。我的保存对话框没有给我保存为type
JKS
PKSC12
的选项。我很困惑。您的屏幕截图显示您正在保存证书,而不是密钥或信任存储。您需要有效地保存证书文件(扩展名可能为“.der”),然后将其以适当的格式导入信任库(使用
keytool
)。还是我遗漏了什么?是的,这就是我正在做的。我将它保存为一个
.der
,然后使用keytool
keytool-import-alias my cert-file c:\cert.crt-keystore%JAVA_HOME%/jre/lib/security/cacerts导入,然后我的代码给出了我提到的异常
nosuchagorithmexception:der keystore不可用