programing

.NET Framework 4.0의 TLS 1.2

css3 2023. 6. 29. 20:19

.NET Framework 4.0의 TLS 1.2

Windows Server 2008 R2 서버에서 12개의 .NET Framework 4.0 WebForms 응용 프로그램을 실행하고 있는데 TLS 1.0 이하를 사용하지 않도록 설정해야 합니다.이렇게 하면 모든 보안 연결이 실패하고 TLS 1.0을 다시 사용하도록 설정해야 했습니다.프레임워크 4.0 환경에서 TLS 1.2를 사용할 수 있는 방법이 있습니까?혹시 제가 뭔가를 놓치고 있는 것은 아닐까요?

또한 현재 사용 중인 CMS 버전의 제한으로 인해 Framework를 업그레이드할 수 없습니다.

속성을 추가할 수 없는 경우system.net학급 도서관

그런 다음 Global.asax 파일을 추가합니다.

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; //TLS 1.2
ServicePointManager.SecurityProtocol = (SecurityProtocolType)768; //TLS 1.1

그리고 시작 라인에서 함수로 사용할 수 있습니다.

ServicePointManager.SecurityProtocol = (SecurityProtocolType)768 | (SecurityProtocolType)3072;

그리고, 그것은 유용하게 사용되고 있습니다.STRIPETLS 1.1, TLS 1.2만 지원하는 결제 게이트웨이입니다.

편집: .NET 4.5에 대한 질문이 서버에 설치되어 있는지 여부를 확인한 후...여기 스크린샷이 있습니다.Registry운영 서버에서:

.NET Framework 4.0만 설치되어 있습니다.

registry

레지스트리를 다음과 같이 변경하면 작동합니다.

1.) .NET Framework 강력한 암호화 레지스트리 키

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

2.) 보안 채널 TLS 1.2 레지스트리 키

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

이를 변경할 수 있는 유일한 방법은 코드에서 직접 변경하는 것입니다.

설정한 앱의 맨 처음에

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

당신은 그것을 포함해야 합니다.system.net학급

우리도 tls1을 차단해야 해서 웹 서비스를 부르기 전에 했습니다.

따라서 .NET 4.5를 설치해야 합니다.자세한 내용은 웹 페이지를 참조하십시오.요점은 .NET 4.5를 설치한 후 4.0 앱이 4.5 System.dll을 사용한다는 것입니다.다음 두 가지 방법으로 TLS 1.2를 실행할 수 있습니다.

  • 응용 프로그램 시작 부분에 다음 코드를 추가합니다.ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
  • 레지스트리 키 설정HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319: SchUseStrongCrypto로.DWORD 1

두 가지 가능한 시나리오가 있습니다.

  1. 응용 프로그램이 .net 프레임워크 4.5 이하에서 실행되고 프로덕션에 새 코드를 쉽게 배포할 수 있는 경우 아래 솔루션을 사용할 수 있습니다.

    API 호출을 하기 전에 아래 줄의 코드를 추가할 수 있습니다.

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5
    ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // .NET 4.0
    
  2. 새 코드를 배포할 수 없고 프로덕션에 있는 동일한 코드로 문제를 해결하려면 두 가지 옵션이 있습니다.

옵션 1:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001


그런 다음 확장자가 있는 파일을 만듭니다..reg설치합니다.

참고: 이 설정은 레지스트리 수준에서 적용되며 해당 컴퓨터에 있는 모든 응용 프로그램에 적용되며 단일 응용 프로그램으로 제한하려면 다음을 사용할 수 있습니다.Option 2

옵션 2: 구성 파일의 일부 구성 설정을 변경하여 이 작업을 수행할 수 있습니다.구성 파일에 둘 중 하나를 추가할 수 있습니다.

<runtime>
    <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false"/>
</runtime>

또는

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false"
</runtime>

저는 VB로 코드를 작성하고 Application_Start의 Global.asax.vb 파일에 다음 행을 추가할 수 있었습니다.

ServicePointManager.SecurityProtocol = CType(3072, SecurityProtocolType)    'TLS 1.2

윈도우즈에 설치된 .NET Framework 4.0에서도 동일한 문제가 발생합니다.
그리고 .NET Framework 4.6.2를 설치하여 이 문제를 해결했습니다.
또는 최신 패키지를 다운로드하여 사용해 보십시오.

언급URL : https://stackoverflow.com/questions/33761919/tls-1-2-in-net-framework-4-0