Nous ne pouvons pas nous connecter à un serveur HTTPS à l'aide WebRequest
de ce message d'erreur:
The request was aborted: Could not create SSL/TLS secure channel.
Nous savons que le serveur n'a pas de certificat HTTPS valide avec le chemin d'accès utilisé, mais pour contourner ce problème, nous utilisons le code suivant que nous avons extrait d'un autre article StackOverflow:
private void Somewhere() {
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
}
private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) {
return true;
}
Le problème est que le serveur ne valide jamais le certificat et échoue avec l'erreur ci-dessus. Quelqu'un a-t-il une idée de ce que je dois faire?
Je dois mentionner qu'un collègue et moi avons effectué des tests il y a quelques semaines et que cela fonctionnait bien avec quelque chose de similaire à ce que j'ai écrit ci-dessus. La seule "différence majeure" que nous avons trouvée est que j'utilise Windows 7 et qu'il utilisait Windows XP. Cela change-t-il quelque chose?
The request was aborted: Could not create SSL/TLS secure channel
est très générique. Il dit essentiellement, "l'initialisation de la connexion SSL / TLS / HTTPS a échoué pour l'une des nombreuses raisons possibles". Donc, si vous l'obtenez régulièrement dans une situation spécifique, votre meilleure option est de poser une question spécifique donnant des détails spécifiques sur cette situation. Et consultez l'Observateur d'événements pour plus d'informations. Et / ou activez un débogage côté client .NET pour obtenir plus de détails (le certificat du serveur n'est-il pas approuvé? Y a-t-il une incompatibilité de chiffrement? Incompatibilité de version du protocole SSL / TLS? Etc.).Réponses:
J'ai finalement trouvé la réponse (je n'ai pas noté ma source mais c'était à partir d'une recherche);
Alors que le code fonctionne dans Windows XP, dans Windows 7, vous devez ajouter ceci au début:
Et maintenant, cela fonctionne parfaitement.
ADDENDA
Comme mentionné par Robin French; si vous rencontrez ce problème lors de la configuration de PayPal, veuillez noter qu'ils ne prendront pas en charge SSL3 à partir du 3 décembre 2018. Vous devrez utiliser TLS. Voici la page Paypal à ce sujet.
la source
System.Net.ServicePointManager.SecurityProtocol |= System.Net.SecurityProtocolType.Tls12;
La solution à cela, dans .NET 4.5 est
Si vous n'avez pas .NET 4.5, utilisez
la source
ServicePointManager.SecurityProtocol = DirectCast(3072, SecurityProtocolType)
Assurez-vous que les paramètres ServicePointManager sont définis avant la création de HttpWebRequest, sinon cela ne fonctionnera pas.
Travaux:
Échoue:
la source
Le problème que vous rencontrez est que l'utilisateur aspNet n'a pas accès au certificat. Vous devez autoriser l'accès à l'aide de winhttpcertcfg.exe
Un exemple sur la façon de configurer cela est sur: http://support.microsoft.com/kb/901183
Sous l'étape 2 dans plus d'informations
EDIT: dans les versions plus récentes d'IIS, cette fonctionnalité est intégrée à l'outil de gestion des certificats - et est accessible en cliquant avec le bouton droit sur le certificat et en utilisant l'option de gestion des clés privées. Plus de détails ici: /server/131046/how-to-grant-iis-7-5-access-to-a-certificate-in-certificate-store/132791#132791
la source
L'erreur est générique et il existe de nombreuses raisons pour lesquelles la négociation SSL / TLS peut échouer. Le plus courant est un certificat de serveur invalide ou expiré, et vous avez pris soin de cela en fournissant votre propre crochet de validation de certificat de serveur, mais ce n'est pas nécessairement la seule raison. Le serveur peut nécessiter une authentification mutuelle, il peut être configuré avec une suite de chiffres non pris en charge par votre client, il peut y avoir une dérive de temps trop grande pour que la prise de contact réussisse et bien d'autres raisons.
La meilleure solution consiste à utiliser l'ensemble d'outils de dépannage SChannel. SChannel est le fournisseur SSPI responsable de SSL et TLS et votre client l'utilisera pour la prise de contact. Jetez un œil aux outils et paramètres TLS / SSL .
Voir également Comment activer la journalisation des événements Schannel .
la source
Schannel event logging
dans Windows 7-8-10 ?J'ai eu ce problème en essayant de frapper https://ct.mob0.com/Styles/Fun.png , qui est une image distribuée par CloudFlare sur son CDN qui prend en charge des trucs fous comme SPDY et des certificats SSL de redirection étrange.
Au lieu de spécifier Ssl3 comme dans la réponse Simons, j'ai pu le réparer en descendant vers Tls12 comme ceci:
la source
Après de longues heures avec ce même problème, j'ai constaté que le compte ASP.NET sous lequel le service client s'exécutait n'avait pas accès au certificat. Je l'ai corrigé en accédant au pool d'applications IIS sous lequel l'application Web s'exécute, en accédant aux paramètres avancés et en modifiant l'identité du
LocalSystem
compteNetworkService
.Une meilleure solution consiste à faire fonctionner le certificat avec le
NetworkService
compte par défaut , mais cela fonctionne pour des tests fonctionnels rapides.la source
L'approche avec le réglage
Semble être correct, car Tls1.2 est la dernière version du protocole sécurisé. Mais j'ai décidé de regarder plus en profondeur et de répondre avons-nous vraiment besoin de le coder en dur.
Spécifications: Windows Server 2012R2 x64.
Sur Internet, il est indiqué que .NetFramework 4.6+ doit utiliser Tls1.2 par défaut. Mais quand j'ai mis à jour mon projet en 4.6, rien ne s'est produit. J'ai trouvé des informations qui indiquent que j'ai besoin de faire manuellement quelques modifications pour activer Tls1.2 par défaut
https://support.microsoft.com/en-in/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi
Mais la mise à jour Windows proposée ne fonctionne pas pour la version R2
Mais ce qui m'a aidé, c'est d'ajouter 2 valeurs au registre. Vous pouvez utiliser le prochain script PS pour qu'ils soient ajoutés automatiquement
C'est un peu ce que je cherchais. Mais je ne peux toujours pas répondre à la question de savoir pourquoi NetFramework 4.6+ ne définit pas cette valeur de protocole automatiquement?
la source
Quelque chose que la réponse originale n'avait pas. J'ai ajouté un peu plus de code pour le rendre à l'épreuve des balles.
la source
Tls and Tls11
sont obsolètes ?SSL v2 unsecure, SSL v3 is insecure when used with HTTP (the POODLE attack), TLS v1.0, TLS v1.1 obsoletes
Seule une option valide seraServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
?Une autre possibilité est l'importation incorrecte de certificats sur la boîte. Assurez-vous de cocher la case encerclée. Initialement, je ne l'ai pas fait, donc le code expirait ou lançait la même exception car la clé privée ne pouvait pas être localisée.
la source
L'exception «La demande a été abandonnée: impossible de créer un canal sécurisé SSL / TLS» peut se produire si le serveur renvoie une réponse HTTP 401 non autorisée à la demande HTTP.
Vous pouvez déterminer si cela se produit en activant la journalisation System.Net au niveau de la trace pour votre application client, comme décrit dans cette réponse .
Une fois cette configuration de journalisation en place, exécutez l'application et reproduisez l'erreur, puis recherchez dans la sortie de journalisation une ligne comme celle-ci:
Dans ma situation, je n'arrivais pas à définir un cookie particulier que le serveur attendait, ce qui a conduit le serveur à répondre à la demande avec l'erreur 401, ce qui a entraîné à son tour l'exception "Impossible de créer un canal sécurisé SSL / TLS".
la source
2 errors in 2 months
). Lorsque j'obtiens l'erreur, quelques minutes plus tard, j'essaie à nouveau manuellement et tout est OK.Une autre cause possible de l'
The request was aborted: Could not create SSL/TLS secure channel
erreur est une incompatibilité entre les valeurs cipher_suites configurées de votre PC client et les valeurs que le serveur est configuré comme étant disposé et capable d'accepter . Dans ce cas, lorsque votre client envoie la liste des valeurs cipher_suites qu'il est en mesure d'accepter dans son message initial SSL de négociation / négociation SSL "Client Hello", le serveur voit qu'aucune des valeurs fournies n'est acceptable et peut renvoyer une "Alerte" "réponse au lieu de passer à l'étape" Server Hello "de la négociation SSL.Pour étudier cette possibilité, vous pouvez télécharger Microsoft Message Analyzer et l'utiliser pour exécuter une trace sur la négociation SSL qui se produit lorsque vous essayez et échouez à établir une connexion HTTPS au serveur (dans votre application C #).
Si vous êtes en mesure d'établir une connexion HTTPS réussie à partir d'un autre environnement (par exemple, la machine Windows XP que vous avez mentionnée - ou peut-être en appuyant sur l'URL HTTPS dans un navigateur non Microsoft qui n'utilise pas les paramètres de la suite de chiffrement du système d'exploitation, tels que Chrome ou Firefox), exécutez une autre trace Message Analyzer dans cet environnement pour capturer ce qui se passe lorsque la négociation SSL réussit.
J'espère que vous verrez une différence entre les deux messages Bonjour client qui vous permettront de déterminer exactement ce que l'échec de la négociation SSL entraîne son échec. Ensuite, vous devriez être en mesure d'apporter des modifications de configuration à Windows qui lui permettront de réussir. IISCrypto est un excellent outil à utiliser pour cela (même pour les PC clients, malgré le nom "IIS").
Les deux clés de registre Windows suivantes régissent les valeurs cipher_suites que votre PC utilisera:
Voici un résumé complet de la façon dont j'ai étudié et résolu une instance de cette variété du
Could not create SSL/TLS secure channel
problème: http://blog.jonschneider.com/2016/08/fix-ssl-handshaking-error-in-windows.htmlla source
La racine de cette exception dans mon cas était qu'à un moment donné du code, ce qui suit était appelé:
C'est vraiment mauvais. Non seulement il demande à .NET d'utiliser un protocole non sécurisé, mais cela a un impact sur chaque nouvelle demande WebClient (et similaire) effectuée par la suite dans votre domaine d'application. (Notez que les demandes Web entrantes ne sont pas affectées dans votre application ASP.NET, mais les nouvelles demandes WebClient, telles que pour parler à un service Web externe, le sont).
Dans mon cas, ce n'était pas vraiment nécessaire, donc je pouvais simplement supprimer la déclaration et toutes mes autres demandes Web ont recommencé à fonctionner correctement. Sur la base de ma lecture ailleurs, j'ai appris quelques choses:
la source
J'ai eu ce problème car mon web.config avait:
et pas:
la source
Comme vous pouvez le constater, cela peut se produire pour de nombreuses raisons. J'ai pensé ajouter la cause que j'ai rencontrée ...
Si vous définissez la valeur de
WebRequest.Timeout
sur0
, c'est l'exception qui est levée. Ci-dessous est le code que j'avais ... (Sauf au lieu d'un code dur0
pour la valeur de délai d'attente, j'avais un paramètre qui a été réglé par inadvertance sur0
).la source
La réponse la plus votée sera probablement suffisante pour la plupart des gens. Cependant, dans certaines circonstances, vous pouvez continuer à obtenir une erreur «Impossible de créer un canal sécurisé SSL / TLS» même après avoir forcé TLS 1.2. Si oui, vous voudrez peut-être consulter cet article utilepour des étapes de dépannage supplémentaires. Pour résumer: indépendamment du problème de version TLS / SSL, le client et le serveur doivent se mettre d'accord sur une "suite de chiffrement". Pendant la phase de «prise de contact» de la connexion SSL, le client listera ses suites de chiffrement prises en charge pour que le serveur les compare à sa propre liste. Mais sur certaines machines Windows, certaines suites de chiffrement courantes peuvent avoir été désactivées (apparemment en raison de tentatives bien intentionnées de limiter la surface d'attaque), ce qui diminue la possibilité pour le client et le serveur de convenir d'une suite de chiffrement. S'ils ne peuvent pas se mettre d'accord, vous pouvez voir "code d'alerte fatale 40" dans l'observateur d'événements et "Impossible de créer un canal sécurisé SSL / TLS" dans votre programme .NET.
L'article susmentionné explique comment répertorier toutes les suites de chiffrement potentiellement prises en charge par une machine et activer des suites de chiffrement supplémentaires via le Registre Windows. Pour aider à vérifier quelles suites de chiffrement sont activées sur le client, essayez de visiter cette page de diagnostic dans MSIE. (L'utilisation du suivi System.Net peut donner des résultats plus définitifs.) Pour vérifier quelles suites de chiffrement sont prises en charge par le serveur, essayez cet outil en ligne (en supposant que le serveur est accessible sur Internet). Il va sans dire que les modifications du Registre doivent être effectuées avec prudence , en particulier lorsque le réseautage est impliqué. (Votre machine est-elle une machine virtuelle hébergée à distance? Si vous deviez interrompre la mise en réseau, la machine virtuelle serait-elle accessible du tout?)
Dans le cas de mon entreprise, nous avons activé plusieurs suites "ECDHE_ECDSA" supplémentaires via la modification du registre, pour résoudre un problème immédiat et éviter les problèmes futurs. Mais si vous ne pouvez pas (ou ne voulez pas) modifier le Registre, de nombreuses solutions de contournement (pas nécessairement jolies) vous viennent à l'esprit. Par exemple: votre programme .NET pourrait déléguer son trafic SSL à un programme Python distinct (qui peut lui-même fonctionner, pour la même raison que les demandes Chrome peuvent réussir lorsque les demandes MSIE échouent sur une machine affectée).
la source
L'une des principales causes de ce problème est la version active de .NET Framework. La version d'exécution du framework .NET affecte les protocoles de sécurité activés par défaut.
Il ne semble pas y avoir de documentation faisant autorité sur la façon dont cela fonctionne spécifiquement dans différentes versions, mais il semble que les valeurs par défaut soient déterminées plus ou moins comme suit:
(Pour les versions plus anciennes, votre kilométrage peut varier quelque peu en fonction des environnements d'exécution .NET installés sur le système. Par exemple, il peut y avoir une situation dans laquelle vous utilisez un cadre très ancien et TLS 1.0 n'est pas pris en charge, ou utilisez 4.6. x et TLS 1.3 n'est pas pris en charge)
La documentation de Microsoft conseille fortement d'utiliser 4.7+ et les valeurs par défaut du système:
Pour les sites ASP.NET , vérifiez la version du framework .NET dans votre
<httpRuntime>
élément, car cela détermine quel runtime est réellement utilisé par votre site:Meilleur:
la source
Celui-ci travaille pour moi dans MVC webclient
la source
Dans le cas où le client est une machine Windows, une raison possible pourrait être que le protocole tls ou ssl requis par le service n'est pas activé.
Cela peut être défini dans:
Faites défiler les paramètres jusqu'à "Sécurité" et choisissez entre
la source
Dans mon cas, le compte de service exécutant l'application n'avait pas l'autorisation d'accéder à la clé privée. Une fois que j'ai donné cette autorisation, l'erreur a disparu
la source
Si vous exécutez votre code à partir de Visual Studio, essayez d'exécuter Visual Studio en tant qu'administrateur. Correction du problème pour moi.
la source
J'ai lutté avec ce problème toute la journée.
Lorsque j'ai créé un nouveau projet avec .NET 4.5, j'ai finalement réussi à le faire fonctionner.
Mais si j'ai rétrogradé à 4.0, j'ai de nouveau eu le même problème, et c'était irréversible pour ce projet (même lorsque j'ai essayé de passer à nouveau à 4.5).
Étrange aucun autre message d'erreur mais "La demande a été abandonnée: impossible de créer un canal sécurisé SSL / TLS." est venu pour cette erreur
la source
Dans notre cas, nous avons utilisé un fournisseur de logiciels, nous n'avons donc pas eu accès à la modification du code .NET. Apparemment .NET 4 n'utilisera pas TLS v 1.2 sauf s'il y a un changement.
Le correctif pour nous ajoutait la clé SchUseStrongCrypto au registre. Vous pouvez copier / coller le code ci-dessous dans un fichier texte avec l'extension .reg et l'exécuter. Il a servi de "patch" au problème.
la source
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319" -Name "SchUseStrongCrypto" -Value "1" -Type DWord
New-ItemProperty -Path "HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319" -Name "SchUseStrongCrypto" -Value "1" -Type DWord
Essaye ça:
la source
System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
Cela a été résolu pour moi, ajoutez le service réseau aux autorisations. Cliquez avec le bouton droit sur le certificat> Toutes les tâches> Gérer les clés privées ...> Ajouter ...> Ajouter "Service réseau".
la source
Le problème pour moi était que j'essayais de déployer sur IIS en tant que service Web, j'ai installé le certificat sur le serveur, mais l'utilisateur qui exécute IIS n'avait pas les autorisations appropriées sur le certificat.
Comment donner à ASP.NET l'accès à une clé privée dans un certificat dans le magasin de certificats?
la source
J'avais ce même problème et j'ai trouvé que cette réponse fonctionnait correctement pour moi. La clé est 3072. Ce lien fournit les détails sur le correctif «3072».
Dans mon cas, deux flux nécessitaient la correction:
la source
Cette question peut avoir de nombreuses réponses car il s'agit d'un message d'erreur générique. Nous avons rencontré ce problème sur certains de nos serveurs, mais pas sur nos machines de développement. Après avoir retiré la plupart de nos cheveux, nous avons constaté que c'était un bug de Microsoft.
https://support.microsoft.com/en-us/help/4458166/applications-that-rely-on-tls-1-2-strong-encryption-experience-connect
Essentiellement, MS suppose que vous souhaitez un cryptage plus faible, mais le système d'exploitation est corrigé pour n'autoriser que TLS 1.2, vous recevez donc le redouté "La demande a été abandonnée: impossible de créer un canal sécurisé SSL / TLS."
Il existe trois correctifs.
1) Corrigez le système d'exploitation avec la mise à jour appropriée: http://www.catalog.update.microsoft.com/Search.aspx?q=kb4458166
2) Ajoutez un paramètre à votre fichier app.config / web.config.
3) Ajoutez un paramètre de registre déjà mentionné dans une autre réponse.
Tous ces éléments sont mentionnés dans l'article de la base de connaissances que j'ai publié.
la source
Une autre possibilité est que le code en cours d'exécution n'a pas les prémisses requises.
Dans mon cas, j'ai eu cette erreur lors de l'utilisation du débogueur Visual Studio pour tester un appel à un service Web. Visual Studio ne s'exécutait pas en tant qu'administrateur, ce qui a provoqué cette exception.
la source
Cela se produisait pour moi sur un seul site, et il s'avère que seul le code RC4 était disponible. Dans un effort préalable pour durcir le serveur, j'avais désactivé le chiffrement RC4, une fois réactivé, le problème a été résolu.
la source