[英]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
類)。
您還可以查看采用PublicKey
和Provider
實現的X509Certificate::verify(PublicKey, Provider)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.