Мой вопрос:
Кто-нибудь успешно аутентифицировал SSL-соединение с клиентским сертификатом в Android 2.1 / 2.2 с несколькими цепочками сертификатов?
Подробности:
Я пытаюсь реализовать проверку подлинности сертификата клиента для платформы Android.В StackOverflow уже много дискуссий о том, как это сделать с помощью KeyStore, и я следую стандартному подходу, предоставляя их в SSLContext.
context.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers() ,null);
К моему клиентскому сертификату прикреплено 3 сертификата, образующих цепочку сертификатов.В Android 2.3+ SSL-рукопожатие успешно выполнено, и я мог бы продолжить с запросом.
Однако в Android 2.2 тот же подход выкинул бы «неверную ошибку сертификата»
error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate (external/openssl/ssl/s3_pkt.c:1139 0x26bd38:0x00000003)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeconnect(Native Method)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:316)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream.(OpenSSLSocketImpl.java:564)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getOutputStream(OpenSSLSocketImpl.java:479)
Это та же ошибка, если я ввожу команду OpenSSL с неполной цепочкой сертификатов в аргументе CAfile:
openssl s_client -showcerts -cert [certificateFile] -key [keyFile] -connect [ip:port] -CAfile [cert-chain]
, что заставляет меня поверить, что Android 2.1 / 2.2 не проверяет полную цепочку.Чтобы убедиться, что я проверю номер цепочки в KeyStore, используя метод getCertificateChain()
.
Я искал ошибку в Android, связанную с моим вопросом, но не нашел ее.Подобные вопросы были опубликованы в SO без ответа