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