2017-04-25 807 views
0

與AppleWallet做生意時遇到問題。 他們提供給我三個證書, 1,字符串格式的葉證書; 2,字符串格式的子證書; 3,Apple Root CA - G3 Cert文件,以「.cer」結尾 問題是如何使用它們來使用RSA算法來驗證和編碼數據。什麼是葉證書和子證書用於以及如何使用它們?

ps:文檔清楚地表明公鑰由葉證書提供。這三個證書是連鎖的。 Leaf證書由Sub Certificate簽署,Sub Certificate由AppleRootCA-G3.cer簽署。 我需要做兩件事: 1,用三個證書進行驗證。 2,從葉證書中提取RSA的公鑰。 但我不知道如何做到這一點。

回答

0

你基本上需要做的是構建一個證書鏈,如果你沒有得到它作爲一個鏈。證書鏈基本上由第零個位置的最終實體證書(也是葉證書,鏈中最重要的證書)組成,其次是次要證書。 CA證書是最不重要的。

所以這是通常的X.509證書鏈的樣子:

3. CA Certificate (self-signed) 
    | 
    |__ 2. Sub CA Certificate (signed by the above CA) 
      | 
      |__ 1. Sub-sub CA Certificate (if any) (signed by the above Sub CA) 
        | 
        |__ 0. End Entity Certificate (your certificate, signed by the above cert) 

當你構建一個證書鏈,從自己的每個證書,你有,你有看到哪個證書是由誰來簽署然後以上述方式構建鏈(樹中的數字表示java證書數組中的索引)。

你可以通過查看SubjectDNIssuerDN找到哪個證書是由誰簽署的。 Subject專有名稱是最終實體,Issuer專有名稱是簽署證書的實體的名稱。

如果您需要驗證證書是否由另一個證書籤名的程序,你可以這樣做:

userCert.verify(caCert.getPublicKey());

CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); 
// Provided the certificate doesn't have certificate headers (---begin cert--- and ---end cert---) 
Certificate cert = certificateFactory.generateCertificate(new FileInputStream(new File("CERTIFICATE_PATH"))); 

System.out.println(cert.getPublicKey()); 

您可以使用此代碼段提取的證書的公鑰

相關問題