首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >KeyStoreException:在keystore中找不到私钥,其中有尚未共享的-SSL-0.3.11.jar

KeyStoreException:在keystore中找不到私钥,其中有尚未共享的-SSL-0.3.11.jar
EN

Stack Overflow用户
提问于 2011-12-29 02:18:47
回答 1查看 14.2K关注 0票数 0

在使用用于认证的客户端证书的过程中,我决定使用not-yet-commons-ssl-0.3.11.jar。这导致了另一个问题--调用EasySSLProtocolSocketFactoryStrictSSLProtocolSocketFactory上的构造函数的简单操作将产生异常。

代码在一个简单的cmd行应用程序中是孤立的:

代码语言:javascript
运行
复制
public class CertTest {

public static void main(String[] args) {

    System.setProperty("javax.net.debug", "ssl,handshake"); // SSL DEBUG INFO
    String keystore = "/usr/java/jdk1.6.0_11/jre/lib/security/cacerts";
    String keystorePassword = "changeit";

System.setProperty("javax.net.ssl.keyStore", keystore);
System.setProperty("javax.net.ssl.keyStorePassword", keystorePassword);
//        System.setProperty("javax.net.ssl.trustStore", keystore);
//        System.setProperty("javax.net.ssl.trustStorePassword", keystorePassword);

    try {
        org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory factory = 
            new     org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory();
    }
    catch (Exception e) {
        System.out.println (e);
    }

}}

为了用旧的库隔离问题,我将上面的代码放在一个包含这些jars的目录中(这些是类路径中唯一的jars ):

  1. httpclient-4.0.1.jar
  2. not-yet-commons-ssl-0.3.11.jar
  3. commons-httpclient-3.1.jar
  4. httpcore-4.0.1.jar

因此,对于cacerts密钥库中的一些客户端证书,我得到:org.apache.commons.ssl.ProbablyBadPasswordException: Probably bad JKS-Key password: java.security.UnrecoverableKeyException: Password must not be null

如果使用keytool删除已加载的所有客户端证书,则异常将更改为

\*\*Caused by: java.security.KeyStoreException: No private keys found in keystore!\*\* at org.apache.commons.ssl.KeyStoreBuilder.validate(KeyStoreBuilder.java:269) at org.apache.commons.ssl.KeyStoreBuilder.build(KeyStoreBuilder.java:129) at org.apache.commons.ssl.KeyMaterial.(KeyMaterial.java:179) at org.apache.commons.ssl.KeyMaterial.(KeyMaterial.java:170) at org.apache.commons.ssl.KeyMaterial.(KeyMaterial.java:160) at org.apache.commons.ssl.KeyMaterial.(KeyMaterial.java:64) at org.apache.commons.ssl.KeyMaterial.(KeyMaterial.java:114) at org.apache.commons.ssl.KeyMaterial.(KeyMaterial.java:89) at org.apache.commons.ssl.SSL.(SSL.java:142) at org.apache.commons.ssl.SSLClient.(SSLClient.java:59) at org.apache.commons.ssl.HttpSecureProtocol.(HttpSecureProtocol.java:55) at org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory.(EasySSLProtocolSocketFactory.java:94)

输出中的片段:

/usr/java/jdk1.6.0_11/jre/lib/security/cacerts keyStore is: keyStore类型是: keyStore提供者是: init密钥库 SunX509类型的init密钥管理器 /usr/java/jdk1.6.0_11/jre/lib/security/cacerts trustStore is: trustStore类型是: trustStore提供者是: init信任库 添加为可信证书: 主题: CN=SwissSign白金CA - G2,O=SwissSign AG,C=CH 发行人: CN=SwissSign白金CA - G2,O=SwissSign AG,C=CH 算法: RSA;序列号: 0x4eb200670c035d4f所有默认可信证书在这里被剪掉. SecureRandom的触发种子 干播SecureRandom “例外” java.security.KeyStoreException:在密钥库中找不到私钥!

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2011-12-31 21:20:23

java.security.KeyStoreException:在密钥库中找不到私钥!

此异常特别抱怨您要加载的密钥库中没有私钥。

对于cacerts,这是Java的默认信任库,这是正确的!

但是,对于您已经发布的代码(意味着您没有真正发布任何代码),或者您没有提到您正在尝试加载的密钥存储库,在这方面是不可能帮助您的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8663358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档