8

JavaSSLに問題があります。問題は、私のキーにパスワードがあることです。コマンドを使用してキーを生成したopenssl req -new -newkey rsa:1024 -nodes -out local.csr -keyout local.keyとき、要求されたときにA challenge password []:、と入力しMyKeyPassました。次に、認証局から証明書を取得しました。次に、証明書をKeyStoreとTrustStoreにインポートしました。

私のアプリの1つはJettyに基づいており、Mavenを使用して実行され、もう1つはrawソケットを使用しており、Mavenを使用していません。

次の構成を使用してJettyで証明書を使用すると、すべてが正常に機能します。

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

ただし、Jetty / Mavenを使用していないアプリの場合、次の構成は機能しません。

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

次のエラーが発生します。

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

もちろん、KeyPassword(MyKeyPass)がありません。構文を使用して指定する方法を見つけようとしましたが-Djavax.net.ssl、見つからないようです。キーパスワードを指定するにはどうすればよいですか?

4

1 に答える 1

7

これらのシステムプロパティを介してそれを行うことはできません。キーストアのパスワードと同じままにするデフォルトを使用する必要があります。または、カスタムKeyManagerをインストールします。

于 2013-03-03T04:05:15.783 に答える