我有一个连接到很多外部服务的工作应用程序。我正在添加一个需要客户端身份验证的新SOAP客户端。我可以让它工作,但不是在不打破应用程序中的其他事情的情况下,所以我对于发生的事情感到非常困惑。一些快速背景:Java客户端证书冲突
- 我们使用默认的cacerts文件,并在那里导入了很多可信任的证书。
- 我们创建了一个私钥,生成了一个证书请求,获得了证书,并创建了一个包含用于客户端身份验证的证书和私钥的p12文件。
- 如果我们指定P12文件作为密钥存储的应用程序的SOAP客户端的工作原理:
-Djavax.net.ssl.keyStore = “keystore.p12” -Djavax.net.ssl.keyStorePassword =”密码” -Djavax.net.ssl.keyStoreType = “PKCS12”
- 如果我们不这样做上述情况,而是导入到cacerts文件这个做:
- 了java.lang.RuntimeException:无法实例化类com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient的实例
- COM .amazonaws.AmazonClientException:无法访问默认的SSL上下文
- java.security.NoSuchAlgorithmException:错误构建的实现(算法:默认,供应商:SunJSSE,等级:sun.security.ssl.SSLContextImpl $ DefaultSSLContext)
- java.security .UnrecoverableKeyException:无法恢复密钥
keytool -importkeystore -srckeystore keystore.p12 -destkeystore cacerts -srcstoretype pkcs12
它不起作用!如果我们这样做并且它不工作,并且指定cacerts作为每步3的密钥库(不包括最后一个arg,因为它是不同的商店类型,对吧?)
因此,通过步骤1-3,我们有了新的集成工作,但问题是,现在应用程序中的其他东西打破了!之前没有指定其他密钥库(我的理解是,它默认为cacerts)。我们现在有错误,如与AWS的SES(电子邮件)服务抛出异常,如:
有人可以向我解释什么是造成这种冲突和如何解决它?非常感谢您的帮助!
杰夫
您是否检查过您是否拥有访问jre安全库/文件夹的管理员权限。有时如果你没有管理权限,你可能会遇到这种例外情况。 –
Cacerts是信任商店而不是关键商店。 – beny23
我有权访问cacerts - 我已经添加了证书以信任那里,这工作得很好。我对关键和信任商店之间的区别感到困惑。从概念上讲,我明白了,但是当我指定一个特定的密钥存储区时,其他东西就会中断,而没有其他配置。对于每个java文档和我的文件,它看起来应该放到keystore的cacerts中。 – Jeff057