2013-03-03 10 views
5

Mam problemy z językiem Java SSL. Problem polega na tym, że mój klucz ma hasło. Kiedy wygenerowałem klucz za pomocą komendy openssl req -new -newkey rsa:1024 -nodes -out local.csr -keyout local.key, na pytanie o A challenge password []: wprowadziłem MyKeyPass. Następnie otrzymałem certyfikat od urzędu certyfikacji. Następnie zaimportowałem certyfikat do KeyStore i TrustStore.Jak określić hasło klucza za pomocą javax.net.ssl?

Jedna z moich aplikacji oparta jest na Jetty i działa z wykorzystaniem Mavena, druga wykorzystuje surowe gniazda i nie używam Mavena do tego.

Kiedy używam certyfikatu z Jetty, stosując następującą konfigurację, wszystko działa prawidłowo:

<connector implementation="org.mortbay.jetty.security.SslSelectChannelConnector"> 
    <port>443</port> 
    <maxIdleTime>30000</maxIdleTime> 
    <keystore>keys/domain.jks</keystore> 
    <password>KeyStorePass</password> 
    <keyPassword>MyKeyPass</keyPassword> 
    <truststore>keys/truststore_domain.jks</truststore> 
    <trustPassword>TrustStorePass</trustPassword> 
</connector> 

Jednak dla App nie używając Jetty/Maven, następująca konfiguracja nie działa:

-Djavax.net.ssl.keyStore=./keys/domain.jks \ 
-Djavax.net.ssl.keyStorePassword=KeyStorePass \ 
-Djavax.net.ssl.trustStore=./keys/truststore_domain.jks \ 
-Djavax.net.ssl.trustStorePassword=TrustStorePass \ 

pojawia się następujący błąd:

Caused by: java.security.UnrecoverableKeyException: Cannot recover key 
    at sun.security.provider.KeyProtector.recover(KeyProtector.java:328) 
    at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:138) 
    at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:55) 
    at java.security.KeyStore.getKey(KeyStore.java:792) 
    at sun.security.ssl.SunX509KeyManagerImpl.<init>(SunX509KeyManagerImpl.java:131) 
    at sun.security.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:68) 
    at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:259) 
    at sun.security.ssl.SSLContextImpl$DefaultSSLContext.getDefaultKeyManager(SSLContextImpl.java:621) 
    at sun.security.ssl.SSLContextImpl$DefaultSSLContext.<init>(SSLContextImpl.java:486) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at java.lang.Class.newInstance0(Class.java:372) 
    at java.lang.Class.newInstance(Class.java:325) 
    at java.security.Provider$Service.newInstance(Provider.java:1238) 
    ... 12 more 

oczywiście, to jest brakuje klucza KeyPassword (MyKeyPass). Próbuję znaleźć sposób, aby określić go przy użyciu składni -Djavax.net.ssl, ale nie można go znaleźć. Jak określić hasło kluczowe?

Odpowiedz

5

Nie można tego zrobić za pomocą tych właściwości systemu: należy użyć wartości domyślnej, która pozostawia ją tak samo, jak hasło magazynu kluczy. Lub zainstaluj niestandardowy KeyManager.

+0

Zmieniłem 'KeyStorePass' na' MyKeyPass'. Dzięki. –

Powiązane problemy