When using the Python Requests library how can I determine which version of TLS was used?
            Asked
            
        
        
            Active
            
        
            Viewed 8,878 times
        
    2 Answers
2
            
            
        You first need to determine SSL version to get TLS version. TLS stack will use the best version available automatically
import ssl
print ssl.OPENSSL_VERSION
'OpenSSL 1.0.1e-fips 11 Feb 2016'
Also, which version of TLS support you want depends on your SSL version. 
Check this nice way to determine TLS version using python 
        Hari_pb
        
- 7,088
 - 3
 - 45
 - 53
 
- 
                    Thank you for the comment. What if the server has a lower version than my max? Then I can't know until the request is made what version will be used. – J. Doe May 22 '18 at 17:54
 - 
                    Documentation of requests shows you can force client to use specific TLS version http://docs.python-requests.org/en/master/user/advanced/#example-specific-ssl-version – Hari_pb May 22 '18 at 17:56
 - 
                    This is an option, but I am currently trying to see if I can just log it. – J. Doe May 22 '18 at 18:06
 
2
            
            
        According to this answer there is no way to get the socket information (which holds the TLS information as far as I understand) after a requests request is executed (unless it is a streaming request). 
As Harry_pb points out, your SSL version and the server's TLS version determines the TLS version used in the connection.
The socket library docs shows how to get a socket's TLS version:
import socket
import ssl
hostname = 'www.python.org'
context = ssl.create_default_context()
with socket.create_connection((hostname, 443)) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        print(ssock.version())
        vekerdyb
        
- 1,213
 - 12
 - 26