Android 2.2 SSL Ошибка с клиентским сертификатом?
Мой вопрос:
Кто-нибудь успешно аутентифицировал 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 без ответа
SSL-не-рабочего на андроид-2-2-только-в-2-3Android-2-2-SSL-библиотека ошибок, Последний комментарий Николая Еленкова в единственном ответе, похоже, указывает на тот же вывод, что и я, но я не могу найти никаких документов, подтверждающих это.