нужен пример кода для OkHttp3

аюсь закрепить самозаверяющий сертификат моего сервера. Мой OkHttpClient принимает два параметра, первый из них - ssl Socket Factory:

final TrustManager[] trustAllCerts = new TrustManager[] {
        new X509TrustManager() {
            @SuppressLint("TrustAllX509TrustManager")
            @Override
            public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {}

            @SuppressLint("TrustAllX509TrustManager")
            @Override
            public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {}

            @Override
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                  return new X509Certificate[0];
            }
         }
     };

// Install the all-trusting trust manager
SSLContext sslContext;
try {
     sslContext = SSLContext.getInstance("SSL");
     sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
 } catch (NoSuchAlgorithmException | KeyManagementException e) {
     e.printStackTrace();
     FirebaseCrash.report(e);
     return null;
}

// Create an ssl socket factory with our all-trusting manager
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

Во-вторых, это пиннер сертификатов:

new CertificatePinner.Builder()
    .add("bogus.com", "sha1/BOGUS")
    .build()

Примечание: если я не добавляю сертификат, то все работает нормально. Проблема в том, что когда запрос выполняется,CertificatePinner.check () вызывается:

if (pins.isEmpty()) return;

Очевидно, что если я установлю (непустой) certificatePinner, метод на этом не остановится и продолжит работу. Затем он продолжает проверять, что«по крайней мере один из сертификатов, прикрепленных к моему имени хоста, является доверенным сертификатом».

Проблема в том, что я передал пустой массив в getAcceptedIssuers для моего TrustManager - это означает, что самоподписанный сертификат вызовет исключение, так как ему явно не доверяют "getAcceptedIssues". Похоже, невозможно прикрепить сертификат, которому явно не доверяют, в «getAcceptedIssuers».

Есть ли способ обойти это? Это по дизайну?

Вот как я создаю свой OkHttpClient:

OkHttpClient client = new OkHttpClient.Builder()
    .sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0])
    .certificatePinner(certPinner)
    .readTimeout(10, TimeUnit.SECONDS)
    .connectTimeout(10, TimeUnit.SECONDS)
    .build();

Ответы на вопрос(2)

Ваш ответ на вопрос