tls the selfsignedcertificate secure not new create could aborted powershell ssl

powershell - selfsignedcertificate - invoke webrequest the request was aborted could not create ssl tls secure channel



¿Invoke-WebRequest SSL falla? (3)

Como señala BaconBits , la versión .NET> 4.5 usa SSLv3 y TLS 1.0 por defecto.

Puede cambiar este comportamiento configurando la política de SecurityProtocol con la clase ServicePointManager :

PS C:/> $AllProtocols = [System.Net.SecurityProtocolType]''Ssl3,Tls,Tls11,Tls12'' PS C:/> [System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols PS C:/> (Invoke-WebRequest -Uri "https://idp.safenames.com/").StatusCode 200

Esto se aplicará a todas las solicitudes en el dominio de aplicación (por lo que solo se aplica a la instancia actual de la aplicación host).

Hay un módulo en GitHub y en PSGallery que puede administrar estas configuraciones ahora:

Install-Module BetterTls -Scope CurrentUser Import-Module BetterTls Enable-Tls -Tls11 -Tls12

Cuando trato de usar Invoke-WebRequest un error extraño:

Invoke-WebRequest -Uri "https://idp.safenames.com/" Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send.

No estoy seguro de lo que lo está causando, ya que el sitio web en sí parece estar bien.

Incluso con todas las funciones de "ignorar los errores de ssl" alrededor de stackoverflow, todavía no funciona, por lo que me pregunto si está relacionado con SSL en absoluto.


Esto también puede ser cambiado permanentemente

# set strong cryptography on 32 bit .Net Framework (version 4 and above) Set-ItemProperty -Path ''HKLM:/SOFTWARE/Wow6432Node/Microsoft/.NetFramework/v4.0.30319'' -Name ''SchUseStrongCrypto'' -Value ''1'' -Type DWord # set strong cryptography on 64 bit .Net Framework (version 4 and above) Set-ItemProperty -Path ''HKLM:/SOFTWARE/Microsoft/.NetFramework/v4.0.30319'' -Name ''SchUseStrongCrypto'' -Value ''1'' -Type DWord


Según este análisis , no parece que la URI sea compatible con algo más bajo que TLS 1.1.

¿En qué versión de Windows estás? Si está en PowerShell v4.0 o inferior, no podrá negociar una conexión TLS 1.1 o 1.2 porque .Net Framework no es compatible con TLS 1.1 o 1.2 hasta que .Net Framework 4.5. PowerShell v4.0 es .Net 4.0. Eso significa que las clases de System.Net.WebRequest subyacentes no pueden negociar una conexión. Creo que PowerShell v5.0 es .Net 4.5 o .Net 4.6, pero no tengo un cliente de Win 10 para verificar el $PSVersionTable este momento.

Puede lograr que funcione codificando las llamadas a WebRequest manualmente y especificando el protocolo como [System.Net.SecurityProtocolType]::Tls12 o [System.Net.SecurityProtocolType]::Tls11 , pero no estoy seguro de si eso es posible. Se supone que funciona si se instala .Net 4.5 por lo que estoy viendo, pero, nuevamente, nunca lo probé.

Para referencia, obtengo exactamente los mismos resultados que usted en Windows 7 x64 / Powershell v4.0 y tengo .Net 4.5 instalado, pero nunca he intentado codificar manualmente el WebRequest. También obtengo un error si uso wget para Windows 1.11.4 desde here (OpenSSL 0.9.8b, mucho antes de TLS 1.1 y 1.2), pero funciona bien si uso wget para Windows 1.17.1 desde here (más, más o menos).