Je pensais vraiment avoir réglé ce problème, mais il n'était déguisé qu'avant.
J'ai un service WCF hébergé dans IIS 7 en utilisant HTTPS. Lorsque je navigue sur ce site dans Internet Explorer, cela fonctionne comme un charme, c'est parce que je l' ai ajouté le certificat au magasin d'autorité de certification racine local.
Je développe sur 1 machine, donc le client et le serveur sont la même machine. Le certificat est auto-signé directement à partir du composant logiciel enfichable de gestion IIS 7.
Je reçois continuellement cette erreur maintenant ...
Impossible d'établir une relation d'approbation pour le canal sécurisé SSL / TLS avec autorité.
... lorsqu'il est appelé depuis la console client.
Je me suis donné manuellement des autorisations et un service réseau sur le certificat, en utilisant findprivatekey
et en utilisant cacls.exe
.
J'ai essayé de me connecter au service en utilisant SOAPUI, et cela fonctionne, donc cela doit être un problème dans mon application cliente, qui est un code basé sur ce qui fonctionnait avec http.
Où puis-je regarder ailleurs? Il semble que j'ai épuisé toutes les possibilités pour lesquelles je ne peux pas me connecter?
la source
Réponses:
Pour contourner le problème, vous pouvez ajouter un gestionnaire aux
ServicePointManager
'sServerCertificateValidationCallback
côté client:mais sachez que ce n'est pas une bonne pratique car elle ignore complètement le certificat du serveur et indique au gestionnaire du point de service que tout certificat convient, ce qui peut sérieusement compromettre la sécurité du client. Vous pouvez affiner cela et effectuer une vérification personnalisée (pour le nom du certificat, le hachage, etc.). au moins, vous pouvez contourner les problèmes lors du développement lors de l'utilisation de certificats de test.
la source
Quand j'ai ce problème, c'est parce que client.config avait ses points de terminaison comme:
mais le certificat attendait
Changer les points de terminaison pour qu'ils correspondent au FQDN du serveur résout mon problème. Je sais que ce n'est pas la seule cause de ce problème.
la source
les deux premiers utilisent lambda, le troisième utilise du code normal ... j'espère que vous le trouverez utile
la source
Votre problème survient parce que vous utilisez une clé auto-signée. Le client ne fait pas confiance à cette clé et la clé elle-même ne fournit pas de chaîne à valider ni de liste de révocation de certificats.
Vous avez quelques options - vous pouvez
désactiver la validation du certificat sur le client (mauvais coup, les attaques de l'homme au milieu abondent)
utilisez makecert pour créer une autorité de certification racine et créer des certificats à partir de cela (ok, mais il n'y a toujours pas de CRL)
créer une autorité de certification racine interne à l'aide de Windows Certificate Server ou d'une autre solution PKI, puis faire confiance à ce certificat racine (un peu difficile à gérer)
acheter un certificat SSL auprès de l'une des autorités de certification de confiance (coûteux)
la source
Une solution en une seule ligne. Ajoutez ceci n'importe où avant d'appeler le serveur côté client:
Cela ne doit être utilisé qu'à des fins de test car le client ignorera les contrôles de sécurité SSL / TLS.
la source
J'ai rencontré le même problème et j'ai pu le résoudre avec deux solutions: tout d'abord, j'ai utilisé le composant logiciel enfichable MMC "Certificats" pour le "Compte d'ordinateur" et j'ai fait glisser le certificat auto-signé dans le dossier "Autorités de certification racine de confiance" . Cela signifie que l'ordinateur local (celui qui a généré le certificat) fera désormais confiance à ce certificat. Deuxièmement, j'ai remarqué que le certificat avait été généré pour un nom d'ordinateur interne, mais que le service Web était accessible sous un autre nom. Cela a provoqué une incompatibilité lors de la validation du certificat. Nous avons généré le certificat pour computer.operations.local, mais avons accédé au service Web en utilisant https://computer.internaldomain.companydomain.com . Lorsque nous avons remplacé l'URL par celle utilisée pour générer le certificat, nous n'avons plus eu d'erreur.
Peut-être que le simple changement d'URL aurait fonctionné, mais en rendant le certificat fiable, vous évitez également l'écran rouge dans Internet Explorer où il vous indique qu'il ne fait pas confiance au certificat.
la source
Si vous utilisez .net core, essayez ceci:
la source
Veuillez suivre les étapes suivantes:
Ouvrir le lien de service dans IE.
Cliquez sur la mention d'erreur de certificat dans la barre d'adresse et cliquez sur Afficher les certificats.
Chèque émis à: nom.
Prenez le nom émis et remplacez la mention localhost dans le nom de l'adresse de base du point de terminaison du service et du client par un nom de domaine complet (FQDN).
Par exemple: https: // localhost : 203 / SampleService.svc To https: // INL-126166-.groupinfra.com : 203 / SampleService.svc
la source
En plus des réponses ci-dessus, vous pouvez rencontrer cette erreur si votre client exécute la mauvaise version de TLS, par exemple si le serveur exécute uniquement TLS 1.2.
Vous pouvez le réparer en utilisant:
la source
J'ai eu le même problème. J'avais également ajouté des certificats CA dans le magasin local, mais je l'ai fait de la mauvaise manière.
En utilisant la console mmc (Démarrer -> Exécuter -> mmc ), vous devez ajouter composant logiciel enfichable Certificats en tant que compte de service (en choisissant le compte de service d'IIS) ou compte d'ordinateur (il ajoute pour chaque compte sur la machine)
Voici une image de ce dont je parle
À partir de maintenant, vous pouvez ajouter des certificats d'autorités de certification (autorités de certification racines de confiance et autorités de certification intermédiaires ), et tout fonctionnera correctement
la source
J'ai eu un problème similaire avec le certificat auto-signé. Je pourrais le résoudre en utilisant le nom du certificat identique au nom de domaine complet du serveur.
Idéalement, la partie SSL doit être gérée côté serveur. Le client n'est pas tenu d'installer un certificat pour SSL. En outre, certains des articles mentionnés sur le contournement du SSL du code client. Mais je suis totalement en désaccord avec cela.
la source
Je viens de faire glisser le certificat dans le dossier "Autorités de certification racines de confiance" et voilà, tout a bien fonctionné.
Oh. Et j'ai d'abord ajouté ce qui suit à partir d'une invite de commande administrateur:
Je ne suis pas sûr du nom dont vous avez besoin pour l'utilisateur (le mien est norvégien comme vous pouvez le voir!)
user=NT-AUTHORITY/INTERACTIVE
:?Vous pouvez voir toutes les URL existantes en exécutant la commande:
netsh http show urlacl
la source
Cela s'est produit lors de la tentative de connexion au service WCF via. l'IP par exemple
https://111.11.111.1:port/MyService.svc
lors de l'utilisation d'un certificat lié à un nom, par exemple mysite.com.Passer au
https://mysite.com:port/MyService.svc
résolu.la source
Cela s'est produit lors de la tentative de connexion au service WCF en utilisant uniquement le nom d'hôte, par exemple https: //host/MyService.svc tout en utilisant un certificat lié à un nom, par exemple host.mysite.com.
Passer à https://host.mysite.com/MyService.svc et cela l'a résolu.
la source
Je viens de corriger un problème similaire.
J'ai réalisé que j'avais un pool d'applications qui s'exécutait sous un compte qui n'avait l'autorisation de lecture que sur le certificat utilisé.
L'application .NET pouvait récupérer correctement le certificat, mais cette exception n'était levée que lorsque GetRequestStream () était appelé.
Les autorisations de certificats peuvent être gérées via la console MMC
la source
Si vous utilisez .net core, pendant le développement, vous pouvez contourner la validation de certificat à l'aide des directives du compilateur. Cette méthode validera uniquement le certificat pour la publication et non pour le débogage:
la source
Ajoutez ceci à votre code client:
la source