Вещь, которую я пытаюсь сделать, довольно проста - я хочу получить полную цепочку сертификатов при подключении к серверу из приложений iOS и Android.Не удается получить корневой сертификат CA из цепочки в Android
В прошивке, я использую NSURLSession
и первостепенную URLSession:didReceiveChallenge:
метода, в котором я нахожусь в состоянии получить цепочку сертификатов, которая в данном случае выглядит как ожидался:
[leaf certificate] - [intermediate certificate] - [root certificate]
симпатично.
Теперь я пытаюсь сделать то же самое на устройстве Android с использованием HttpsURLConnection
. После подключения к серверу я получаю цепочку сертификатов (или, по крайней мере, я надеюсь, что это метод для нее) с использованием метода getServerCertificates()
. Это возвращает меня Certificate[]
объект, в котором я получаю цепь, которая выглядит следующим образом:
[leaf certificate] - [intermediate certificate]
Таким образом, нет корневого сертификата на Android устройства.
Вы знаете, как получить корневой сертификат из цепочки в Android?
Заранее спасибо.
Спасибо за ответ. Есть ли у вас какое-либо объяснение, почему я получаю корневой сертификат в случае IOS, но на Android нет? Я посылаю запрос на идентичную конечную точку в оба – uerceg
Предполагая, что сервер не предоставляет корневой ЦС в цепочке (вы можете проверить его на ssllabs.com), iOS строит полную цепочку сертификации, используя соответствующий сертификат хранилища доверия, в то время как Android проверяет то же самое, но не добавляя корневой сертификат. На мой взгляд, Android (и Java) должен предоставить эту информацию. – pedrofb
Да, спасибо за информацию, имеет смысл. Я пытался переопределить 'X509TrustManager', но все равно не повезло. Возможно, вы знаете, есть ли путь в Андр oid, чтобы получить корневой сертификат от устройства, который использовался для проверки промежуточного из цепочки?(в значительной степени для получения этого корня, который iOS возвращается в его API, но, вероятно, его читает из самого устройства) – uerceg