Разбор сертификата X509 от Exchange - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь получить сертификат контакта Microsoft Exchange. Он был установлен в Outlook путем его импорта на вкладке сертификата.

Он доступен с помощью PidTagUserX509Certificate на EWS, см. https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxoabk/e4de26c4-9bcb-4da2-99c6-5f67aebc221a, но я должен признать, что не понимаю, как с этим обращаться объект, как описано в документации.

Я пытаюсь base64-декодировать извлеченные данные, а затем использую X509 CertificateFactory для чтения сертификата.

byte[] bytes = Base64.decode(certificateValue, Base64.DEFAULT);
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
ByteArrayInputStream is = new ByteArrayInputStream(bytes);
X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(is);

Это приводит к исключительному анализу: ошибка: 0c0000be: процедуры кодирования ASN.1: OPENSSL_internal: WRONG_TAG

Мой код работает на Android, но проблема должна быть универсальной.

Данные base64 можно найти здесь: https://pastebin.com/dCnMtjn4

Есть идеи, как мне получить сертификат?

1 Ответ

1 голос
/ 06 марта 2020

Кажется, что данные обернуты. Первые 12 байтов являются своего рода конвертом (idk, что это такое), а остальные байты выглядят как сертификат X.509. После первой строки пропустите первые 12 байтов и передайте оставшуюся часть байтового массива в ByteArrayInputStream. Я не знаком с Java, но должен быть какой-то метод .Skip для массивов? Быстрый Google предлагает, вы можете сделать это следующим образом:

byte[] bytes = Base64.decode(certificateValue, Base64.DEFAULT);
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
ByteArrayInputStream is = new ByteArrayInputStream(bytes);
is.skip(12);
X509Certificate certificate = (X509Certificate)certificateFactory.generateCertificate(is);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...