В AndroidQ я не могу проверить самоподписанный листовой сертификат, используя корневой сертификат, установленный на «доверенные учетные данные» / «учетные данные пользователя» на устройстве.
Были ли какие-либо изменения в проверке сертификатов в AndroidQ?
byte[] certData = ...;
X509Certificate cert = (X509Certificate)CertificateFactory
.getInstance("X.509")
.generateCertificate(new ByteArrayInputStream(certData));
TrustManagerFactory tmf = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm()
);
tmf.init((KeyStore)null);
TrustManager[] tms = tmf.getTrustManagers();
X509TrustManager tm = (X509TrustManager)tms[0];
trustManager.checkClientTrusted(
new X509Certificate[] { cert },
cert.getPublicKey().getAlgorithm()
);
Это работает правильно на любых версиях Android, но в AndroidQ checkClientTrusted () выдает:
java.security.cert.CertificateException: недопустимый сертификат: CN = Leaf, O = None,L = TimeNSpace, ST = хаос, C = US