Android / Bouncycastleの署名付きX509証明書(CSR対応)から証明書チェーン情報の抽出
-
12-12-2019 - |
質問
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()
への呼び出しは、おそらく最終エンティティ証明書を使用しているものではない信頼できる証明書エントリを作成します。