2017-12-13 2 views
0

인사말 SO brain trust.명시 적으로 설정하지 않은 경우 Indy TIdSSLIOHandlerSocketOpenSSL에 사용되는 기본 프로토콜은 무엇입니까?

Indy 10 TIdSSLIOHanderSocketOpenSSL에 명시 적으로 프로토콜이 설정되지 않은 경우 사용되는 기본 프로토콜은 무엇입니까?

오늘 프로토콜을 명시 적으로 설정하지 않은 일부 코드에서 실행되었습니다.

HTTPReq := TIdHTTP.Create(nil); 
    IdSSLIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil); 
    if Assigned(HTTPReq) then begin 
    HTTPReq.ReadTimeout := 180000;//set read timeout to 3 minutes 
    HTTPReq.Request.ContentType := 'text/xml;charset=UTF-8'; 
    HTTPReq.Request.Accept := 'text/xml'; 
    HTTPReq.Request.AcceptEncoding := 'gzip,deflate'; 
    HTTPReq.HTTPOptions := []; 
    HTTPReq.IOHandler := IdSSLIOHandler; 
    end; 

참고 사용되는 프로토콜에 대한 명시적인 설정이 없습니다. 아무것도 설정하지 않은 경우 기본적으로 사용되는 것은 무엇입니까? 내 관심사는 TLS 1.0이나 급하게 사용되지 않는 것을 사용하고 있다는 것입니다.

델파이 10.2 도쿄 업데이트 1 및 인디 10.6.2.5366 최신 1.0.2n 열기 SLL DLL을

건배를 사용!

TJ

답변

5

기본값은 실제로 TLS 1.0입니다. SSLOptions.MethodSSLOptions.SSLVersions 속성의 선언을 보면 알 수 있습니다. 이들은 모두 단위의 DEF_SSLVERSIONDEF_SSLVERSIONS 상수에 지정된대로 sslvTLSv1으로 설정됩니다.

+0

레미! 빠른주의 - TLS 1.1과 TLS 1.2가 둘 다 버전으로 추가되면 TLS 1.2가 작동하지 않으면 구성 요소는 먼저 TLS 1.2를 협상하고 TLS 1.1을 협상하려고 시도 할 것인가? –

+0

번호 OpenSSL은 TLS 1.0이 지원되는 가장 낮은 버전이고 TLS 1.2가 지원되는 가장 높은 버전임을 지정하는 단일 핸드 셰이크를 보냅니다. 상대방은 핸드 셰이 킹을 계속할 특정 버전을 결정합니다. 해당 협상에 실패하면 연결이 끊어지고 오류가 발생합니다. Indy는 다른 버전을 자동으로 다시 시도하지 않습니다 (즉, Indy의 코드에서 할 일 목록 항목). 직접 코드에서 직접 처리해야합니다. –

+0

[sslvTLSv1_1, sslvTLSv1_2]의 Method ofsslvSSLv23 및 SSLVersions를 설정하면 TLS 1.1 및 TLS 1.2를 가장 높게 지정하고 서버는 사용할 옵션을 선택할 수 있습니까? (저는이 시나리오에서 클라이언트입니다) TLS 1.1 또는 TLS 1.2가 아닌 경우 연결을 설정하고 싶지 않습니다. –

관련 문제