【问题标题】:Java exception client authentication TLS: password must not be nullJava异常客户端身份验证TLS:密码不能为空
【发布时间】:2014-11-06 12:36:40
【问题描述】:

我编写这段代码是为了与 ejbca 服务器JBoss 5.1.0.GA-jdk6EJBCA 4.0.10openjdk-6-jdk)通信:

CryptoProviderTools.installBCProvider();    
String urlstr = "https://ejbca05:8443/ejbca/ejbcaws/ejbcaws?wsdl";

System.setProperty("javax.net.ssl.trustStore","C:\\Users\\l.\\keystore.jks"); 
System.setProperty("javax.net.ssl.trustStorePassword","provae"); 
System.setProperty("javax.net.ssl.keyStore","C:\\Users\\l.\\keystore.jks");
System.setProperty("javax.net.sslews.keyStorePassword","provae"); 
QName qname = new QName("http://ws.protocol.core.ejbca.org/", "EjbcaWSService");
EjbcaWSService service = null;
try {
    service = new EjbcaWSService(new URL(urlstr),qname);
} catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    System.out.println("errore nell'url");
}
EjbcaWS ejbcaraws = service.getEjbcaWSPort(); 

但我有这个例外:

Exception in thread "main" javax.xml.ws.WebServiceException: Failed to access the WSDL at: https://ejbca05:8443/ejbca/ejbcaws/ejbcaws?wsdl. It failed with: 
    Got java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext) while opening stream from https://ejbca05:8443/ejbca/ejbcaws/ejbcaws?wsdl.
    at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:173)
..........
.......
Caused by: java.security.UnrecoverableKeyException: Password must not be null
    at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:124)
    at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:55)
    at java.security.KeyStore.getKey(KeyStore.java:792)

keystore superadmin.p12 转换为 jks。我也尝试过使用 ejbca 或 keytool 创建的其他密钥库,但我得到了同样的错误。 有人知道为什么吗?

【问题讨论】:

  • 您不应该对密钥库和信任库使用相同的文件。您的代码无法编译。

标签: java ssl passwords keystore ejbca


【解决方案1】:

属性好像设置错了

错误:

System.setProperty("javax.net.sslews.keyStorePassword","provae"); 

正确的一项:

System.setProperty("javax.net.ssl.keyStorePassword","provae"); 

【讨论】:

    【解决方案2】:

    使用此代码似乎有效

    String urlstr = "https://ejbca05.prv:8443/ejbca/ejbcaws/ejbcaws?wsdl";
            System.setProperty("javax.net.ssl.trustStore","C:/Users/l./Downloads/truststore.jks");
            System.setProperty("javax.net.ssl.trustStorePassword","provae");
            System.setProperty("javax.net.ssl.keyStore","C:/Users/l./Downloads/superadmin.p12");
            System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
            System.setProperty("javax.net.ssl.keyStorePassword","provae");
    

    可能将 p12 转换为 jks 密钥库无法正常工作。

    编辑:可以使用此命令转换为 jks

    keytool -importkeystore -srckeystore [MY_FILE.p12] -srcstoretype pkcs12
     -srcalias [ALIAS_SRC] -destkeystore [MY_KEYSTORE.jks]
     -deststoretype jks -deststorepass [PASSWORD_JKS] -destalias [ALIAS_DEST]
    

    【讨论】:

      猜你喜欢
      • 2016-07-09
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 2014-01-29
      相关资源
      最近更新 更多