J'utilise TIdSSLIOHandlerSocketOpenSSL pour ouvrir une connexion TLS/SSL. Je veux actuellement supporter tls 1.0 à 1.2.Comment déterminer quel protocole TLS/SSL a été négocié lors de l'utilisation de sslvSSLv23?
J'initialise le IOHandler comme ceci.
TIdSSLIOHandlerSocketOpenSSL(FSocket.IOHandler).SSLOptions.SSLVersions := [sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1];
Une fois la connexion est faite, comment puis-je le protocole a été négocié pour la connexion? (Les deux pour assurer la configuration du client et du serveur de test est correcte, et éventuellement à des fins de statistiques).
J'ai vérifié SSLContext.Method
après la connexion, mais il montre toujours sslvSSLv23
après la connexion. SSLContext.SSLVersions
montre [sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1]
.
Alors, comment puis-je obtenir cette information?
'Cipher.Version' ne semble pas contenir le protocole en cours d'utilisation (ou je manque sérieusement quelque chose). Si, par exemple, je force à utiliser uniquement TLS1.1 sur le client, 'Cipher.Version' renvoie 'TLSv1/SSLv3'. Je vais regarder dans SSL_get_version. –
SSL_get_version m'a donné l'information que je cherchais. Merci. –
@KenBourassa hmm, 'SSL_CIPHER_get_version()' n'a pas l'habitude d'être ainsi, mais il semble que la [documentation] (https://www.openssl.org/docs/manmaster/man3/SSL_CIPHER_get_version.html) a changé depuis que je l'ai vu pour la dernière fois, le comportement a apparemment changé avec le temps. Dans ce cas, respectez 'SSL_get_version()'. Je pourrais intégrer une nouvelle propriété pour cela. –