J'essaie d'exécuter cette commande Powershell
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/
et je reçois cette erreur. "Invoke-WebRequest: la demande a été abandonnée: impossible de créer le canal sécurisé SSL/TLS." Les demandes https semblent fonctionner (" https : //google.com ") mais pas celui-ci en question. Comment puis-je le faire fonctionner ou utiliser une autre commande powershell pour lire le contenu de la page?
essayez d'utiliser celui-ci
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/
Dans une tentative éhontée de voler des votes, SecurityProtocol
est un Enum
avec l'attribut [Flags]
. Donc, vous pouvez faire ceci:
[Net.ServicePointManager]::SecurityProtocol =
[Net.SecurityProtocolType]::Tls12 -bor `
[Net.SecurityProtocolType]::Tls11 -bor `
[Net.SecurityProtocolType]::Tls
Ou, puisqu'il s'agit de PowerShell, vous pouvez le laisser analyser une chaîne pour vous:
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
Dans ce cas, vous n'avez techniquement pas besoin de connaître la version de TLS.
Je l'ai copié et collé à partir d'un script que j'ai créé après avoir lu cette réponse, car je ne voulais pas parcourir tous les protocoles disponibles pour en trouver un qui fonctionnait. Bien sûr, vous pourriez le faire si vous le vouliez.
Note finale - J'ai l'énoncé original (moins SO édités) dans mon profil PowerShell, il est donc présent dans toutes les sessions que je démarre maintenant. Ce n'est pas totalement infaillible puisqu'il y a encore des sites qui échouent mais je vois sûrement le message en question beaucoup moins fréquemment.
Celui-ci a fonctionné pour moi
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
Ça marche pour moi...
if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type)
{
$certCallback = @"
using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
public class ServerCertificateValidationCallback
{
public static void Ignore()
{
if(ServicePointManager.ServerCertificateValidationCallback ==null)
{
ServicePointManager.ServerCertificateValidationCallback +=
delegate
(
Object obj,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors errors
)
{
return true;
};
}
}
}
"@
Add-Type $certCallback
}
[ServerCertificateValidationCallback]::Ignore()
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/
Si, comme moi, rien de ce qui précède ne fonctionne, il pourrait être intéressant d'essayer spécifiquement une version inférieure de TLS. J'avais essayé les deux choses suivantes, mais ne semblais pas résoudre mon problème:
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls
En fin de compte, ce n'est que lorsque j'ai ciblé TLS 1.0 (supprimer spécifiquement 1.1 et 1.2 dans le code) qu'il a fonctionné:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls
Le serveur local (sur lequel cela a été tenté) convient à TLS 1.2, bien que le serveur distant (qui était auparavant "confirmé" par Tiers 1.2 par une tierce partie) ne le soit pas.
J'espère que ça aide quelqu'un.
Je n'ai pas trouvé la raison, mais la réinstallation du certificat .pfx
(à la fois dans l'utilisateur actuel et sur l'ordinateur local) fonctionne pour moi.