Skip to content

Commit 48a09f6

Browse files
committed
Add get_version() to get the current SSL's version.
1 parent fdb6128 commit 48a09f6

File tree

6 files changed

+61
-5
lines changed

6 files changed

+61
-5
lines changed

lib_acl_cpp/include/acl_cpp/stream/mbedtls_io.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ class ACL_CPP_API mbedtls_io : public sslbase_io {
4949
*/
5050
bool check_peer();
5151

52+
// @override sslbase_io
53+
int get_version() const;
54+
5255
protected:
5356
~mbedtls_io();
5457

lib_acl_cpp/include/acl_cpp/stream/openssl_io.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ class ACL_CPP_API openssl_io : public sslbase_io {
2424
*/
2525
bool handshake();
2626

27+
// @override sslbase_io
28+
int get_version() const;
29+
2730
protected:
2831
~openssl_io();
2932

lib_acl_cpp/include/acl_cpp/stream/sslbase_conf.hpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@ class ACL_CPP_API ssl_sni_checker {
2121
};
2222

2323
enum {
24-
ssl_ver_3_0, // Not support.
25-
tls_ver_1_0, // Not support.
26-
tls_ver_1_1, // Not support.
27-
tls_ver_1_2,
28-
tls_ver_1_3,
24+
ssl_ver_unknown,
25+
ssl_ver_3_0, // Not support.
26+
tls_ver_1_0, // Not support.
27+
tls_ver_1_1, // Not support.
28+
tls_ver_1_2,
29+
tls_ver_1_3,
2930
};
3031

3132
class ACL_CPP_API sslbase_conf : public noncopyable {

lib_acl_cpp/include/acl_cpp/stream/sslbase_io.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ class ACL_CPP_API sslbase_io : public stream_hook {
2828
*/
2929
virtual bool handshake() = 0;
3030

31+
/**
32+
* 获得当前连接的 SSL 版本,定义参考 sslbase_conf.hpp 中.
33+
* @return 0 表示无法获得
34+
*/
35+
virtual int get_version() const {
36+
return 0;
37+
}
38+
3139
/**
3240
* 设置套接字为阻塞模式/非阻塞模式
3341
* @param yes {bool} 当为 false 时则设为阻塞模式,否则设为非阻塞模式

lib_acl_cpp/src/stream/mbedtls_io.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,25 @@ bool mbedtls_io::handshake()
357357
#endif
358358
}
359359

360+
int mbedtls_io::get_version() const
361+
{
362+
# if MBEDTLS_VERSION_MAJOR==3
363+
if (ssl_ == NULL) {
364+
return ssl_ver_unknown;
365+
}
366+
367+
mbedtls_ssl_protocol_version v = mbedtls_ssl_get_version_number(
368+
(const mbedtls_ssl_context*) ssl_);
369+
if (v == MBEDTLS_SSL_VERSION_TLS1_2) {
370+
return tls_ver_1_2;
371+
}
372+
if (v == MBEDTLS_SSL_VERSION_TLS1_3) {
373+
return tls_ver_1_3;
374+
}
375+
#endif
376+
return ssl_ver_unknown;
377+
}
378+
360379
bool mbedtls_io::check_peer()
361380
{
362381
#ifdef HAS_MBEDTLS

lib_acl_cpp/src/stream/openssl_io.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ static ssl_read_fn __ssl_read;
8585
typedef int (*ssl_write_fn)(SSL*, const void*, int);
8686
static ssl_write_fn __ssl_write;
8787

88+
# define SSL_VERSION "SSL_version"
89+
typedef int (*ssl_version_fn)(const SSL*);
90+
static ssl_version_fn __ssl_version;
91+
8892
extern ACL_DLL_HANDLE __openssl_ssl_dll; // defined in openssl_conf.cpp
8993
extern ACL_DLL_HANDLE __openssl_crypto_dll; // defined in openssl_conf.cpp
9094

@@ -128,6 +132,7 @@ bool openssl_load_io(void)
128132
LOAD(SSL_SHUTDOWN, ssl_shutdown_fn, __ssl_shutdown);
129133
LOAD(SSL_READ, ssl_read_fn, __ssl_read);
130134
LOAD(SSL_WRITE, ssl_write_fn, __ssl_write);
135+
LOAD(SSL_VERSION, ssl_version_fn, __ssl_version);
131136

132137
return true;
133138
}
@@ -150,6 +155,7 @@ bool openssl_load_io(void)
150155
# define __ssl_shutdown SSL_shutdown
151156
# define __ssl_read SSL_read
152157
# define __ssl_write SSL_write
158+
# define __ssl_version SSL_version
153159

154160
#endif // !HAS_OPENSSL_DLL
155161

@@ -277,6 +283,22 @@ bool openssl_io::open(ACL_VSTREAM* s)
277283
#endif
278284
}
279285

286+
int openssl_io::get_version() const {
287+
#ifdef HAS_OPENSSL
288+
if (ssl_ == NULL) {
289+
return ssl_ver_unknown;
290+
}
291+
int v = __ssl_version(ssl_);
292+
if (v == TLS1_2_VERSION) {
293+
return tls_ver_1_2;
294+
}
295+
if (v == TLS1_3_VERSION) {
296+
return tls_ver_1_3;
297+
}
298+
#endif
299+
return ssl_ver_unknown;
300+
}
301+
280302
bool openssl_io::handshake()
281303
{
282304
if (handshake_ok_) {

0 commit comments

Comments
 (0)