服务公钥-私钥通信问题

问题描述

我正在寻找有关以下问题的建议。有两个系统通过 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 (将#修改为@)