J'essaie de passer un appel à se reposer API, mais je reçois l'exception suivante (Terminer StackTrace à la fin): J'ai demandé au fournisseur API de ce problème et dit qu'il y a quelque chose qui ne va pas avec la bibliothèque SSL que vous utilisez. P> Comment résoudreiez-vous ce problème? Avec ce même code (ci-dessous), j'ai effectué des appels au repos de l'API Nimble sans problèmes, mais dans ce cas, cela ne fonctionne pas.
Ensuite, je n'ai pas de fichier de fichiers (.cer). P> J'ai besoin de désactiver la vérification SSL car les méthodes de sécurité sont la clé de l'API que j'ai déjà. P> Toutes les suggestions? p> merci beaucoup! p> ==== Console: ==== P> class RelaxedX509TrustManager implements X509TrustManager {
public boolean isClientTrusted(java.security.cert.X509Certificate[] chain){ return true; }
public boolean isServerTrusted(java.security.cert.X509Certificate[] chain){ return true; }
public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; }
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String input) {}
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String input) {}
}
3 Réponses :
Essayez ceci
Veuillez ne pas utiliser ce code dans un environnement de production car il désactive tout contrôle du certificat. Par conséquent, votre implémentation est alors vulnérable à Attaques MITM .
Salut! Merci pour votre réponse, j'ai essayé avec ce code, importer javax.net.ssl.trustmanager et javax.net.ssl.x509TrustManager, et j'appelle cette méthode avant mon code, mais l'exception en disant toujours la même chose.
S'il vous plaît, n'utilisez pas ce code du tout. I> Il est impossible de déployer une solution non sécurisée, même pour le tester. Vous courez le risque de «fuir» dans la production, ce qui serait une infraction de sécurité majeure i>. De plus, le code ignore les exceptions et viole le contrat de TrustManager. Code> Évitez.
Vous manquez que vous manquez le point, il souhaite désactiver la vérification SSL et désactiver la vérification du code ci-dessus. S'il s'inquiète de la sécurité, il ne voudra pas désactiver la vérification SSL en premier lieu. Arrrgh.
@Aardvocer Akintayo Olusegun Vous êtes totalement à droite, cependant, l'OP voulait probablement désactiver la vérification SSL pour la même raison que je l'ai fait - cela n'a tout simplement pas fonctionné! Toutefois, le problème est résolu dans cette instance spécifique (et la mienne) en faisant simplement le travail d'Oracle pour eux - importatant le certificat racine de StartsSl.
Veuillez utiliser un certificat avec la chaîne de certification complète. Cela signifie au moins le certificat racine est nécessaire. P>
Vous avez uniquement importé le certificat de fin de votre contrepartie et que la mise en œuvre ne peut pas vérifier la chaîne de certificats. Au moins le certificat racine est nécessaire. P>
Ce n'est pas correct. Tout ce qui est nécessaire, c'est tout i> des certificats de signataire, importé comme "fiducié". Typiquement, le plus élevé est importé. Le pair devrait envoyer le reste de la chaîne avec son certificat.
@EJP J'ai écrit que au moins le certificat racine est nécessaire (dans le premier paragraphe). J'ai corrigé le deuxième paragraphe pour clarifier cela.
J'ai besoin de désactiver la vérification SSL car les méthodes de sécurité sont la clé API que j'ai déjà. p>
Ce n'est pas clair comment vous pensez que la clé de l'API (et l'aspect de la sécurité informatique) a quelque chose à voir avec la sécurité offerte par SSL / TLS: ils ne traitent certainement pas des mêmes aspects de sécurité. SSL / TLS consiste à protéger la transmission des données de l'écoute d'oreille et de modification. P>
Si vous vérifiez le serveur que vous essayez de contacter contre Ce service de test SSL , vous constaterez que le serveur nécessite un client qui prend en charge l'indication du nom du serveur (SNI): Cela permet au serveur d'héberger plusieurs hôtes avec différents certificats. p>
Si votre client ne prend pas en charge SNI (Java ne le prend en charge que du côté du client à partir de la version 7), les demandes seront présentées avec un certificat différent de celui indenté: il peut échouer soit sur la vérification du certificat. ou les procédures de vérification du nom d'hôte. La désactivation de l'un ou l'autre des chèques rend la connexion vulnérable aux attaques man-in-intermédiaires. P>
Je dirais que la cause probante du problème que vous rencontrez est que vous utilisez une version de Java qui ne prend pas en charge SNI (par exemple, Java 6). P> LI >
Il est également possible que le JRE que vous utilisez ne possède pas ce CA particulier dans son magasin de fiducie par défaut. Vous pouvez essayer d'obtenir une liste de certificats de CA, vous êtes prêt à faire confiance à une autre source (par exemple, par exemple Mozilla, comme souvent recommandé avec CURL). Vous devrez peut-être comprendre ce que sont les certificats de l'autorité de certification. P>
comme le Guide de référence JSSE dit : p>
Note importante: le JDK est expédié avec un nombre limité de racines de confiance Certificats dans le fichier / lib / sécurité / cacerts. Comme documenté dans KeyTool, il est de votre responsabilité de maintenir (c'est-à-dire que ajouter / supprimer) les certificats contenus dans ce fichier si vous utilisez ceci Fichier comme une troisième confiance. p>
Selon la configuration du certificat des serveurs, vous contactez, Vous devrez peut-être ajouter un ou plusieurs certificats de racine. Obtenir le nécessaire Certificat de racine spécifique du fournisseur approprié. P> blockQuote> li> ul>
de toute façon: désactiver la vérification SSL n'est pas la solution à votre problème. p>
EDIT: STRY> P>
Il ressemble au service Vous essayez d'utiliser un certificat émis par StartsSl, qui n'est pas l'un des CAS groupés par défaut avec l'oracle jre apparemment. P>
Vous aurez besoin de Téléchargez-le de StartsSl (ou d'exporter à partir d'un ensemble de confiance que vous avez déjà, cela s'appelle" startcom ... ") et importer dans votre
CACERTS CODE> Stockez avec KeyTool (ou un autre magasin Trust STORE si vous utilisez un autre): p>xxx pré> (Adapt le chemin et la Nom du fichier de certificat StartsSL selon les besoins, bien sûr.) p> blockquote>
Quelle version de Java utilisez-vous?
Bonjour, merci pour votre réponse, j'ai vu votre commentaire, j'ai utilisé Java6, maintenant j'ai installé et configuré Java7 mais l'erreur est toujours la même: / Je vais devoir essayer la deuxième option que vous parlez.
Je devais mettre en œuvre l'interface "X509TRUSTMANGER" ( docs.oracle.com/javase/6/docs/api/javax/net/ssl/... ) et mise à niveau vers Java7, ces deux choses ont été la solution, fonctionnent maintenant bien. Merci!
Votre détenteX509TrustManager ne vérifie rien (et ses méthodes isClientTrevettes et issantVous ne seront pas utilisées): c'est peu sécurisé. N'utilisez pas cette solution.
Je suis d'accord, avez-vous une suggestion?
Oui, j'ai édité ma réponse.
Merci @bruno, votre mise à jour de commentaire la résolvez!
Voir aussi Java SSL: Comment désactiver la vérification du nom d'hôte