質問

私はアンドロイドのアプリケーションを作成します。 どのように私は、パッケージからのディレクトリファイルから証明書を初期化していないときに私は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キーストアの作品に基づいた場合、すでにケースのようです)、サーバーによって開始されますます。

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