我正在使用 X509Certificates 实现通信,并且正在努力验证证书。
我已经获得了一个自签名的“父”证书,并用于签署所有其他证书。
这已经完成,我已经获得了证书。
下一步,另一部分是签署我的证书,然后我将存储它们。
这是第一个问题: 返回的证书与我创建的证书不对应,因此公钥不同。 现在如何使用签名的证书更新我的 keystore ?因此,我需要证书中的私钥,但我需要返回证书中的签名版本。
下一个问题: 签名的证书需要根据父证书进行验证和检查,但执行此操作时,如下所示:
X509Certificate parent;
X509Certificate certToVerify;
parent.verify(certToVerify.getPublicKey());
它抛出,签名错误,java.security.SignatureException:签名不匹配。
还有其他方法可以检查颁发者或验证证书吗? 有什么我错过的吗?
最好的, 亨里克
最佳答案
对于您的第一个问题,您应该取回签名证书以响应证书签名请求 (CSR)。例如,您生成了私钥,然后创建了 CSR。您将该 CSR(包含您的公钥)发送给证书颁发机构 (CA)。 CA 验证您的身份并向您返回签名证书。此签名证书应包含与您的 CSR 中相同的公钥。您可以获取签名的证书并将其导入到您的 keystore 中。如果您已经拥有该私钥的自签名证书,则导入的签名证书应替换它。
对于第二个问题,您需要改变陈述。您需要使用父级的公钥验证签名的证书。
X509Certificate parent = ...;
X509Certificate certToVerify = ...;
certToVerify.verify(parent.getPublicKey());
关于Java X509证书颁发者验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18585222/