簡體   English   中英

如何驗證 x509 證書的簽名?

[英]How to verify the signature of a x509 certificate?

我有兩個 X509Certificate 對象 x1 和 x2。

我想驗證 x2 是否由 x1 簽名。

我認為這是通過 x1 的公鑰和 x2 的簽名完成的。

如何准確地做到這一點?

我還想知道將 x2 的發行者與 x1 的主題逐字節進行比較是否是常見的做法,如果它們不同則顯示錯誤。

我找到了這個12456079帖子,但我無法弄清楚。

您正在尋找 PKI(公鑰基礎設施)中常見的證書鏈。 一個證書可以簽署另一個證書以表明該證書是可以信任的。

在簡單的示例中,將有一個自簽名且受信任的根證書 - 每個人都信任此證書。 接下來,您可以要求此證書的所有者使用 Root 的證書私鑰簽署您的證書。 因此,如果有人想使用您的證書,他可以檢查您的證書是否由 Root 證書簽名,如果他信任 Root 證書 - 他也可以信任您。

在 Java 中,您可以使用以下內容檢查證書是否由相應證書的私鑰簽名:

X509Certificate yourCert = ...
X509Certificate root = ...

try {
    yourCert.verify(root.getPublicKey()); } 
catch (CertificateException | NoSuchAlgorithmException | InvalidKeyException | NoSuchProviderException e) {
    //handle wrong algos
} catch (SignatureException ex) {
    //signature validation error
}

Certificate::verify用於此目的:

驗證此證書是否使用與指定公鑰對應的私鑰簽名。

由於X509Certificate extends Certificate您可以在X509Certificate實現上使用此方法(因為X509Certificate是一個abstract類)。

您還可以查看采用PublicKeyProvider實現的X509Certificate::verify(PublicKey, Provider)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM