최대 지원 서버와 통신하기위한 기본 보안 프로토콜은 무엇입니까 TLS 1.2
? 윌 .NET
기본적으로 서버 측에서 지원하는 최고 보안 프로토콜을 선택하거나 내가 명시 적으로이 코드 줄을 추가해야합니까 :
System.Net.ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
코드 변경 외에이 기본값을 변경하는 방법이 있습니까?
마지막으로 .NET 4.0
최대 TLS 1.0
? 즉, 지원하려면 클라이언트 프로젝트를 4.5로 업그레이드해야합니다 TLS 1.2
.
내 동기는 SSLv3
서버가 지원하더라도 클라이언트 측에 대한 지원을 제거 하고 (시스템 레지스트리 에서이 기능을 비활성화하는 powershell 스크립트가 있음) 서버가 지원하는 가장 높은 TLS 프로토콜을 지원하는 것입니다.
업데이트 :ServicePointManager
클래스를
보면 및에 .NET 4.0
대한 열거 값이 표시되지 않습니다 . 둘 다 기본값은 입니다. 레지스트리에서 비활성화해도이 기본값이 깨지지 않기를 바랍니다 .TLS 1.0
1.1
.NET 4.0/4.5
SecurityProtocolType.Tls|SecurityProtocolType.Ssl3
SSLv3
그러나 모든 응용 프로그램의 모든 부트 스트랩 코드로 모든 응용 프로그램 을 업그레이드 .NET 4.5
하고 명시 적으로 추가 해야한다고 결정했습니다 SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
.
이렇게하면 다양한 API 및 서비스에 대한 아웃 바운드 요청이 다운 그레이드되지 않고 SSLv3
최고 수준을 선택해야합니다 TLS
.
이 접근 방식이 합리적이거나 과도하게 들립니까? 업데이트 할 응용 프로그램이 많으며 TLS 1.0
가까운 장래에 일부 공급자가 더 이상 사용하지 않을 수 있다고 들었으므로 향후 증명하고 싶습니다 .
클라이언트가 API에 대한 아웃 바운드 요청을 할 때 레지스트리에서 SSL3을 비활성화하면 .NET 프레임 워크에도 영향을 미치나요? 기본적으로 TLS 1.1 및 1.2는 활성화되어 있지 않습니다. 레지스트리를 통해 활성화해야합니까? RE http://support.microsoft.com/kb/245030 .
약간의 조사 후에 레지스트리 설정이 IIS (서버 하위 키) 및 브라우저 (클라이언트 하위 키)에 적용되므로 영향을 미치지 않습니다.
죄송합니다.이 게시물은 여러 개의 질문으로 바뀌 었으며 “아마도”답변이 이어졌습니다.
답변
의견을 남기는 사람들 중 일부는 System.Net.ServicePointManager.SecurityProtocol
특정 값으로 설정 하면 앱이 향후 .NET 업데이트에서 기본값이 될 수있는 향후 TLS 버전을 이용할 수 없음을 의미합니다. 고정 된 프로토콜 목록을 지정하는 대신 알고 있고 관심이있는 프로토콜을 켜거나 끄고 다른 프로토콜은 그대로 둡니다.
다른 프로토콜에 영향을주지 않고 TLS 1.1 및 1.2를 켜려면
System.Net.ServicePointManager.SecurityProtocol |=
SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
사용주의 |=
다른 사람을 끄지 않고 이러한 플래그을 설정하는합니다.
다른 프로토콜에 영향을주지 않고 SSL3을 끄려면 :
System.Net.ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3;
답변
System.Net.ServicePointManager.SecurityProtocol
두 .NET 의 기본값 4.0/4.5
은 SecurityProtocolType.Tls|SecurityProtocolType.Ssl3
입니다.
.NET 4.0
최대 지원하는 TLS 1.0
동안 .NET 4.5
최대 지원하는TLS 1.2
그러나 응용 프로그램 타겟팅 .NET 4.0
은 동일한 환경에 설치된 TLS 1.2
경우 에도 계속 지원할 수 .NET 4.5
있습니다. .NET 4.5
를 .NET 4.0
대신하여 설치합니다 System.dll
.
트래픽에 설정된 올바른 보안 프로토콜을 관찰하고 프로젝트 fiddler4
에서 열거 된 값을 수동으로 설정하여이를 확인 .NET 4.0
했습니다.
ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 |
(SecurityProtocolType)768 | (SecurityProtocolType)3072;
참고:
namespace System.Net
{
[System.Flags]
public enum SecurityProtocolType
{
Ssl3 = 48,
Tls = 192,
Tls11 = 768,
Tls12 = 3072,
}
}
ONLY 만 .NET 4.0
설치된 환경에서 해킹을 시도 하면 예외가 발생합니다.
처리되지 않은 예외 : System.NotSupportedException : 요청한 보안 프로토콜이 지원되지 않습니다. System.Net.ServicePointManager.set_SecurityProtocol (SecurityProtocolType v alue)에서
그러나 향후 패치 등으로 인해 문제가 발생할 수 있으므로이 “해킹”을 권장하지 않습니다. *
따라서 지원을 제거하는 가장 좋은 방법 SSLv3
은 다음과 같습니다.
- 모든 응용 프로그램을
.NET 4.5
-
부스트 랩핑 코드에 다음을 추가하여 기본 및 향후 증거를 무시하십시오.
System.Net.ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
*이 해킹이 잘못되면 누군가가 나를 수정하지만 초기 테스트에서 작동하는 것으로 보입니다.
답변
다음 레지스트리에서 기본 동작을 무시할 수 있습니다.
Key : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319
Value: SchUseStrongCrypto
Type: REG_DWORD
Data : 1
과
Key : HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319
Value: SchUseStrongCrypto
Type: REG_DWORD
Data : 1
자세한 내용은의 구현을ServicePointManager
참조하십시오 .
답변
.reg
확장자와 다음 내용 으로 텍스트 파일을 작성하십시오 .
Windows Registry Editor Version 5.00
[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
또는 다음 소스에서 다운로드하십시오.
https://tls1test.salesforce.com/s/NET40-Enable-TLS-1_2.reg
두 번 클릭하여 설치 …
답변
TLS 1.2 만 지정하면 여전히 1.1로 다운 협상한다는 것을 알았습니다.
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
내 .net 4.5 웹 응용 프로그램의 Global.asax 시작 방법에서 이것을 지정했습니다.
답변
다음 코드는 :
- 인쇄 가능 프로토콜
- 사용 가능한 프로토콜 인쇄
- 플랫폼에서 지원하고 시작으로 활성화되지 않은 경우 TLS1.2를 활성화하십시오.
- 활성화 된 경우 SSL3 비활성화
- 최종 결과 인쇄
상수 :
- 48은 SSL3입니다
- 192는 TLS1입니다
- 768은 TLS1.1입니다
- 3072는 TLS1.2입니다
다른 프로토콜은 영향을받지 않습니다. 이는 향후 프로토콜 (Tls1.3 등)과 호환됩니다.
암호
// print initial status
Console.WriteLine("Runtime: " + System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(int).Assembly.Location).ProductVersion);
Console.WriteLine("Enabled protocols: " + ServicePointManager.SecurityProtocol);
Console.WriteLine("Available protocols: ");
Boolean platformSupportsTls12 = false;
foreach (SecurityProtocolType protocol in Enum.GetValues(typeof(SecurityProtocolType))) {
Console.WriteLine(protocol.GetHashCode());
if (protocol.GetHashCode() == 3072){
platformSupportsTls12 = true;
}
}
Console.WriteLine("Is Tls12 enabled: " + ServicePointManager.SecurityProtocol.HasFlag((SecurityProtocolType)3072));
// enable Tls12, if possible
if (!ServicePointManager.SecurityProtocol.HasFlag((SecurityProtocolType)3072)){
if (platformSupportsTls12){
Console.WriteLine("Platform supports Tls12, but it is not enabled. Enabling it now.");
ServicePointManager.SecurityProtocol |= (SecurityProtocolType)3072;
} else {
Console.WriteLine("Platform does not supports Tls12.");
}
}
// disable ssl3
if (ServicePointManager.SecurityProtocol.HasFlag(SecurityProtocolType.Ssl3)) {
Console.WriteLine("Ssl3SSL3 is enabled. Disabling it now.");
// disable SSL3. Has no negative impact if SSL3 is already disabled. The enclosing "if" if just for illustration.
System.Net.ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3;
}
Console.WriteLine("Enabled protocols: " + ServicePointManager.SecurityProtocol);
산출
Runtime: 4.7.2114.0
Enabled protocols: Ssl3, Tls
Available protocols:
0
48
192
768
3072
Is Tls12 enabled: False
Platform supports Tls12, but it is not enabled. Enabling it now.
Ssl3 is enabled. Disabling it now.
Enabled protocols: Tls, Tls12
답변
고객이 TLS를 1.0에서 1.2로 업그레이드 할 때 문제가 발생했습니다. 내 응용 프로그램은 .net framework 3.5를 사용하고 서버에서 실행됩니다. 그래서 나는 이것을 이런 식으로 고쳤다.
- 프로그램 수정
HttpWebRequest.GetResponse ()를 호출하기 전에 다음 명령을 추가하십시오.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolTypeExtensions.Tls11 | SecurityProtocolTypeExtensions.Tls12;
System.Net 및 System.Security.Authentication이라는 두 개의 새 클래스를 추가하여 확장 2 DLL
namespace System.Net
{
using System.Security.Authentication;
public static class SecurityProtocolTypeExtensions
{
public const SecurityProtocolType Tls12 = (SecurityProtocolType)SslProtocolsExtensions.Tls12;
public const SecurityProtocolType Tls11 = (SecurityProtocolType)SslProtocolsExtensions.Tls11;
public const SecurityProtocolType SystemDefault = (SecurityProtocolType)0;
}
}
namespace System.Security.Authentication
{
public static class SslProtocolsExtensions
{
public const SslProtocols Tls12 = (SslProtocols)0x00000C00;
public const SslProtocols Tls11 = (SslProtocols)0x00000300;
}
}
- Microsoft 배치 업데이트
배치 다운로드 :
- Windows 2008 R2의 경우 : windows6.1-kb3154518-x64.msu
- Windows 2012 R2의 경우 : windows8.1-kb3154520-x64.msu
일괄 다운로드 및 자세한 내용은 여기를 참조하십시오.