TIdSSLIOHandlerSocketOpenSSL을 사용하여 TLS/SSL 연결을 엽니 다. 나는 현재 1.0에서 1.2까지의 tls를 지원하고자한다.sslvSSLv23을 사용할 때 협상 된 TLS/SSL 프로토콜을 확인하는 방법은 무엇입니까?
이렇게 IOHandler를 초기화합니다.
TIdSSLIOHandlerSocketOpenSSL(FSocket.IOHandler).SSLOptions.SSLVersions := [sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1];
연결이 완료되면 어떻게 연결을 위해 협상 된 프로토콜을 얻을 수 있습니까? (클라이언트와 테스트 서버의 구성을 모두 보장하기 위해, 그리고 결국 통계 목적으로).
연결 후 SSLContext.Method
을 확인했지만 연결 후 여전히 sslvSSLv23
이 표시됩니다. SSLContext.SSLVersions
은 [sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1]
입니다.
어떻게 정보를 얻을 수 있습니까?
'Cipher.Version'은 현재 프로토콜을 사용하고 있지 않은 것으로 보입니다. (또는 뭔가 심각하게 누락되었습니다.) 예를 들어 클라이언트에서 TLS1.1 만 사용하면 'Cipher.Version'은'TLSv1/SSLv3 '을 반환합니다. SSL_get_version을 살펴 보겠습니다. –
SSL_get_version이 내가 원하는 정보를 제공했습니다. 감사. –
@KenBourassa 흠,'SSL_CIPHER_get_version()'은 그렇게 사용되지 않았지만 [documentation] (https://www.openssl.org/docs/manmaster/man3/SSL_CIPHER_get_version.html)과 같이 변경되었습니다. 내가 마지막으로 본 이후로, 그 행동은 시간이 지남에 따라 분명히 변했습니다. 이 경우'SSL_get_version()'을 사용하십시오. 나는 그것을 위해 새로운 속성을 통합 할 수 있습니다. –