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
'programing' 카테고리의 다른 글
| 페이지의 아무 곳에서나 Enter 키 캡처 누름 (0) | 2023.08.27 |
|---|---|
| 도커의 시간이 호스트의 시간과 동기화되는지 확인하는 방법은 무엇입니까? (0) | 2023.08.27 |
| 용기 끝에 마지막 플렉스 항목 배치 (0) | 2023.08.27 |
| 순서에 따라 값을 그룹화합니다. (0) | 2023.08.27 |
| CGSize 개체의 값을 인쇄하거나 기록하는 방법은 무엇입니까? (0) | 2023.08.27 |