2015-04-20 3 views
0

Я пытаюсь сделать POST вызов на защищенный веб-сайт:NoSuchAlgorithmException: дер KeyStore не доступен

шаги:

1) Перейти к https://www.mywebsite.com (для справки)

2) Экспорт хранилище данных на вышеуказанном веб-сайте до C:\Program Files\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 

ОБНОВЛЕНИЕ:

В ответ на ответ Лоло я не получаю PKCS12 или JKS форматов при попытке сохранить хранилище ключей.

enter image description here

ответ

2

Ответ на сообщение об исключении: «DER не найден» при вызове KeyStore.getInstance() означает, что der не известный формат для хранения ключей. Вы можете попробовать один из известных форматов, например JKS (по умолчанию для JVM Oracle) или PKCS12. См. Это other post для получения более подробной информации о форматах хранилища.

Edit:

Как показано на скриншоте, файл, который вы сохраняете файл сертификата. Предполагая, что вы затем импортировать его в доверенное хранилище с помощью Oracle, «keytool» и что вы не указали формат хранилища доверенных, то по умолчанию формат JKS для виртуальной машины Java в Oracle следует использовать в своем коде, вместо der:

String keystoreType = "JKS"; 
+0

Пожалуйста, проверьте мое обновление в вопросе. В моем диалоговом окне сохранения не указаны параметры сохранения типа 'JKS' или' PKSC12'. –

+0

Я в замешательстве. Ваш скриншот показывает, что вы сохраняете сертификат, а не хранилище ключей или хранилищ. Вам необходимо эффективно сохранить файл сертификата (который может иметь расширение «.der»), затем импортировать его в truststore_ с соответствующим форматом (используя «keytool»). Или я чего-то не хватает? – Lolo

+0

да, это то, что я делаю. Я сохранил его как '.der', а затем импортировал с помощью keytool' keytool -import -alias my-cert -file c: \ cert.crt -keystore% JAVA_HOME%/jre/lib/security/cacerts', тогда мой код дает исключение как я упомянул «NoSuchAlgorithmException: der KeyStore недоступно». –