Мой Android проекта (OkHttp 3.3.1) в настоящее время работает с моей веб-службы HTTPS (мой компьютер, IIS веб-сервер, ASP.NET Web API, самозаверяющими сертификат)OkHttp с Сертификат Закрепление
методы Helper:
private SSLSocketFactory getSSLSocketFactory()
throws CertificateException, KeyStoreException, IOException,
NoSuchAlgorithmException, KeyManagementException {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream caInput = getResources().openRawResource(R.raw.iis_cert);
Certificate ca = cf.generateCertificate(caInput);
caInput.close();
KeyStore keyStore = KeyStore.getInstance("BKS");
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
return sslContext.getSocketFactory();
}
private HostnameVerifier getHostnameVerifier() {
return new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
return hv.verify("BNK-PC.LOCALHOST.COM", session);
}
};
}
Код A:
OkHttpClient client = new OkHttpClient.Builder()
.sslSocketFactory(getSSLSocketFactory())
.hostnameVerifier(getHostnameVerifier())
.build();
После прочтения this CertificatePinner guide, мой Projec т также хорошо работает при добавлении .certificatePinner(certificatePinner)
, как показано ниже:
Код B:
OkHttpClient client = new OkHttpClient.Builder()
.sslSocketFactory(getSSLSocketFactory())
.certificatePinner(certificatePinner)
.hostnameVerifier(getHostnameVerifier())
.build();
Согласно this Wiki, сертификат пиннинга повышает безопасность.
Однако на самом деле я не совсем понял эту идею. Поэтому мой вопрос заключается в том, нужно ли мне или нужно использовать certificatePinner
или нет, когда мое приложение все еще работает с кодом A. Другими словами, делает Код B имеет лучшую безопасность, чем Код A?
Любые объяснения, спасибо заранее.
Есть много хороших статей, проверьте [здесь] (http://blog.lumberlabs.com/2012/04/why-app-developers-should-care-about.html). –
@MadhukarHebbar большое спасибо за вашу ссылку, я читаю, возможно, мне нужно много раз прочесть ее, чтобы понять, слишком много знаний о безопасности, чтобы знать, когда я плохо разбираюсь в английском :) – BNK