2

サーバーがJKSファイルの形式で証明書を使用することに成功しました。HTTPS は、Web ブラウザーや他の Web クライアントで使用すると、期待どおりに機能します。

Android の場合、私のチームは以下を使用して、OkHttp に証明書を受け入れるよう説得します。

static KeyStore readKeyStore() throws KeyStoreException, CertificateException, NoSuchAlgorithmException
    {
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());

        // get user password and file input stream
        char[] password = "password".toCharArray();

        java.io.InputStream fis = null;
        try {
            fis = ServiceProducer.class.getClassLoader().getResourceAsStream("res/raw/keystore.jks");
            ks.load(fis, password);
        } catch (IOException e)
        {

        } finally
        {
            if (fis != null)
            {
                try
                {
                    fis.close();
                } catch (IOException e)
                {
                }
            }

        }
        return ks;
    }

キーを使用するコード:

OkHttpClient.Builder builder = new  OkHttpClient.Builder();
                KeyStore keyStore = readKeyStore();
                SSLContext sslContext = SSLContext.getInstance("SSL");
                TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
                trustManagerFactory.init(keyStore);
                KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
                keyManagerFactory.init(keyStore, "password".toCharArray());
                sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());
                builder.sslSocketFactory(sslContext.getSocketFactory());
                OkHttpClient client = builder.build();

                Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("https://192.168.5.91:9443")
                        .addConverterFactory(JacksonConverterFactory.create())
                        .client(client)
                        .build();

ただし、サービスにアクセスすると、次の例外がスローされます。

java.security.cert.CertPathValidationException: Trust anchor for certification path not found.

証明書のインストールを正しく行いましたか? それとも、別の種類の問題に直面していますか?

4

0 に答える 0