私のアンドロイドデバイスでは、特定のWebサイトにアクセスできるように手動で証明書をインストールしました。Android - プログラマティックにキーストアから証明書を取得する(手動インストール)
セキュリティ - ユーザー証明書を見ると、私の証明書が見えます。
私のウェブサイトは、WebViewのに表示されたので、私は私のloadCertificateAndPrivateKey()関数では、次のコード
@Override
public void onReceivedClientCertRequest(WebView view, final ClientCertRequest request) {
if (mCertificates == null || mPrivateKey == null) {
loadCertificateAndPrivateKey();
}
request.proceed(mPrivateKey, mCertificates);
}
を使用する必要がありますされて、私はこの
KeyStore ks = KeyStore.getInstance("AndroidCAStore");
if (ks != null)
{
ks.load(null, null);
Enumeration<String> aliases = ks.aliases();
while (aliases.hasMoreElements())
{
String alias = (String) aliases.nextElement();
java.security.cert.X509Certificate cert = (java.security.cert.X509Certificate) ks.getCertificate(alias);
if(cert.getIssuerDN().getName().contains("TOTO")){
mCertificates = new X509Certificate[1];
mCertificates[0] = (X509Certificate)cert;
mPrivateKey = ??;
}
}
のような証明書を取得するためですが、私秘密鍵を取得する方法を知らない...
私はこの方法を試しましたが、キーオブジェクトはnullです(私のアプリケーションから直接証明書を読み込むと同じコードが動作します)
Key key = keyStore.getKey(alias, password.toCharArray());
if (key instanceof PrivateKey) {
mPrivateKey = (PrivateKey)key;
}
だから私はいくつかの質問を持っている:
- は、それが証明書を取得するための正しい方法は何ですか?
- 証明書のパスワードを使用して秘密鍵を取得できないのはなぜですか?
- このprivateKeyを取得するにはどうすればよいですか?
あなたの答えはTankです。
どのAndroid搭載版をターゲットにしていますか? – nandsito
私はAndroid 6でテストしていますが、Android 4.2.2(ただしAPI 17 = AndroidCAStoreにアクセスできない)で動作すると良いでしょう。しかし、優先順位はAndroid 6 – Ludo
です。証明書を使用してWebサイトにアクセスする場合は、証明書の秘密鍵は必要ありません。また、アンドロイドに秘密鍵をインストールしないでください。秘密鍵が欠落しているようで、それはOKです – nandsito