Powershell Invoke-WebRequest falla con el canal seguro SSL/TLS

Resuelto hewstone asked hace 7 años • 7 respuestas

Estoy intentando 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?

hewstone avatar Jan 12 '17 23:01 hewstone
Aceptado

intenta usar este

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/
Chandan Rai avatar Jan 12 '2017 17:01 Chandan Rai

En un descarado intento de robar algunos votos, SecurityProtocolse encuentra Enumcon el [Flags]atributo. Entonces puedes hacer esto:

[Net.ServicePointManager]::SecurityProtocol = 
  [Net.SecurityProtocolType]::Tls12 -bor `
  [Net.SecurityProtocolType]::Tls11 -bor `
  [Net.SecurityProtocolType]::Tls

O como se trata de PowerShell, puedes dejar que analice una cadena por ti:

[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"

Entonces técnicamente no necesitas conocer la versión de TLS.

Copié y pegué esto de un script que creé después de leer esta respuesta porque no quería recorrer todos los protocolos disponibles para encontrar uno que funcionara. Por supuesto, podrías hacerlo 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.

No Refunds No Returns avatar Dec 30 '2017 03:12 No Refunds No Returns

La causa del error es que Powershell utiliza TLS 1.0 de forma predeterminada para conectarse al sitio web, pero la seguridad del sitio web requiere TLS 1.2. Puede cambiar este comportamiento ejecutando cualquiera de los siguientes comandos para utilizar todos los protocolos. También puede especificar un protocolo único.

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls, [Net.SecurityProtocolType]::Tls11, [Net.SecurityProtocolType]::Tls12, [Net.SecurityProtocolType]::Ssl3
[Net.ServicePointManager]::SecurityProtocol = "Tls, Tls11, Tls12, Ssl3"

Después de ejecutar estos comandos, intente ejecutar su comando:

Invoke-WebRequest -Uri https://apod.nasa.gov/apod/

entonces funcionará.

Sidrah Madiha Siddiqui avatar Mar 13 '2021 13:03 Sidrah Madiha Siddiqui

Si, como yo, nada de lo anterior funciona, podría valer la pena probar específicamente una versión TLS inferior. Intenté las dos cosas siguientes, pero no pareció 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 eliminé 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 correcto para TLS 1.2 por un tercero) parece no estarlo.

Espero que esto ayude a alguien.

Mark-DG1 avatar Aug 09 '2019 10:08 Mark-DG1