2014-09-30 53 views
-1

公鑰一個證書,我有兩個x509Certificates如何驗證與另一

X509Certificate a; 
X509Certificate b; 

我想用一個公共密鑰,其中A是B的發行人,以驗證B的簽名。

我至今是:

public static boolean verify(String algorithm, byte[] content, byte[] signature, X509Certificate certificate) { 
    try { 
    Signature s = Signature.getInstance(algorithm, PROVIDER); 
    s.initVerify(certificate); 
    s.update(content); 
    return s.verify(signature); 
    } catch (NoSuchAlgorithmException | InvalidKeyException | SignatureException e) { 
    throw new IllegalArgumentException(e); 
    } 

}

,我調用方法:

verify(a.getSigAlgName(), a.getSignature(), b.getSignature(), b); 

但這總是返回假的???

請問,請幫助我理解上述方法vertify(..)返回總是false的原因。

編輯:

x509證書有一個方法驗證(公鑰)。

回答

1

想就解密B的內容與一個公共密鑰:

不,你不會的。證書未加密。

你真的想在這裏做的是驗證證書,通過其公鑰完成,從證書本身或從同一個公鑰的第二個來源獲得。

使用不同的公鑰驗證證書沒有意義。

在任何情況下X509Certificate已經包含足夠的方法verify()

+0

我的目標是檢查證書b是否由a簽署。我沒有找到解決方案,所以我認爲這是方法,但你是對的,謝謝。你知道嗎,我如何驗證b是否由一個簽名? – user2739823 2014-09-30 09:48:24

+1

我只能重複我上面所說的。 'Certificate.verify()'方法已經足夠。您提供應該簽名的實體的公鑰。您不需要所有其他代碼。 – EJP 2014-09-30 10:04:41

+0

非常感謝你,我發現x509Certificate有一個方法驗證(公鑰),我正在尋找的是 – user2739823 2014-09-30 10:21:17