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?
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:
Un moyen facile de faire cela dans un terminal SSH est en tapant:
cat domainfile intermediatefile rootfile > targetfile
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
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.
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.
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:
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
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é.
Avec Comodo PositiveSSL, nous avons reçu 4 fichiers.
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
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.
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".
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;
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.
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
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.
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.