Я разрабатываю проект Android. У меня есть строка сертификата PEM:установить сертификат X509 программно в моем случае
-----BEGIN CERTIFICATE-----
MIIEczCCA1ugAwIBAgIBADANBgkqhkiG9w0BAQQFAD..AkGA1UEBhMCR0Ix
EzARBgNVBAgTClNvbWUtU3RhdGUxFDASBgNVBAoTC0..0EgTHRkMTcwNQYD
VQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5IENlcn..XRpb24gQXV0aG9y
...MANY LINES...
It8una2gY4l2O//on88r5IWJlm1L0oA8e4fR2yrBHX..adsGeFKkyNrwGi/
7vQMfXdGsRrXNGRGnX+vWDZ3/zWI0joDtCkNnqEpVn..HoX
-----END CERTIFICATE-----
(я назначил выше строки сертификата переменной с именем CERT_STR
)
конвертировать выше PEM строки в X509Certificate по:
byte[] certBytes = CERT_STR.getBytes();
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
InputStream certIs = new ByteArrayInputStream(certBytes);
// now I get the X509 certificate from the PEM string
X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(certIs);
Тогда, я стараюсь для установки сертификата программным путем:
Intent intent = KeyChain.createInstallIntent();
// because my PEM only contains a certificate, no private key, so I use EXTRA_CERTIFICATE
intent.putExtra(KeyChain.EXTRA_CERTIFICATE, certificate.getEncoded());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Когда Я запускаю свое приложение, я вижу, что появляется системный диалог, говорящий «Извлечение ...», я знаю, что система извлекает мой сертификат, но этот диалог показывает все время, говоря «Извлечение ...».
Почему? Где я ошибаюсь в своем коде для установки сертификата?
Для кода, который у вас есть, требуется двоичный сертификат, а не кодированный base64. – Robert
@Robert, я не совсем понимаю ваши слова, какая часть моего кода использует кодировку base64? –
Часть между BEGIN и END CERTIFICATE является закодированным кодом base64. У сертификата x.509 CertificateFactory требуется AFAIR бинарный сертификат. – Robert