我正在使用X509Certificates实现通信,并且正在努力验证证书。
我获得了一个自签名的“父”证书,用于签署所有其他证书。
这已经完成,我已经获得了证书。
在下一步中,另一部分是签署我的证书,我将存储它们。
这是第一个问题: 我返回的证书与我创建的证书不对应,因此公钥不同。 我现在如何使用签名证书更新我的密钥库?因此,我需要我的证书中的私钥,但我需要从返回的证书中签名的版本。
下一个问题: 签名证书需要根据父证书进行验证和检查,但在执行此操作时,如下所示:
X509Certificate parent;
X509Certificate certToVerify;
parent.verify(certToVerify.getPublicKey());
抛出,签名错误,java.security.SignatureException:签名不匹配。
有没有其他方法可以检查发卡机构或验证证书? 有没有我错过的东西?
最好的, 亨利克
答案 0 :(得分:2)
对于您的第一个问题,您应该返回已签名的证书以响应证书签名请求(CSR)。例如,您生成了一个私钥,然后创建了一个CSR。您将该CSR(包含您的公钥)发送到证书颁发机构(CA)。 CA会验证您的身份并向您返回签名证书。此签名证书应包含CSR中的SAME公钥。您可以获取签名证书并将其导入密钥库。如果您已拥有该私钥的自签名证书,则导入的签名证书应替换它。
对于您的第二个问题,您需要切换语句。您需要使用父级的公钥验证签名证书。
X509Certificate parent = ...;
X509Certificate certToVerify = ...;
certToVerify.verify(parent.getPublicKey());