Прежде всего, я новичок в этой операции шифрования, и я не знаю, правильно ли задавать мой вопрос или нет! приветствуется любое решение ...
В моем проекте я использую этот код для создания SSLSocketFactory для сервисов:
public static SSLSocketFactory getGlobalSSlFactory() {
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC");
InputStream caInput = context.getResources().openRawResource(xxxxxxx);
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);
KeyManagerFactory kmf = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, "xxxxxxx".toCharArray());
final SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
return sslContext.getSocketFactory();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
Ошибка, которую я получаю при тестировании на устройстве с Android (Pie):
![error](https://i.stack.imgur.com/ataet.png)
Google говорит: https://android -developers.googleblog.com / 2018/03 / cryptography-changes-in-android-p.html
Важная часть:
«Чтобы решить эту проблему, вы должны прекратить указывать поставщика и использовать реализацию по умолчанию.»
Как мне изменить мой код?
** больше объяснений **
Я сделал то, что сказал @sonhvp, но после тестирования появилась эта ошибка:
![error in log](https://i.stack.imgur.com/iRMVf.png)
И ошибка приходит к этой строке:
Certificate ca = cf.generateCertificate(caInput);
Это моя версия для Android:
![my android version](https://i.stack.imgur.com/sgkNM.png)