82 votes

Le certificat est reconnu par le PC mais pas par Android.

Depuis ce matin, mon certificat n'est plus reconnu sur Android et mon application ne peut plus se connecter :

 Catch exception while startHandshake: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
 return an invalid session with invalid cipher suite of SSL_NULL_WITH_NULL_NULL
 javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
    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 aucun problème et le certificat est fiable, mais si j'essaie dans le navigateur Chrome sur Android, il me dit que le certificat n'est pas fiable. Que dois-je faire ?

0 votes

Vous communiquez avec un serveur sécurisé, c'est-à-dire (Https) ?

0 votes

Oui, en effet, essayez le lien, vous verrez le certificat.

96voto

Luceos Points 2189

Il se peut qu'il manque un certificat intermédiaire dans votre fichier de certificats. Si vous avez déjà visité un autre site web qui a le même vendeur de certificat, le certificat intermédiaire est mémorisé dans votre navigateur. Ce n'est peut-être pas le cas - ou mieux encore - ce ne sera pas le cas pour chaque visiteur de votre site web. Pour résoudre un certificat intermédiaire manquant dans la connexion SSL, vous devrez ajouter le certificat intermédiaire à votre propre fichier de certificat.

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

J'ai déjà eu ce problème de certificat intermédiaire (avec Commodo également) et j'ai dû combiner mon propre fichier de certificat avec celui de l'autorité de certification intermédiaire pour que cela fonctionne. Une fois cela 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 une liste des guides d'installation les plus courants établie par Commodo lui-même : https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/1145/0/how-do-i-make-my-own-bundle-file-from-crt-files

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

  1. certificat de domaine
  2. certificat intermédiaire
  3. Certificat racine

Une façon simple de faire cela dans un terminal SSH est de taper :

cat domainfile intermediatefile rootfile > targetfile

Outil de test des certificats

Si vous rencontrez d'autres problèmes ou si vous n'êtes pas sûr que le certificat est correct, veuillez essayer un outil en ligne pour vérifier votre certificat SSL. Par exemple : networking4all.com/en/ssl+certificates/quickscan

Support SNI pour Android 2.2 et inférieur

Veuillez noter qu'Android 2.2 (et probablement plus ancien) ne prend pas en charge SNI, qui permet à plusieurs certificats SSL pour différents noms d'hôtes de fonctionner sans problème sur une seule adresse IP. Merci à @technyquist d'avoir fourni cette information. Veuillez vérifier cette question SO sur SNI pour plus d'informations sur cette question.

0 votes

+1, cela a fonctionné pour mon problème avec les appareils 2.3.X puisqu'ils semblent avoir un problème avec l'ordre de la vérification enchaînée (je suis assez noob quand il s'agit de certs) et en ayant ce nouveau bundle avec le bon ordre (via la combinaison comme @Luceos a suggéré) a fonctionné comme un charme. Merci

0 votes

De rien, nous l'utilisons aussi régulièrement. Surtout parce qu'il valide plus qu'un simple certificat intermédiaire. Heureux d'avoir pu vous aider.

0 votes

Le lien pour comodo est mort

19voto

dallas Points 121

Vous devez créer un paquet de crt, puis tout ira bien. Vous allez recevoir trois fichiers crt. Utilisez-les tous ! Si vous n'avez utilisé que le domain.crt, il y aura un avertissement sur Android mais pas sur PC.

Je suis sur nginx. J'ai ouvert domain_name.crt, puis positivesslca2.crt, sélectionné tout et copié à la fin de domain_name.crt. Ensuite, ouvrez AddTrustExternalCARoot.crt, copiez-le à la fin de domain_name.crt à nouveau. Puis installez le domain_name.crt

fonctionne bien.

0 votes

Cela ressemble à la solution que je recherche, mais cela ne fonctionne toujours pas pour moi. Je suis également sur nginx avec un certificat godaddy. godaddy a 3 certs : domain.crt, intermediate.crt, et bundle.crt. Savez-vous quel est l'ordre correct selon votre réponse ? c'est-à-dire domaine > intermédiaire > bundle ou domaine > bundle > intermédiaire ? pour une raison quelconque, aucun des deux ne fonctionne pour moi.

0 votes

Apparemment, bundle.crt est le [intermediate.crt + Root.crt] concaténé, ce qui semble être l'ordre correct. Mais je n'arrive toujours pas à le faire fonctionner. Avez-vous des idées ? Merci.

0 votes

Vous n'avez pas besoin de la racine, elle est déjà incluse dans l'OS. Vous avez juste besoin de la chaîne intermédiaire. L'ordre devrait être le vôtre + intermédiaire.

1voto

user1515962 Points 113

Confronté au même problème. J'ai découvert que sur mon serveur de test, il manquait l'autorité de certification intermédiaire. J'ai essayé d'importer le certificat d'un autre serveur de test où l'ICA existe, et cela a réussi. Au cas où

0voto

rymo Points 924

J'ai rencontré ce même problème sous Apache 2.2 lorsque j'essayais d'utiliser plusieurs SSLCertificateChainFile pour chaque certificat intermédiaire ; à la place, je devais concaténer les trois dans un seul fichier. Venant de GoDaddy où ils avaient fait cela pour moi comme un "bundle", cette étape supplémentaire était nouvelle pour moi, mais une relecture de la documentation Apache l'a fait apparaître.

Il convient de noter que cette directive est déprécié à partir de Apache 2.4.8 puisque vous pouvez maintenant concaténer tous les intermédiaires avec le certificat réel.

-1voto

thepoosh Points 5941

Il se peut que vous n'ayez pas le certificat sur votre appareil.

essayez de regarder cette réponse : Comment installer un certificat CA de confiance sur un appareil Android ? pour voir comment installer l'AC sur votre propre appareil.

0 votes

Mon certificat est émis par PositiveSSL CA / Comodo CA Limited et dans mes informations d'identification de confiance sur mon téléphone, je peux voir 3 Comodo CA Limited (AAA Certification Authority, COMODO Certification Authority et COMODO ECC Certification Authority).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X