Le certificate est approuvé par PC mais pas par Android

Depuis ce matin, mon certificate ne fait plus confiance à Android et mon application ne peut plus se connecter:

Catch exception while startHandshake: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certificateion path not found. return an invalid session with invalid cipher suite of SSL_NULL_WITH_NULL_NULL javax.net.ssl.SSLPeerUnverifiedException: No peer certificatee at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:137) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93) at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:591) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:807) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:781) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:770) 

Si j’essaie dans Google Chrome (sur PC), il n’y a pas de problème et le certificate est fiable, mais si j’essaie dans le navigateur Chrome sur Android, il me dit que le certificate n’est pas fiable. Que puis-je faire?

Il se peut que vous manquiez un certificate intermédiaire dans votre fichier cert. Si vous avez déjà visité un autre site Web qui possède le même vendeur de certificates, le certificate intermédiaire est conservé dans votre navigateur. Ce ne sera peut-être pas – ou même mieux – que ce ne sera pas le cas pour chaque visiteur de votre site Web. Pour résoudre un certificate intermédiaire manquant dans la connexion SSL, vous devez append le certificate intermédiaire à votre propre fichier de certificate.

GoDaddy a quelques informations sur les certificates intermédiaires (mais la meilleure source est toujours votre fournisseur de certificate): http://support.godaddy.com/help/article/868/what-is-an-intermediate-certificatee

J’ai déjà eu ce numéro de cert intermédiaire (avec Commodo aussi) et j’ai dû combiner mon propre fichier cert avec les CA intermédiaires pour travailler. Une fois fait, aucune erreur ne s’est produite.

Instructions d’installation par serveur web par Godaddy: http://support.godaddy.com/help/article/5346/installing-an-ssl-server-instructions?locale=en

Et voici la liste des guides d’installation les plus courants de Commodo: https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/1145/0/how-do-i-make- mon-propre-fichier-fichier-de-fichiers-crt

Selon le serveur Web que vous utilisez, vous devrez spécifier tous les certificates (certificate de domaine, intermédiaire et racine) ou les combiner en un seul (par exemple pour Nginx) dans l’ordre:

  1. certificate de domaine
  2. certificate intermédiaire
  3. certificate racine

Un moyen simple de le faire dans un terminal SSH consiste à taper:

 cat domainfile intermediatefile rootfile > targetfile 

Outil de test de certificate

Si vous rencontrez d’autres problèmes ou si vous ne savez pas si le certificate est correct, veuillez essayer un outil en ligne pour vérifier votre certificate SSL. Par exemple: https://www.networking4all.com/en/support/tools/site+check/

Support SNI pour Android 2.2 et inférieur

Veuillez noter que Android 2.2 (et probablement plus ancien) ne supporte pas SNI, qui permet à plusieurs certificates SSL pour différents noms d’hôte de fonctionner sans problèmes sur une seule adresse IP. Merci à @technyquist pour avoir fourni ces informations. S’il vous plaît examiner cette question SO sur SNI pour plus d’informations sur ce problème.