TLS 1.2를 사용하도록 .NET 웹 서비스 업데이트


99

TLS 1.2를 사용하여 내 .NET 웹 서비스에서 TLS 1.2를 강제 할 다른 웹 서비스로 연결해야합니다. .NET 4.6은 기본적으로 TLS 1.2를 사용하므로 가장 쉬운 솔루션처럼 들리는 리소스를 찾았습니다. 서버에서 .NET 프레임 워크를 업데이트하고 다시 시작했습니다. IIS에서 .NET 4.6을 사용하여 응용 프로그램 풀을 만들려고했지만 4.0이 유일한 옵션이었습니다. 그런 다음 4.6이 .NET 4.0에 대한 "현재 위치"업데이트이기 때문에 여전히 4.0이라고 표시되는 것을 발견했습니다. 그래서 나는 아마 끝났다고 생각했습니다. 그러나 관련없는 이유로 얻은 오류 페이지에 Microsoft .NET Framework Version:4.0.30319성공적으로 업그레이드하지 않은 것 같습니다. 내 응용 프로그램 풀이 .NET 4.6을 사용하고 있는지 확인하는 방법에 대한 포인터 또는 더 일반적으로 TLS 1.2를 사용하는 방법에 대한 포인터가 있습니까?


4
TLS12가 서버에서 활성화되어야한다고 생각합니다. support.quovadisglobal.com/kb/a433/…
lcryder

4
왜 반대 투표입니까?
nasch

답변:


143

실제로 TLS 1.2를 허용하기 위해 .NET 웹 서비스를 4.6으로 업그레이드했습니다.

Artem이 말하는 것은 우리가 한 첫 번째 단계였습니다. 웹 서비스의 프레임 워크를 4.6으로 다시 컴파일하고 TLS 1.2를 활성화하도록 레지스트리 키를 변경했지만 작동하지 않았습니다. 연결은 여전히 ​​TLS 1.0에있었습니다. 또한 시스템에서 SLL 3.0, TLS 1.0 또는 TLS 1.1을 허용하지 않기를 원했습니다. 다른 웹 서비스에서이를 사용할 수 있습니다. 레지스트리에서 변경 사항을 롤백했습니다.

우리는 실제로 Web.Config 파일을 변경하여 IIS에 "야, 4.6에서 실행 해주세요"라고 알려주었습니다.

다음은 web.config + .NET 4.6의 재 컴파일에 추가 된 변경 사항입니다.

<system.web>
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->

    <!--Added this httpRuntime -->
    <httpRuntime targetFramework="4.6" />

    <authentication mode="Windows"/>
    <pages controlRenderingCompatibilityVersion="4.0"/>
</system.web>

IIS는 이제 4.6 (명시 적으로 말함)에서 웹 서비스를 실행하고 4.6은 기본적으로 TLS 1.2를 사용하기 때문에 연결이 TLS 1.2로 변경되었습니다.


3
연구에 사용한 문서는 다음과 같습니다. HTTPRuntime , RenderingCompatibility
Etienne Faucher

1
나는 그것을 알아 냈다-나는 HTTPS를 요청하지 않았다. 그것을 고친 후 작동했습니다.
nasch

3
우리의 경우 컴파일을 4.6으로 변경하고 httpRuntime 4.6을 추가하는 것으로 충분했습니다. 솔루션 덕분입니다!
krilovich

2
이것은 완전히 정답입니다. 최근에 이것을 겪었습니다. : 여기에 대한 블로그 게시물의 blog.thelevelup.com/pci-security-is-your-restaurant-ready :이 수행하는 GitHub의 프로젝트 github.com/TheLevelUp/pos-tls-patcher을
user24601


90

웹 서비스 클라이언트를 인스턴스화하기 전에 다음 코드를 추가하십시오.

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

또는 TLS 1.1 및 이전 버전과의 역 호환성을 위해 :

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; 

2
예, 이미 수행하고 있지만 오류 메시지는 여전히 .NET 4.0을 나타냅니다.
nasch

13
이것이 CLR 버전입니다. .Net CLR에는 2.0과 4.0의 두 가지 버전이 있습니다. IIS에서는 Framework 버전이 아닌 CLR 버전을 지정합니다. IIS는 그것에 대해 신경 쓰지 않기 때문에 .Net 4.6을 알려주지 않습니다. 4.6을 사용하여 컴파일했다면 4.6을 사용하는 것입니다.
Amy

3
TLS 1.2 이후 .NET 4.5에서 지원됩니다
지우베르투 알렉상드르

6
이 경우 | =는 =보다 우수합니다. 바이너리 플래그이므로 불필요하게 다른 모든 것을 덮어 쓰지 마십시오.
Izzy

2
@JohnWu-위의 Izzy의 의견을 참고하십시오. 코드는 HTTPS 리소스에 연결할 때 명시 적으로 TLS 1.2 만 사용하도록 .NET에 지시합니다. 즉, 서버에 TLS 1.1 만있는 경우 TLS 1.2 만 사용하기 때문에 코드가 연결을 중지합니다. 클라이언트와 서버가 사용할 프로토콜을 협상 할 때 | =를 사용하여 "TLS 1.2도 옵션으로 사용하십시오"라고 코드에 알려야합니다.
Don Cheadle 2018

27

4.5 이전의 .Net을 사용하는 경우 열거 형에 Tls12가 없으므로 여기에 상태가 명시 적으로 언급 됩니다.

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

17

필요한 세 단계 :

  1. 레지스트리에 Enabled=0DisabledByDefault=1(전체 경로는 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols) 를 추가하여 SSL2.0, TLS1.0, TLS1.1을 서버 시스템에서 금지됨으로 명시 적으로 표시합니다 . 자세한 내용은 화면 참조 기재

  2. TLS1.21의 단계에 따라 명시 적으로 활성화 합니다 . Enabled=1DisabledByDefault=0각각을 사용 합니다.

참고 : 서버 버전 확인 : 프로토콜을 Windows Server 2003지원하지 않습니다.TLS 1.2

  1. TLS1.2위에서 제안한 @John Wu와 같이 앱 수준에서만 활성화 합니다.

    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

이 가이드가 도움이되기를 바랍니다.

@Subbu가 언급했듯이 업데이트 : 공식 가이드



안녕하세요 @Artem을 추가 한 후 서버를 다시 시작해야합니까?
Simba 2018

@Simba 당신은 아마 이것을 해결했지만 지금은 서버를 다시 시작할 필요가 없습니다.
Matt N.

5

나를 위해 일했습니다.

1 단계 : 응용 프로그램 서버의 https://www.microsoft.com/en-us/download/details.aspx?id=48137 에서 웹 설치 관리자 exe를 다운로드하여 설치했습니다 . 설치가 완료된 후 애플리케이션 서버를 재부팅했습니다.

2 단계 : web.config에 아래 변경 사항 추가

<system.web>
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->
    <!--Added this httpRuntime -->
    <httpRuntime targetFramework="4.6" />
</system.web>

3 단계 : 1 단계와 2 단계를 완료 한 후 " WebForms UnobtrusiveValidationMode에는 'jquery'에 대한 ScriptResourceMapping이 필요합니다. jquery (대소 문자 구분)라는 ScriptResourceMapping을 추가하십시오."라는 오류가 발생했습니다.이 오류를 해결하려면 아래 키를 appsettings에 추가했습니다. 내 web.config 파일에서

<appSettings>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

httpRuntime 대상 프레임 워크를 추가하면 저에게 효과적이었습니다.
Mark Redman

0

PowerBI Embedded에는 TLS 1.2가 필요합니다.

위의 Etienne Faucher 의 답변 이 솔루션입니다. 위 답변에 대한 빠른 링크 ... 위 답변에 대한 빠른 링크 ... ( https://stackoverflow.com/a/45442874 )

PowerBI에 TLS 1.2가 필요함 2020 년 6 월- 이것이 답입니다 -프레임 워크에서 찾고있는 기본 TLS 1.2 동작을 강제하기 위해 IIS 런타임을 최대 4.6까지 강제하는 것을 고려하십시오. 위의 답변은 구성 변경 전용 솔루션을 제공합니다.

증상 : 강제 종료 거부 됨 Microsoft PowerBI Embedded에 대한 TCP / IP 연결이 시스템 전체에 갑자기 나타납니다.

이러한 PowerBI 호출은 방화벽이 연결을 차단하는 것처럼 Hard TCP / IP Close 오류와 함께 작동을 중지합니다. 일반적으로 인증 단계가 작동합니다. 특정 작업 영역에 대한 서비스를 방문하고 실패한 경우 ID를보고합니다.

TLS 1.2 필수에 대한 Microsoft PowerBI의 2020 년 메모입니다.

PowerBIClient

이 문제를 보여주는 방법

GetReportsInGroupAsync GetReportsInGroupAsAdminAsync GetReportsAsync GetReportsAsAdminAsync Microsoft.PowerBI.Api HttpClientHandler 강제 TLS 1.1 TLS 1.2

사람들이 이것을 찾는 데 도움이되는 오류 용어 검색 : System.Net.Http.HttpRequestException : 요청을 보내는 동안 오류가 발생했습니다. System.Net.WebException : 기본 연결이 닫혔습니다. 보내기에서 예기치 않은 오류가 발생했습니다. System.IO.IOException : 전송 연결에서 데이터를 읽을 수 없습니다. 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.