我很抱歉混淆了这些概念,但我对不对称web服务安全的了解很肤浅。
对,我有一个java密钥存储,其中包含我的私钥和一个客户公钥。
当打电话给客户的网络服务时,我收到一条错误消息,说:
"签名或解密无效"。
我们发现,我在密钥存储中的公钥(根据请求发送)与客户在其服务器上的公钥不同。不知怎么的,我给了客户一个不同于我在密钥库中的公钥。
我想做的是根据我在密钥存储中的私钥重新生成公钥,并再次将其发送给客户先生。有可能这样做吗?
老实说,这正是我通过keytool语句所做的。结果,一个扩展名为.cer的文件。带有.cer的文件是公钥吗?
欢迎提出任何建议。
解决了它:
上面我说过我试图从密钥存储中重新生成公钥,但我不确定这是正确的方法。
无论如何,我向客户先生提供了这个新生成的公钥,并要求他们将其安装在服务器上。它起作用了,我们有匹配的公钥。我使用以下keytool命令重新生成公钥:
keytool-export-alias[密钥库中私钥的名称]-file[路径to output]-keystore[到.jks密钥库的路径]
通常情况下,密钥库中会有私钥和证书(链)。如果您只是从链中检索与私钥具有相同别名的第一个证书,那么您应该拥有正确的证书。
当然,通过用私钥对一些任意数据进行签名并用证书中的公钥进行验证来检查这一点并没有坏处。Signature.initVerify()
甚至应该直接获取证书。否则,您还可以比较公钥和私钥的模数(哈希值)。