2012-03-02 2 views
0

Мой вопрос:Ошибка Android 2.2 SSL с сертификатом клиента?

Кто-нибудь успешно прошел проверку подлинности соединения SSL с сертификатом клиента в Android 2.1/2.2 с несколькими CERT цепи?

Детали:

Я пытаюсь выполнить проверку подлинности сертификата клиента для 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-not-working-on-android-2-2-only-in-2-3
  • android-2-2-ssl-library-error. Последний комментарий Николая Еленкова в единственном ответе, похоже, указывает на тот же вывод, который у меня есть, но я не могу найти документацию, подтверждающую его.

ответ

1

Это, кажется, ошибка с Android 2.1/2.2.

Я попросил нашего администратора создать еще один сертификат клиента, который выдается непосредственно корневым ЦС. Получив этот сертификат, я поместил его как ресурс в код, и он работает без каких-либо изменений, кроме того, что KeyStore указывает на новый сертификат.

+1

В моем случае у меня есть самозаверяющий сертификат ... Так что я потерялся? – CelinHC

Смежные вопросы