powershell - solicitud - no se puede crear un canal seguro ssl tls songr
Powershell Invoke-WebRequest falla con el canal seguro SSL/TLS (6)
Estoy tratando de ejecutar este comando de PowerShell
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/
y me sale este error "Invoke-WebRequest: la solicitud fue cancelada: no se pudo crear un canal seguro SSL / TLS". Las solicitudes https parecen funcionar (" https://google.com ") pero no esta en cuestión. ¿Cómo puedo hacer que esto funcione o usar otro comando de PowerShell para leer el contenido de la página?
En un intento descarado de robar algunos votos,
SecurityProtocol
es una
Enum
con el atributo
[Flags]
.
Entonces puedes hacer esto:
[Net.ServicePointManager]::SecurityProtocol =
[Net.SecurityProtocolType]::Tls12 -bor `
[Net.SecurityProtocolType]::Tls11 -bor `
[Net.SecurityProtocolType]::Tls
O como se trata de PowerShell, puede dejar que analice una cadena por usted:
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
Entonces técnicamente no necesita saber la versión de TLS.
Copié y pegué esto desde un script que creé después de leer esta respuesta porque no quería pasar por todos los protocolos disponibles para encontrar uno que funcionara. Por supuesto, podrías hacer eso si quisieras.
Nota final: tengo la declaración original (menos las ediciones SO) en mi perfil de PowerShell, por lo que está en cada sesión que comienzo ahora. No es totalmente infalible ya que todavía hay algunos sitios que simplemente fallan, pero seguramente veo el mensaje en cuestión con mucha menos frecuencia.
Este me funcionó
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
Esto funciona para mi...
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/
No he descubierto la razón, pero la reinstalación del certificado
.pfx
(tanto en el usuario actual como en la máquina local) funciona para mí.
Si, como yo, nada de lo anterior funciona, también podría valer la pena probar específicamente una versión más baja de TLS solo. Había intentado lo siguiente, pero no parecía resolver mi problema:
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls" [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls
Al final, fue solo cuando apunté a TLS 1.0 (específicamente eliminar 1.1 y 1.2 en el código) que funcionó:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls
El servidor local (en el que se estaba intentando esto) está bien con TLS 1.2, aunque el servidor remoto (que previamente fue "confirmado" como bien para TLS 1.2 por un tercero) parece no estarlo.
Espero que esto ayude a alguien.
intenta usar este
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/