programing

Invoke-WebRequest SSL이 실패합니까?

subpage 2023. 8. 27. 09:19
반응형

Invoke-WebRequest SSL이 실패합니까?

사용하려고 할 때Invoke-WebRequest이상한 오류가 발생합니다.

Invoke-WebRequest -Uri "https://idp.safenames.com/"

Invoke-WebRequest : The underlying connection was closed: An unexpected error occurred on a send.

웹사이트 자체가 괜찮은 것 같아서 무엇이 원인인지 잘 모르겠습니다.

스택 오버플로 주변의 모든 "ssl 오류 무시" 기능에도 불구하고 여전히 작동하지 않아 SSL과 관련이 있는지 의문이 듭니다.

BaconBits가 지적했듯이, .NET 버전 > 4.5는 기본적으로 SSLv3 및 TLS 1.0을 사용합니다.

다음을 사용하여 정책을 설정하여 이 동작을 변경할 수 있습니다.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

이는 AppDomain의 모든 요청에 적용되므로 호스트 응용 프로그램의 현재 인스턴스에만 적용됩니다.


GitHub 및 PSGallery에는 이러한 설정을 관리할 수 있는 모듈이 있습니다.

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

영구적으로 변경할 수도 있습니다.

# 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 

검색에 따르면 URI는 TLS 1.1보다 낮은 수준을 지원하지 않는 것 같습니다.

현재 어떤 버전의 Windows(윈도우)를 사용하고 있습니다.PowerShell v4.0 이하 버전에서는 때문에 TLS 1.1 또는 1.2 연결을 협상할 수 없습니다.NetFramework는 이전에는 TLS 1.1 또는 1.2를 지원하지 않습니다.Net Framework 4.5.PowerShell v4.0은 입니다.넷 4.0.이는 기본 시스템을 의미합니다.Net.WebRequest 클래스에서 연결을 협상할 수 없습니다.저는 PowerShell v5.0이 그렇다고 생각합니다.넷 4.5 또는 .넷 4.6, 그러나 나는 윈도우 10 클라이언트가 없습니다.$PSVersionTable지금 당장.

WebRequest에 대한 호출을 수동으로 코딩하고 프로토콜을 다음과 같이 지정하면 작동할 수 있습니다.[System.Net.SecurityProtocolType]::Tls12또는[System.Net.SecurityProtocolType]::Tls11하지만 그게 가능할지는 잘 모르겠습니다.그게 효과가 있을 거예요.제가 본 바로는 Net 4.5가 설치되어 있지만, 다시 한 번 시도해 본 적이 없습니다.

참고로 Windows 7 x64/Powershell v4.0의 경우와 동일한 결과를 얻을 수 있습니다.Net 4.5가 설치되었지만 WebRequest를 수동으로 코딩해 본 적은 없습니다.여기서 Windows 1.11.4용 wget(TLS 1.1 및 1.2 훨씬 이전 버전인 OpenSSL 0.9.8b)을 사용하는 경우에도 오류가 발생하지만 여기서 Windows 1.17.1용 wget(현재 버전, 그 이상)을 사용하는 경우에도 문제가 없습니다.

한 줄:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

언급URL : https://stackoverflow.com/questions/36265534/invoke-webrequest-ssl-fails

반응형