Я использую SSL Certificate Pining
в своем приложении для Android, теперь, когда я обновил SSL-сертификат, я подумал, что в моем Android-приложении я только делаю Certificate Pining
, а не Public Key Pining
, мне нужно будет изменить Сертификат в моем Androidпроект и снова обновить мое приложение в магазине Play, но дело в том, что мое приложение работает совершенно нормально без необходимости обновлять файл сертификата в моем проекте Android.
Может кто-нибудь сказать мне, это нормальное поведение??
Код
public Certificate findCertificate() throws CertificateException {
CertificateFactory instance = CertificateFactory.getInstance("X.509");
InputStream resourceAsStream = getResources().openRawResource(R.folder.certificate_name);
InputStream bufferedInputStream = new BufferedInputStream(resourceAsStream);
try {
Certificate generateCertificate = instance.generateCertificate(bufferedInputStream);
try {
resourceAsStream.close();
} catch (IOException e) {
}
return generateCertificate;
} finally {
try {
bufferedInputStream.close();
} catch (IOException e2) {
}
try {
resourceAsStream.close();
} catch (IOException e3) {
}
}
}
public SSLContext findSSLConfiguration(Context context) throws CertificateException, IOException,
KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
CertificateFactory cf = null;
cf = CertificateFactory.getInstance("X.509");
Certificate ca = findCertificate();
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
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;
}
public void server_call() throws CertificateException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException, IOException {
OkHttpClient okHttp = new OkHttpClient.Builder()
.sslSocketFactory(findSSLConfiguration(getBaseContext()).getSocketFactory())
.build();
}