programing

요청이 중단되었습니다.SSL/TLS 보안 채널을 생성할 수 없습니다.

telecom 2023. 6. 14. 21:40
반응형

요청이 중단되었습니다.SSL/TLS 보안 채널을 생성할 수 없습니다.

고객이 SSL 및 Internet Explorer 관련 문제를 알려주었습니다.그들은 URL에 접속할 때 신뢰 문제가 발생한다고 말했습니다.

저는 HTTPS를 통해 JSON에 접속하고 있습니다.그 웹사이트는 하나의 서버에 있고 나는 내 로컬 컴퓨터의 콘솔 앱을 사용하고 있습니다.SSL 인증서를 무시하려고 하지만 코드가 여전히 실패합니다.

이 문제를 해결하기 위해 HttpWebRequest를 변경할 수 있습니까?

다음 코드를 사용하면 다음 오류가 발생합니다.

    // You must change the URL to point to your Web server.
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "GET";
        req.AllowAutoRedirect = true;

        // allows for validation of SSL conversations
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };


        WebResponse respon = req.GetResponse();
        Stream res = respon.GetResponseStream();

        string ret = "";
        byte[] buffer = new byte[1048];
        int read = 0;
        while ((read = res.Read(buffer, 0, buffer.Length)) > 0)
        {
            //Console.Write(Encoding.ASCII.GetString(buffer, 0, read));
            ret += Encoding.ASCII.GetString(buffer, 0, read);
        }
        return ret;

이 문제를 해결하기 위해 다른 보안 프로토콜 버전을 활성화해야 했습니다.

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
        | SecurityProtocolType.Tls11
        | SecurityProtocolType.Tls12
        | SecurityProtocolType.Ssl3;

다음 코드를 사용하여 로깅을 활성화했습니다.

http://blogs.msdn.com/b/dgorti/archive/2005/09/18/471003.aspx

로그가 bin/debug 폴더에 있었습니다(콘솔 앱의 Debug 모드에 있었습니다).보안 프로토콜 유형을 SSL 3으로 추가해야 합니다.

로그에 알고리즘 불일치가 발생했습니다.내 새 코드는 다음과 같습니다.

        // You must change the URL to point to your Web server.
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "GET";
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;


        // Skip validation of SSL/TLS certificate
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };


        WebResponse respon = req.GetResponse();
        Stream res = respon.GetResponseStream();

        string ret = "";
        byte[] buffer = new byte[1048];
        int read = 0;
        while ((read = res.Read(buffer, 0, buffer.Length)) > 0)
        {
            Console.Write(Encoding.ASCII.GetString(buffer, 0, read));
            ret += Encoding.ASCII.GetString(buffer, 0, read);
        }
        return ret;

기존 답변과 유사하지만 PowerShell:

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

그런 다음 Invoke-WebRequest를 호출하면 됩니다.

익명의 피드백, 좋은 제안: 이것을 쓰는 더 간단한 방법은 다음과 같습니다.

[System.Net.ServicePointManager]::SecurityProtocol = @("Tls12","Tls11","Tls","Ssl3")

Jaykul의 환상적이고 관련된 게시물을 찾았습니다: 자체 서명된 인증서 검증 원본.Net 및 PowerShell

이 문제는 다음과 같은 몇 가지 요인에 의해 발생할 수 있습니다(가장 가능성이 낮은 경우).

  1. 서버의 SSL 인증서를 클라이언트에서 신뢰할 수 없습니다.가장 쉬운 검사는 브라우저가 URL을 가리키고 SSL 잠금 아이콘이 표시되는지 확인하는 것입니다.잠금 장치가 깨진 경우 아이콘을 클릭하여 문제가 무엇인지 확인합니다.

    1. 만료 날짜 - 새 SSL 인증서 가져오기
    2. 이름이 일치하지 않음 - URL이 인증서와 동일한 서버 이름을 사용하는지 확인합니다.
    3. 신뢰할 수 있는 기관에서 서명하지 않음 - Verisign과 같은 기관에서 인증서를 구입하거나 클라이언트의 신뢰할 수 있는 인증서 저장소에 인증서를 추가합니다.
    4. 테스트 환경에서 인증서 검증기를 업데이트하여 액세스 검사를 건너뛸 수 있습니다.프로덕션에서 이 작업을 수행하지 마십시오.
  2. 서버에 클라이언트 SSL 인증서가 필요합니다. 이 경우 클라이언트 인증서로 요청에 서명하려면 코드를 업데이트해야 합니다.

.Net v4.0의 경우 ServicePointManager 값을 설정하는 중입니다.SecurityProtocol to (SecurityProtocolType)3072이지만 HttpWebRequest 개체를 만들기 전에 도움이 되었습니다.

또한 "SSL/TLS 보안 채널을 만들 수 없습니다" 오류가 발생했습니다.이것이 저에게 효과가 있었습니다.시스템.Net.ServicePoint Manager.보안 프로토콜 =(시스템).Net.Security ProtocolType)3072;

유감스럽게도 위에 언급된 답변 중 하나도 저에게 효과가 없었습니다.아래 나열된 코드는 저에게 놀라운 것이었습니다.누군가에게 도움이 될 경우.

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
        | SecurityProtocolType.Tls11
        | SecurityProtocolType.Tls12
        | SecurityProtocolType.Ssl3;

HttpWebRequest를 만들기 전에 이 값을 설정해야 합니다.

아래 링크를 한 번만 봐주세요.보안 프로토콜 유형입니다.SsL3는 이제 오래되었습니다.

http://codemust.com/poodle-vulnerability-fix-openssl/

아래와 같이 보안 프로토콜을 정의합니다.이것이 제 경우의 문제를 해결했습니다.

ServicePoint Manager.보안 프로토콜 = 보안 프로토콜 유형.Tls12;

나는 인증서의 종류도 실행된다는 것을 발견했습니다.

나는 다음과 같은 확신을 가지고 있었습니다.

(아래 출력은 mmc, 인증서 속성)

디지털 서명, 키 암호화(a0)

(아래 출력은 아래의 C# 코드에서 나온 것입니다.)

X509 내선 번호.X509 주요 사용내선 번호.사용='키 암호화, 디지털 서명' X509 키 사용내선 번호.주요 용도.X509주요 사용 플래그.CRLSign='False' X509 주요 사용내선 번호.주요 용도.X509주요 사용 플래그.Data Encipherment= '거짓' X509 주요 사용내선 번호.주요 용도.X509주요 사용 플래그.DecryptOnly='False' X509 주요 용도내선 번호.주요 용도.X509주요 사용 플래그.디지털 서명='진정한 의미의 X509 주요 사용내선 번호.주요 용도.X509주요 사용 플래그.EncipherOnly='False' X509 키 사용내선 번호.주요 용도.X509주요 사용 플래그.키 계약='거짓' X509 키 사용내선 번호.주요 용도.X509주요 사용 플래그.KeyCertSign='False' X509 키 사용내선 번호.주요 용도.X509주요 사용 플래그.키 암호화='진정한 의미의 X509 주요 사용내선 번호.주요 용도.X509주요 사용 플래그.없음='거짓' X509 주요 사용내선 번호.주요 용도.X509주요 사용 플래그.Non Repudiation= 'False'

위의 것이 작동하지 않았습니다.

===============================

그런 다음 다음이 포함된 다른 인증서:

(아래 출력은 mmc, 인증서 속성)

인증서 서명, 오프라인 CRL 서명, CRL 서명(06)

(아래 출력은 아래의 C# 코드에서 나온 것입니다.)

X509 내선 번호.X509 주요 사용내선 번호.KeyUsage='CrlSign, KeyCertSign' X509KeyUsage내선 번호.주요 용도.X509주요 사용 플래그.crlSign='진정한 의미의 X509 주요 사용내선 번호.주요 용도.X509주요 사용 플래그.Data Encipherment= '거짓' X509 주요 사용내선 번호.주요 용도.X509주요 사용 플래그.DecryptOnly='False' X509 주요 용도내선 번호.주요 용도.X509주요 사용 플래그.Digital Signature='False' X509 주요 용도내선 번호.주요 용도.X509주요 사용 플래그.EncipherOnly='False' X509 키 사용내선 번호.주요 용도.X509주요 사용 플래그.키 계약='거짓' X509 키 사용내선 번호.주요 용도.X509주요 사용 플래그.KeyCertSign='진정한 의미의 X509 주요 사용내선 번호.주요 용도.X509주요 사용 플래그.키 암호화='거짓' X509 키 사용내선 번호.주요 용도.X509주요 사용 플래그.없음='거짓' X509 주요 사용내선 번호.주요 용도.X509주요 사용 플래그.Non Repudiation= 'False'

효과가 있었습니다.

아래 코드를 사용하면 고객 인증서를 검사할 수 있습니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;

namespace MyNamespace
{
    public static class SecurityShower
    {
        public static void ShowHttpWebRequest(System.Net.HttpWebRequest hwr)
        {
            StringBuilder sb = new StringBuilder();
            if (null != hwr)
            {
                sb.Append("-----------------------------------------------HttpWebRequest" + System.Environment.NewLine);
                sb.Append(string.Format("HttpWebRequest.Address.AbsolutePath='{0}'", hwr.Address.AbsolutePath) + System.Environment.NewLine);
                sb.Append(string.Format("HttpWebRequest.Address.AbsoluteUri='{0}'", hwr.Address.AbsoluteUri) + System.Environment.NewLine);
                sb.Append(string.Format("HttpWebRequest.Address='{0}'", hwr.Address) + System.Environment.NewLine);

                sb.Append(string.Format("HttpWebRequest.RequestUri.AbsolutePath='{0}'", hwr.RequestUri.AbsolutePath) + System.Environment.NewLine);
                sb.Append(string.Format("HttpWebRequest.RequestUri.AbsoluteUri='{0}'", hwr.RequestUri.AbsoluteUri) + System.Environment.NewLine);
                sb.Append(string.Format("HttpWebRequest.RequestUri='{0}'", hwr.RequestUri) + System.Environment.NewLine);

                foreach (X509Certificate cert in hwr.ClientCertificates)
                {
                    sb.Append("START*************************************************");
                    ShowX509Certificate(sb, cert);
                    sb.Append("END*************************************************");
                }
            }

            string result = sb.ToString();
            Console.WriteLine(result);
        }

        public static void ShowCertAndChain(X509Certificate2 cert)
        {
            X509Chain chain = new X509Chain();
            chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
            chain.ChainPolicy.RevocationMode = X509RevocationMode.Offline;
            chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags;

            ////chain.ChainPolicy.VerificationFlags = X509VerificationFlags.IgnoreCtlSignerRevocationUnknown &&
            ////X509VerificationFlags.IgnoreRootRevocationUnknown &&
            ////X509VerificationFlags.IgnoreEndRevocationUnknown &&
            ////X509VerificationFlags.IgnoreCertificateAuthorityRevocationUnknown &&
            ////X509VerificationFlags.IgnoreCtlNotTimeValid;

            chain.Build(cert);

            ShowCertAndChain(cert, chain);
        }

        public static void ShowCertAndChain(X509Certificate cert, X509Chain chain)
        {
            StringBuilder sb = new StringBuilder();
            if (null != cert)
            {
                ShowX509Certificate(sb, cert);
            }

            if (null != chain)
            {
                sb.Append("-X509Chain(Start)-" + System.Environment.NewLine);
                ////sb.Append(string.Format("Cert.ChainStatus='{0}'", string.Join(",", chain.ChainStatus.ToList())) + System.Environment.NewLine);

                foreach (X509ChainStatus cstat in chain.ChainStatus)
                {
                    sb.Append(string.Format("X509ChainStatus::'{0}'-'{1}'", cstat.Status.ToString(), cstat.StatusInformation) + System.Environment.NewLine);
                }

                X509ChainElementCollection ces = chain.ChainElements;
                ShowX509ChainElementCollection(sb, ces);
                sb.Append("-X509Chain(End)-" + System.Environment.NewLine);
            }

            string result = sb.ToString();
            Console.WriteLine(result);
        }

        private static void ShowX509Extension(StringBuilder sb, int x509ExtensionCount, X509Extension ext)
        {
            sb.Append(string.Empty + System.Environment.NewLine);
            sb.Append(string.Format("--------X509ExtensionNumber(Start):{0}", x509ExtensionCount) + System.Environment.NewLine);
            sb.Append(string.Format("X509Extension.Critical='{0}'", ext.Critical) + System.Environment.NewLine);

            AsnEncodedData asndata = new AsnEncodedData(ext.Oid, ext.RawData);
            sb.Append(string.Format("Extension type: {0}", ext.Oid.FriendlyName) + System.Environment.NewLine);
            sb.Append(string.Format("Oid value: {0}", asndata.Oid.Value) + System.Environment.NewLine);
            sb.Append(string.Format("Raw data length: {0} {1}", asndata.RawData.Length, Environment.NewLine) + System.Environment.NewLine);
            sb.Append(asndata.Format(true) + System.Environment.NewLine);

            X509BasicConstraintsExtension basicEx = ext as X509BasicConstraintsExtension;
            if (null != basicEx)
            {
                sb.Append("-X509BasicConstraintsExtension-" + System.Environment.NewLine);
                sb.Append(string.Format("X509Extension.X509BasicConstraintsExtension.CertificateAuthority='{0}'", basicEx.CertificateAuthority) + System.Environment.NewLine);
            }

            X509EnhancedKeyUsageExtension keyEx = ext as X509EnhancedKeyUsageExtension;
            if (null != keyEx)
            {
                sb.Append("-X509EnhancedKeyUsageExtension-" + System.Environment.NewLine);
                sb.Append(string.Format("X509Extension.X509EnhancedKeyUsageExtension.EnhancedKeyUsages='{0}'", keyEx.EnhancedKeyUsages) + System.Environment.NewLine);
                foreach (Oid oi in keyEx.EnhancedKeyUsages)
                {
                    sb.Append(string.Format("------------EnhancedKeyUsages.Oid.FriendlyName='{0}'", oi.FriendlyName) + System.Environment.NewLine);
                    sb.Append(string.Format("------------EnhancedKeyUsages.Oid.Value='{0}'", oi.Value) + System.Environment.NewLine);
                }
            }

            X509KeyUsageExtension usageEx = ext as X509KeyUsageExtension;
            if (null != usageEx)
            {
                sb.Append("-X509KeyUsageExtension-" + System.Environment.NewLine);
                sb.Append(string.Format("X509Extension.X509KeyUsageExtension.KeyUsages='{0}'", usageEx.KeyUsages) + System.Environment.NewLine);
                sb.Append(string.Format("X509KeyUsageExtension.KeyUsages.X509KeyUsageFlags.CrlSign='{0}'", (usageEx.KeyUsages & X509KeyUsageFlags.CrlSign) != 0) + System.Environment.NewLine);
                sb.Append(string.Format("X509KeyUsageExtension.KeyUsages.X509KeyUsageFlags.DataEncipherment='{0}'", (usageEx.KeyUsages & X509KeyUsageFlags.DataEncipherment) != 0) + System.Environment.NewLine);
                sb.Append(string.Format("X509KeyUsageExtension.KeyUsages.X509KeyUsageFlags.DecipherOnly='{0}'", (usageEx.KeyUsages & X509KeyUsageFlags.DecipherOnly) != 0) + System.Environment.NewLine);
                sb.Append(string.Format("X509KeyUsageExtension.KeyUsages.X509KeyUsageFlags.DigitalSignature='{0}'", (usageEx.KeyUsages & X509KeyUsageFlags.DigitalSignature) != 0) + System.Environment.NewLine);
                sb.Append(string.Format("X509KeyUsageExtension.KeyUsages.X509KeyUsageFlags.EncipherOnly='{0}'", (usageEx.KeyUsages & X509KeyUsageFlags.EncipherOnly) != 0) + System.Environment.NewLine);
                sb.Append(string.Format("X509KeyUsageExtension.KeyUsages.X509KeyUsageFlags.KeyAgreement='{0}'", (usageEx.KeyUsages & X509KeyUsageFlags.KeyAgreement) != 0) + System.Environment.NewLine);
                sb.Append(string.Format("X509KeyUsageExtension.KeyUsages.X509KeyUsageFlags.KeyCertSign='{0}'", (usageEx.KeyUsages & X509KeyUsageFlags.KeyCertSign) != 0) + System.Environment.NewLine);
                sb.Append(string.Format("X509KeyUsageExtension.KeyUsages.X509KeyUsageFlags.KeyEncipherment='{0}'", (usageEx.KeyUsages & X509KeyUsageFlags.KeyEncipherment) != 0) + System.Environment.NewLine);
                sb.Append(string.Format("X509KeyUsageExtension.KeyUsages.X509KeyUsageFlags.None='{0}'", (usageEx.KeyUsages & X509KeyUsageFlags.None) != 0) + System.Environment.NewLine);
                sb.Append(string.Format("X509KeyUsageExtension.KeyUsages.X509KeyUsageFlags.NonRepudiation='{0}'", (usageEx.KeyUsages & X509KeyUsageFlags.NonRepudiation) != 0) + System.Environment.NewLine);
            }

            X509SubjectKeyIdentifierExtension skIdEx = ext as X509SubjectKeyIdentifierExtension;
            if (null != skIdEx)
            {
                sb.Append("-X509SubjectKeyIdentifierExtension-" + System.Environment.NewLine);
                sb.Append(string.Format("X509Extension.X509SubjectKeyIdentifierExtension.Oid='{0}'", skIdEx.Oid) + System.Environment.NewLine);
                sb.Append(string.Format("X509Extension.X509SubjectKeyIdentifierExtension.SubjectKeyIdentifier='{0}'", skIdEx.SubjectKeyIdentifier) + System.Environment.NewLine);
            }

            sb.Append(string.Format("--------X509ExtensionNumber(End):{0}", x509ExtensionCount) + System.Environment.NewLine);
        }

        private static void ShowX509Extensions(StringBuilder sb, string cert2SubjectName, X509ExtensionCollection extColl)
        {
            int x509ExtensionCount = 0;
            sb.Append(string.Format("--------ShowX509Extensions(Start):for:{0}", cert2SubjectName) + System.Environment.NewLine);
            foreach (X509Extension ext in extColl)
            {
                ShowX509Extension(sb, ++x509ExtensionCount, ext);
            }

            sb.Append(string.Format("--------ShowX509Extensions(End):for:{0}", cert2SubjectName) + System.Environment.NewLine);
        }

        private static void ShowX509Certificate2(StringBuilder sb, X509Certificate2 cert2)
        {
            if (null != cert2)
            {
                sb.Append(string.Format("X509Certificate2.SubjectName.Name='{0}'", cert2.SubjectName.Name) + System.Environment.NewLine);
                sb.Append(string.Format("X509Certificate2.Subject='{0}'", cert2.Subject) + System.Environment.NewLine);
                sb.Append(string.Format("X509Certificate2.Thumbprint='{0}'", cert2.Thumbprint) + System.Environment.NewLine);
                sb.Append(string.Format("X509Certificate2.HasPrivateKey='{0}'", cert2.HasPrivateKey) + System.Environment.NewLine);
                sb.Append(string.Format("X509Certificate2.Version='{0}'", cert2.Version) + System.Environment.NewLine);
                sb.Append(string.Format("X509Certificate2.NotBefore='{0}'", cert2.NotBefore) + System.Environment.NewLine);
                sb.Append(string.Format("X509Certificate2.NotAfter='{0}'", cert2.NotAfter) + System.Environment.NewLine);
                sb.Append(string.Format("X509Certificate2.PublicKey.Key.KeySize='{0}'", cert2.PublicKey.Key.KeySize) + System.Environment.NewLine);

                ////List<X509KeyUsageExtension> keyUsageExtensions = cert2.Extensions.OfType<X509KeyUsageExtension>().ToList();
                ////List<X509Extension> extensions = cert2.Extensions.OfType<X509Extension>().ToList();

                ShowX509Extensions(sb, cert2.Subject, cert2.Extensions);
            }
        }

        private static void ShowX509ChainElementCollection(StringBuilder sb, X509ChainElementCollection ces)
        {
            int x509ChainElementCount = 0;
            foreach (X509ChainElement ce in ces)
            {
                sb.Append(string.Empty + System.Environment.NewLine);
                sb.Append(string.Format("----X509ChainElementNumber:{0}", ++x509ChainElementCount) + System.Environment.NewLine);
                sb.Append(string.Format("X509ChainElement.Cert.SubjectName.Name='{0}'", ce.Certificate.SubjectName.Name) + System.Environment.NewLine);
                sb.Append(string.Format("X509ChainElement.Cert.Issuer='{0}'", ce.Certificate.Issuer) + System.Environment.NewLine);
                sb.Append(string.Format("X509ChainElement.Cert.Thumbprint='{0}'", ce.Certificate.Thumbprint) + System.Environment.NewLine);
                sb.Append(string.Format("X509ChainElement.Cert.HasPrivateKey='{0}'", ce.Certificate.HasPrivateKey) + System.Environment.NewLine);

                X509Certificate2 cert2 = ce.Certificate as X509Certificate2;
                ShowX509Certificate2(sb, cert2);

                ShowX509Extensions(sb, cert2.Subject, ce.Certificate.Extensions);
            }
        }

        private static void ShowX509Certificate(StringBuilder sb, X509Certificate cert)
        {
            sb.Append("-----------------------------------------------" + System.Environment.NewLine);
            sb.Append(string.Format("Cert.Subject='{0}'", cert.Subject) + System.Environment.NewLine);
            sb.Append(string.Format("Cert.Issuer='{0}'", cert.Issuer) + System.Environment.NewLine);

            sb.Append(string.Format("Cert.GetPublicKey().Length='{0}'", cert.GetPublicKey().Length) + System.Environment.NewLine);

            X509Certificate2 cert2 = cert as X509Certificate2;
            ShowX509Certificate2(sb, cert2);
        }
    }
}

@sameerfaircomment에서

"Net v4.0의 경우 ServicePoint Manager의 값을 설정하고 있습니다.(SecurityProtocolType)3072에 대한 보안 프로토콜이지만 HttpWebRequest 개체를 만들기 전에는 도움이 되었습니다."

위의 제안은 저에게 효과가 있었습니다.아래는 나를 위해 작동하는 나의 코드 라인들입니다.

var securedwebserviceurl="https://somedomain.com/service";
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11;
// Skip validation of SSL/TLS certificate
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
var httpWebRequest = (HttpWebRequest)WebRequest.Create(securedwebserviceurl);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.ProtocolVersion= HttpVersion.Version10;
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) {
string responseFromServer = streamReader.ReadToEnd();
}

이것은 저에게 효과가 있었습니다.

ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
                   | SecurityProtocolType.Tls11
                   | SecurityProtocolType.Tls12
                   | SecurityProtocolType.Ssl3;

이것은 저에게 효과가 있었습니다.

ServicePointManager.ServerCertificateValidationCallback = (snder, cert, chain, error) => true;

작동하지 않으면 다음과 같은 다른 솔루션과 함께 작동할 수 있습니다.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback = (snder, cert, chain, error) => true;

응용프로그램이 호스팅되는 서버가 TLS 1.2만 지원하는 경우 유용합니다.이 경우 오래된 보안되지 않은 프로토콜을 제거하고 TLS 1.2만 유지해야 합니다.

// Remove insecure protocols (SSL3, TLS 1.0, TLS 1.1)
ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3;
ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Tls;
ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Tls11;

// Add TLS 1.2
ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;

오류는 AppLocker가 PowerShell 스크립트를 차단할 때 나타나는 증상입니다.화이트리스트 위치에서 실행하자마자 더 이상 문제가 발생하지 않습니다.

언급URL : https://stackoverflow.com/questions/10822509/the-request-was-aborted-could-not-create-ssl-tls-secure-channel

반응형