2017-10-18 13 views
3

에 응답 할 때 SSL 채널을 생성하는 데 실패 그리고 내가 자바와를 사용하여 동일한 요청을 시도하고있다서버가 TLS 내가 HTTPS GET 요청이 클라이언트 인증서 인증 사용을 할 노력하고있어 1.1

The request was aborted: Could not create SSL/TLS secure channel. 

실패 가을에 나는 방법을 이해, 어떤 이유로 해당 서버가 TLS 1.2을 지원하지 않는

*** ClientHello, TLSv1.2 
main, WRITE: TLSv1.2 Handshake, length = 185 

.... 

*** ServerHello, TLSv1.1 
main, READ: TLSv1.1 Handshake, length = 3339 

을하지만, 클라이언트는 그것을 받아들이는 단순히 : 그것은 잘 작동, 나는 (단지 흥미로운 부분 제거) 자바 로그에 다음과 같은 참조 TLS 1.1로 되돌아갑니다.

나는 .NET 너무 잘 작동

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11; 

을 설정합니다. 이제 .NET이 Java처럼 TLS 1.1로 되돌아 가지 않는 이유에 대해 (실제로 TLS 1.2를 시도하고 예외를 잡아 내고 TLS 1.1을 시도하지 않고) 대체 방식을 사용할 수 있습니까?

+1

설정 SecurityProtocol에 SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12? – Evk

+0

그런데이 코드를 실행하는 컴퓨터에 설치된 Windows 버전은 무엇입니까? – Evk

+0

Windows 10 15063.608 – Giedrius

답변

2

ServicePointManager.SecurityProtocol의 설명에서이 디폴트 값은 목적에,이 속성에 대해 나열되어

주 적혀있다. 보안 환경이 지속적으로 변경되고 알려진 프로토콜 의 약점을 피하기 위해 기본 프로토콜과 보호 수준이 시간이 지남에 따라 변경됩니다. 기본값은 개별 시스템 구성에 따라 다르며 소프트웨어가 설치되어 있고 적용된 패치는 입니다.

특정 보호 수준을 사용하거나 기본적으로 주어진 보안 수준을 사용한다는 가정하에 코드가 암시 적으로 에 의존해서는 안됩니다. 앱이 특정 보안 수준 의 사용에 의존하는 경우 해당 수준을 명시 적으로 지정해야하며 다음에 실제로 연결된 연결에서 사용 중인지 확인하십시오. 또한 위협을 완화하기 위해 변경 사항이 인 경우 변경 사항이 적용되는 경우가 많으므로 프로토콜이 강력하게 지원되도록 프로토콜을 지원해야합니다.

동안 .NET 4.7에이 속성의 기본값은 SystemDefault (source)와 SystemDefault는 "기본 프로토콜의 목록에 대해 OS에게"(및 TLS 1.1 및 TLS 1.2 enabled입니다 윈도우 10)을 의미해야한다 -이 값은 레지스트리 키와 같은 여러 외부 소스의 영향을받을 수 있으며 설치된 소프트웨어 나 적용된 패치로도 위와 같이 나타납니다. 우리가 코멘트에서 설명했듯이 Ssl3은 안전하지 않고 사용하지 않아야하기 때문에 어떤 이유에서든 Ssl3 | Tls을 기본적으로 가지고 있습니다.

그래서 (이런 경우와 미래에) 문제를 해결하기 위해 - 여러 클라이언트 컴퓨터에 당신의 applicaiton을 게시 특히 당신이 필요 항상 목록 프로토콜을 기본 설정은 신뢰할 수 없습니다 때문에 :

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; 
+0

또한 Windows 10에서 .net 4.7을 사용하는 것과 동일한 문제가 발생합니다. https://stackoverflow.com/questions/44751179/tls-1-2-not-negotiated-in-net-4-7-without -explicit-servicepointmanager-security/44765698 # 44765698 – Giedrius

+0

@Giedrius 참으로. 그러나 이것은 일관성이없는 것으로 보인다. 예를 들어, 당신과 같은 Windows 버전을 가지고 있지만 .NET 4.7에서 기본적으로 SystemDefault가 있습니다. – Evk