2017-02-21 19 views
0

Мой вопрос заключается в том, что делать я должен сделать отдельный запрос, чтобы проверить SSL Pinning перед каждым Get/Post запросSSL Закрепление в одном запросе

OkHttpClient client = new OkHttpClient.Builder().certificatePinner(
       new CertificatePinner.Builder() 
         .add(pinningUrl, "sha256/invalidPIN") 
         .build()).build(); 
Request request = new Request.Builder() 
       .url(pinningUrl) 
       .build(); 
Response response = client.newCall(request).execute(); 

Или может я проверить его с каждым Get/Post, как это

CertificatePinner certificatePinner = new CertificatePinner.Builder() 
         .add(pinningUrl, "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=")     .build(); 
       OkHttpClient client = new OkHttpClient().newBuilder().certificatePinner(certificatePinner).build(); 
Request request = new Request.Builder()   .url(getResources().getString(R.string.server_url_user_mgmt_services)) 
         .addHeader("Content-Type", "application).post(body) 
         .build(); 

       client.newCall(request) 
         .enqueue(new Callback() { 

          @Override 
          public void onFailure(Call call, IOException e) { 
           pd.dismiss(); 
           Toast.makeText(LoginActivity.this, "Some error occured!\nTry Again", Toast.LENGTH_SHORT).show(); 
          } 

          @Override 
          public void onResponse(Call call, Response response) throws IOException { 
           String str = response.body().toString(); 
          } 
         }); 

Если я проверяю его по каждому запросу, запрос выполняется, но он не проверяет наличие certificate, помогите мне в этом.

ответ

2

Основываясь на вашем первом примере кода, похоже, что вы пытаетесь установить URL-адрес вместо имени узла или подстановочного знака.

Вы должны настроить его один раз на своем OkHttpClient на хост, а затем просто сделать ваши обычные запросы. Штыри, которые вы определяете, должны иметь хост как ключ, а не URL.

https://square.github.io/okhttp/3.x/okhttp/okhttp3/CertificatePinner.html

String hostname = "publicobject.com"; 
CertificatePinner certificatePinner = new CertificatePinner.Builder() 
    .add(hostname, "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") 
    .build(); 
OkHttpClient client = OkHttpClient.Builder() 
    .certificatePinner(certificatePinner) 
    .build(); 

Request request = new Request.Builder() 
    .url("https://" + hostname) 
    .build(); 
client.newCall(request).execute();