gpt4 book ai didi

java - 如何使用 javax.net.ssl 指定 key 密码?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:04 25 4
gpt4 key购买 nike

我在使用 Java SSL 时遇到困难。问题是我的 key 有密码。当我使用命令 openssl req -new -newkey rsa:1024 -nodes -out local.csr -keyout local.key 生成 key 时,当被要求输入 A challenge password []:,我输入了 MyKeyPass。然后我从证书颁发机构获得了证书。然后,我将证书导入 KeyStore 和 TrustStore。

我的一个应用程序基于 Jetty 并使用 Maven 运行,另一个使用原始套接字,我没有使用 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 语法来指定它,但似乎找不到。如何指定 key 密码?

最佳答案

你不能通过那些系统属性来做到这一点:你必须使用默认值,使其与 keystore 密码相同。或者安装自定义 KeyManager。

关于java - 如何使用 javax.net.ssl 指定 key 密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15182071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com