HTTPSの証明書を使用して
-
25-09-2019 - |
質問
私はアンドロイドのアプリケーションを作成します。
どのように私は、パッケージからのディレクトリファイルから証明書を初期化していないときに私はhttps
接続で証明書を使用することができますか?
私はパスワードを使用して、パッケージファイルを持っている場合は、このコードは動作します:
KeyStore keyStore = KeyStore.getInstance("PKCS12"); keyStore.load(certificateIs, pass.toCharArray()); KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(keyStore, pass.toCharArray()); SSLContext sc = SSLContext.getInstance("TLS"); sc.init(kmf.getKeyManagers(), trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
しかし、私は、証明書DERファイルから初期化されています:
CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate certificate = (X509Certificate) cf.generateCertificate(certBytes);
私はこの証明書は、https
接続を介して使用方法がわからない。
解決
あなたは(あなたのAndroidデバイスがクライアントである)、クライアント証明書認証について話しているようだ。
まず、あなたが(そうでない場合、それは何も認証されないだろう、全体のポイントだということ)使用しようとしている証明書の公開鍵に一致する秘密鍵を持っているクライアントが必要です。 PKCS#12は、秘密鍵と証明書を収容するための通常の形式の1つです。あなたが唯一ののデルのファイルに証明書を持っている場合は、おそらくそれ故に、それは動作しません、その中に秘密鍵を持っていません。
それは(カスタムcertificate
を持っている場合、それはそれ以外の場合は動作しません、そのKeyManagerFactory
方法で秘密鍵を返す必要があります)X509KeyManager
に関して、あなたはgetPrivateKey
変数で何をすべきか、あなたの質問からかなり明確ではありません。
第二に、クライアント証明書認証は常に(あなたのテストは、PKCS#12キーストアの作品に基づいた場合、すでにケースのようです)、サーバーによって開始されますます。
所属していません StackOverflow