web-dev-qa-db-fra.com

Le certificat est approuvé par le PC mais pas par Android

Depuis ce matin, mon certificat n'est plus approuvé 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 pas de problème et le certificat est approuvé, mais si j'essaie dans le navigateur Chrome sous Android, il me dit que le certificat n'est pas approuvé. Que puis-je faire?

80
Alexis

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

GoDaddy a 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

Une fois, j’ai eu ce problème de certification intermédiaire (avec Commodo également) et je devais combiner mon propre fichier de certification avec les autorités de certification intermédiaires pour fonctionner. Une fois cela fait aucune erreur ne s'est plus produite.

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

Et voici une liste des guides d'installation les plus courants de Commodo eux-mêmes: 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 devez 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 suivant: 

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

Un moyen facile de faire cela dans un terminal SSH est en tapant: 

cat domainfile intermediatefile rootfile > targetfile

Outil de test de certificat

Si vous rencontrez d'autres problèmes ou si vous ne savez pas si le certificat est correct, essayez un outil en ligne pour vérifier votre certificat SSL. Par exemple: networking4all.com/en/ssl+certificates/quickscan 

Prise en charge SNI pour Android 2.2 et inférieur

Veuillez noter que Android 2.2 (et probablement plus ancien) ne prend pas en charge SNI, qui permet à plusieurs certificats SSL pour différents noms d’hôte de fonctionner sans problème avec une seule adresse IP. Merci à @technyquist pour cette information. Veuillez examiner cette SO question à propos de SNI pour plus d'informations à ce sujet.

89
Luceos

Vous devez créer un paquet crt, alors tout ira bien. Vous recevrez trois fichiers crt. Utilisez-les tous! Si vous avez uniquement utilisé 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, tout sélectionner et copier à la fin de domain_name.crt. Puis ouvrez AddTrustExternalCARoot.crt, copiez à nouveau à la fin de domain_name.crt. Puis installez le domain_name.crt

fonctionne bien.

19
dallas

Ajouter ceci ici car cela pourrait aider quelqu'un. J'avais des problèmes avec Android montrant le popup et une erreur de certificat invalide.

Nous avons un certificat Comodo Extended Validation et nous avons reçu le fichier Zip contenant 4 fichiers:

  • AddTrustExternalCARoot.crt
  • COMODORSAAddTrustCA.crt
  • COMODORSAExtendedValidationSecureServerCA.crt
  • www_mydomain_com.crt

Je les ai tous concaténés sur une même ligne, comme ceci:

cat www_mydomain_com.crt COMODORSAExtendedValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >www.mydomain.com.ev-ssl-bundle.crt

Ensuite, j'ai utilisé ce fichier bundle comme ssl_certificate_key dans nginx. Ça y est, travaille maintenant. 

Inspiré par cet élément essentiel: https://Gist.github.com/ipedrazas/6d6c31144636d586dcc3

8
k00k

J'avais le même problème et mon problème était que l'appareil ne dispose pas de la date et de l'heure appropriées. Une fois que j'ai résolu le problème, le certificat est approuvé.

1
Boon

Avec Comodo PositiveSSL, nous avons reçu 4 fichiers.

  • AddTrustExternalCARoot.crt
  • COMODORSAAddTrustCA.crt 
  • COMODORSADomainValidationSecureServerCA.crt 
  • notre_domaine.crt

Lorsque nous suivions les instructions sur le site comodo, nous obtenions une erreur indiquant que notre certificat manquait d’un fichier de certificat intermédiaire. 

Fondamentalement, la syntaxe est

cat our_domain.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt  AddTrustExternalCARoot.crt > domain-ssl_bundle.crt
1
Mathew

J'ai récemment découvert ce problème avec Commodo cert que j’ai acheté sur ssls.com et j’ai eu 3 fichiers:

nom-domaine.ca-bundle nom-domaine.crt et nom-domaine.p7b

J'ai dû le configurer sur Nginx et voici la commande que j'ai exécutée:

cat domain-name.ca-bundle domain-name.crt > commodo-ssl-bundle.crt

J'ai ensuite utilisé commodo-ssl-bundle.crt dans le fichier de configuration Nginx et fonctionne à merveille.

1
somecallitblues

J'espère que je ne suis pas trop en retard, cette solution ici a fonctionné pour moi, j'utilise COMODO SSL, les solutions ci-dessus semblent invalides avec le temps, mon site Web lifetanstic.co.ke

Au lieu de contacter le support technique de Comodo et obtenir un fichier d'offre groupée d'AC, vous pouvez effectuer les opérations suivantes:

Lorsque vous recevez votre nouveau certificat SSL auprès de Comodo (par courrier électronique), un fichier Zip est attaché . Vous devez décompresser le fichier Zip et ouvrir les fichiers suivants dans un éditeur de texte tel que le bloc-notes:

AddTrustExternalCARoot.crt
COMODORSAAddTrustCA.crt
COMODORSADomainValidationSecureServerCA.crt

Copiez ensuite le texte de chaque fichier ".crt" et collez les textes les uns sur les autres dans le champ "Autorité de certification (facultatif)".

Après cela, ajoutez simplement le certificat SSL comme d'habitude dans le champ "Certificat" et cliquez sur le bouton "Autofil par certificat", puis sur "Installer".

0
Maina Wycliffe

Avec Godaddy, vous aurez très probablement un domain.key, Gd_bundle_something.crt et (chaîne alphanumérique aléatoire) 4923hg4k23jh4.crt

Vous devrez: cat Gd_bundle_something.crt >> 4923hg4k23jh4.crt

Et puis, sur nginx, vous utiliserez 

ssl                  on;
ssl_certificate      /etc/ssl/certs/4923hg4k23jh4.crt;
ssl_certificate_key  /etc/ssl/certs/domain.key;
0
dazito

J'ai eu la même erreur parce que je n'ai pas émis de certificat Let's Encrypt pour le www .my-domain.com, uniquement pour mon-domaine.com.

Également publié pour le www. et la configuration de vhost pour charger les certificats pour www .my-domain.com avant de rediriger vers https://my-domain.com ont fait l'affaire. 

0
Adrian Onu

Assurez-vous également que vous utilisez également votre crt intermédiaire (fichier .crt avec un bundle .. certains fournisseurs l'appellent également bundle ou ca certificate) . Puis dans votre ssl.conf,

SSLCertificateFile </path/for/actual/certificate>

SSLCACertificateFile </path/for/actual/intermediate_certificate>

puis redémarrez votre serveur Web: ex pour Apache utiliser:

Sudo service httpd restart
0
Vikalp Veer

J'ai eu le même problème. Une autre façon de générer le fichier .crt correct est la suivante:

Parfois, vous obtenez un fichier .PEM contenant une chaîne de certificats complète. Le fichier peut ressembler à ceci ....

-----BEGIN RSA PRIVATE KEY-----
blablablabase64private...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
blablablabase64CRT1...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
blablablabase64CRT2...
-----END CERTIFICATE-----
...

Si vous supprimez la section private key entière, vous aurez un fichier .crt chaîné valide.

0
David Valdivieso

J'ai rencontré le même problème sous Apache 2.2 lorsque j'essayais d'utiliser plusieurs directives SSLCertificateChainFile pour chaque cert intermédiaire; au lieu de cela, je devais concaténer les trois en un seul fichier. Venant de GoDaddy où ils avaient fait cela pour moi comme un "paquet", cette étape supplémentaire était nouvelle pour moi, mais une relecture de la documentation Apache l'a rendu apparent.

Il est à noter que cette directive est obsolète depuis Apache 2.4.8 puisque vous pouvez maintenant concaténer tous les intermédiaires avec le cert.

0
rymo