2017-04-25 154 views
0

AppleWalletと取引するときに問題が発生します。 彼らは私に3つの証明書、 1、リーフ証明書をString形式で提供します; 2、Sub Certificate in String format; 3、Apple Root CA - G3 Certファイル、 ".cer"で終わる 問題は、RSAアルゴリズムを使用してデータの検証とエンコードを行う方法です。リーフ証明書とサブ証明書はどのようなもので、どのように使用するのですか?

ps:この文書では、リーフ証明書によってPublicKeyが提供されていることが明らかになっています。 3つの証明書が連鎖しています。リーフ証明書はサブ証明書で署名され、サブ証明書はAppleRootCA-G3.cerによって署名されます。 私は2つのことをする必要があります: 1、3つの証明書で確認してください。 2、リーフ証明書からRSAのPublicKeyを抽出する。 しかし、私はこれを行う方法はわかりません。

答えて

0

チェーンとして取得しなかった場合は、基本的に証明書チェーンを構築する必要があります。証明書チェーンは、基本的に、0番目のエンドエンティティ証明書(さらに、リーフ証明書、チェーン内の最も重要な証明書)とそれに続く重要でない証明書で構成されます。 CA証明書が最も重要ではありません。

証明書を構築している
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) 

は、各証明書から自分をチェーン、あなたが持っている、あなたが誰によって署名された証明書を参照する必要があります。

は、これは通常のX.509証明書チェーンがどのように見えるかです上記の方法でチェーンを構築します(ツリー内の数字はjavaの証明書配列内のインデックスを示します)。

あなたはのSubjectDNのissuerDNを見て、誰によって署名された証明書を見つけることができます。サブジェクトの識別名は終了エンティティであり、発行者識別名は証明書に署名したエンティティの名前です。

証明書がプログラム別の証明書によって署名されているかどうかを確認する必要がある場合は、あなたがこれを行うことができます:

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()); 

あなたは、このコードスニペットを使用して証明書から公開鍵を抽出することができます

関連する問題