2013-03-03 18 views
5

Ho difficoltà con SSL Java. Il problema è che la mia chiave ha una password. Quando ho generato la chiave utilizzando il comando openssl req -new -newkey rsa:1024 -nodes -out local.csr -keyout local.key, quando è stato richiesto A challenge password []:, ho inserito MyKeyPass. Quindi ho ricevuto il certificato da un'autorità di certificazione. Ho quindi importato il certificato in un KeyStore e un TrustStore.Come specificare la password della chiave usando javax.net.ssl?

Una delle mie app è basata su Jetty e viene eseguita utilizzando Maven, l'altra utilizza socket non elaborati e non utilizzo Maven per questo.

Quando uso il certificato con Jetty, utilizzando la seguente configurazione, tutto funziona bene:

<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> 

Tuttavia, per l'applicazione non utilizza Molo/Maven, la seguente configurazione non funziona:

-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 \ 

ottengo il seguente errore:

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 

Naturalmente, è manca la KeyPassword (MyKeyPass). Ho cercato di trovare come specificarlo usando la sintassi -Djavax.net.ssl, ma non riesco a trovarlo. Come posso specificare la password della chiave?

risposta

5

Non è possibile farlo tramite tali proprietà di sistema: è necessario utilizzare il valore predefinito che lascia lo stesso della password del keystore. Oppure installa un KeyManager personalizzato.

+0

Cambiare il 'KeyStorePass' su' MyKeyPass' ha funzionato. Grazie. –

Problemi correlati