问题描述
我正在寻找有关以下问题的建议。有两个系统通过 wsdl 服务进行通信,比如说 SystemA 和 SystemB(Java 8,服务器wildfly-booteable,lib:org.apache.cxf,org.apache.wss4j)。两个系统都有用于通信的公钥和私钥(SystemA 有 SystemB 的公钥来调用 SystemB 的服务,反之亦然)。
当 SystemA 调用 SystemB 服务时一切正常,但是当 SystemB 调用 SystemA 服务时,它在 SystemA 中出现以下错误:
|Causedby:org.apache.wss4j.common.ext.WSSecurityException:The private key for the supplied alias does not exist in the keystore
|OriginalExceptionwasorg.apache.wss4j.common.ext.WSSecurityException:Theprivatekeyforthesuppliedaliasdoesnotexistinthekeystore
|OriginalExceptionwasjava.security.UnrecoverableKeyException:Cannotrecoverkey
|atorg.apache.wss4j.dom.processor.EncryptedKeyProcessor.getPrivateKey(EncryptedKeyProcessor.java:270)
|atorg.apache.wss4j.dom.processor.EncryptedKeyProcessor.handletoken(EncryptedKeyProcessor.java:226)
|atorg.apache.wss4j.dom.processor.EncryptedKeyProcessor.handletoken(EncryptedKeyProcessor.java:90)
|atorg.apache.wss4j.dom.engine.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:340)
|atorg.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessageInternal(WSS4JInInterceptor.java:319)
|...41more
|Causedby:org.apache.wss4j.common.ext.WSSecurityException:The private key for the supplied alias does not exist in the keystore
|OriginalExceptionwasjava.security.UnrecoverableKeyException:Cannot recover key
事情就是这样,我可以完全访问 SystemA 的代码、密钥等。但我根本没有关于 SystemB 的信息,只是希望他们正确安装了 SystemA 的公钥。
我需要找到一种方法来知道他们是否使用了正确的公钥,有没有办法在日志中打印 SystemB 用来调用 SystemA 的公钥别名或类似的东西?因为万一是 SystemsB 故障,我需要证据。
也可能是 SystemA 有问题,这里是 SystemA 中的定义:
SystemA 的私钥:
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=testkey
org.apache.ws.security.crypto.merlin.keystore.alias=testkey
org.apache.ws.security.crypto.merlin.keystore.file=/opt/archivos/clave_priv/testkey.jks
SystemB 的公钥:
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=pass
org.apache.ws.security.crypto.merlin.keystore.alias=epagos
org.apache.ws.security.crypto.merlin.keystore.file=/opt/archivos/clave_pub/keystore.jks
您认为解决此问题的最佳方法是什么? (同样,没有办法与 SystemB 提供者沟通,只有在我有证据表明他们有问题的情况下)
谢谢!
编辑: 私钥的密码是正确的,我按照这个Caused by: java.security.UnrecoverableKeyException: Cannot recover key
的答案之一证明了这一点解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)