質問

AndroidまたはBouncycastle Libsを使用してCA署名X509クライアント証明書から証明書チェーン情報を抽出することができますか?

私は信頼できるサーバーからCA署名付きX509証明書を受信するAndroidクライアントを持っています。署名されたクライアント証明書と私の秘密鍵をPKCS12(.p12)ファイルに保存したいです。私は現在KeyStoreオブジェクトを作成し、証明書と秘密鍵を追加することによってこれを行っています。 PrivateKeyメソッドを使用してクライアントKeyStore.setKeyEntry()を追加すると、Certificate[] chainは最後の引数です。これは現在クライアント証明書のみを含む。 Certificate[] chainにCA証明書を持っていないので、これは私の証明書が検証可能であることを防ぎますか?であれば、署名されたX509Certificateから抽出された情報を証明書チェーンに移入することは可能ですか?

ほとんどの例は、PEMファイル、BKS Trust StoreからCAチェーンをロードするように見えます。またはすでに証明書のリストにアクセスできるようになりました。

これは私が持っているものです:

    X509Certificate cert;      // signed client cert
    PrivateKey pkey;           // client private key
    String password; 

    KeyStore store;
    store = KeyStore.getInstance("PKCS12", "BC");
    store.load(null, null);

    // adding the signed cert
    store.setCertificateEntry("Client certificate", cert);

    // creating the cert chain
    X509Certificate[] chain = new X509Certificate[1];
    chain[0] = cert;
    // add rest of the certs in the chain here

    // adding the private key   
    store.setKeyEntry("Client private key", pkey, password.toCharArray(), chain);

    FileOutputStream fos;
    fos = openFileOutput("clientCredentials.p12", Context.MODE_PRIVATE);
    store.store(fos, password.toCharArray());
    fos.flush();
    fos.close();
.

事前にありがとう!

役に立ちましたか?

解決

CA証明書は署名付き証明書に含まれていません。あなたはそれらをどこかから入手しなければなりません(インストール前、信頼できるサーバーからダウンロードするなど)。フルチェーンをインストールしないのは、検証者がすでに必要なCA証明書にアクセスできる場合は、常に最終エンティティ証明書を検証できます。キーと証明書を使用する方法は?

btw、setCertificateEntry()への呼び出しは、おそらく最終エンティティ証明書を使用しているものではない信頼できる証明書エントリを作成します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top