[powershell] SSL / TLS 보안 채널로 Powershell Invoke-WebRequest 실패

이 powershell 명령을 실행하려고합니다.

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

이 오류가 발생합니다. “Invoke-WebRequest : 요청이 중단되었습니다 : SSL / TLS 보안 채널을 만들 수 없습니다.” https 요청이 작동하는 것 같지만 ( ” https://google.com “) 문제가되지는 않습니다. 이 작업을 수행하거나 다른 powershell 명령을 사용하여 페이지 내용을 읽으려면 어떻게해야합니까?



답변

이것을 사용해보십시오

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/


답변

일부 표를 훔치는 파렴치한 시도에서 SecurityProtocol입니다 Enum[Flags]속성. 그래서 당신은 이것을 할 수 있습니다 :

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

또는 이것이 PowerShell이므로 문자열을 구문 분석하도록 할 수 있습니다.

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

그러면 기술적으로 TLS 버전을 알 필요가 없습니다.

사용 가능한 모든 프로토콜을 순환하여 작동하는 프로토콜을 찾기를 원하지 않기 때문에이 답변을 읽은 후에 만든 스크립트에서 이것을 복사하여 붙여 넣었습니다. 물론 원한다면 그렇게 할 있습니다.

마지막 참고 사항-PowerShell 프로필에 원본 (마이너스 SO 편집) 문이 있으므로 지금 시작하는 모든 세션에 있습니다. 여전히 실패한 사이트가 있기 때문에 완전히 바보는 아니지만 확실하게 문제의 메시지를 훨씬 덜 보게됩니다.


답변

나처럼 위의 어느 것도 제대로 작동하지 않으면 더 낮은 TLS 버전 만 사용하는 것이 좋습니다. 나는 다음 두 가지를 모두 시도했지만 내 문제를 해결하지 못하는 것 같습니다.

[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls

결국 TLS 1.0 (특히 코드에서 1.1 및 1.2 제거)을 대상으로 한 경우에만 작동했습니다.

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

원격 서버 (이전에 제 3자가 TLS 1.2에 대해 “확인”했음)는 보이지 않지만 로컬 서버 (이 시도 중)는 TLS 1.2에 적합합니다.

이것이 누군가를 돕기를 바랍니다.


답변

그것은 나를 위해 작동합니다 …

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/


답변

SHELL을 먼저 전환하십시오.

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

RUN [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
RUN Invoke-WebRequest -UseBasicParsing -Uri  'https://github.com/git-for-windows/git/releases/download/v2.25.1.windows.1/Git-2.25.1-64-bit.exe' -OutFile 'outfile.exe'


답변

이유를 알지 못했지만 .pfx인증서 (현재 사용자 및 로컬 컴퓨터 모두)를 다시 설치하면 효과가 있습니다.


답변