Skip to content

Commit 50309bd

Browse files
author
zhengshuxin
committed
SSL version can be set and get.
1 parent 48a09f6 commit 50309bd

File tree

9 files changed

+55
-11
lines changed

9 files changed

+55
-11
lines changed

lib_acl_cpp/include/acl_cpp/stream/mbedtls_io.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class ACL_CPP_API mbedtls_io : public sslbase_io {
4949
*/
5050
bool check_peer();
5151

52-
// @override sslbase_io
52+
// @override sslbase_io, 目前仅支持mbedtls3.x.x系列.
5353
int get_version() const;
5454

5555
protected:

lib_acl_cpp/include/acl_cpp/stream/sslbase_conf.hpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace acl {
66

7+
class string;
78
class sslbase_io;
89

910
class ACL_CPP_API ssl_sni_checker {
@@ -53,6 +54,27 @@ class ACL_CPP_API sslbase_conf : public noncopyable {
5354
return false;
5455
}
5556

57+
/**
58+
* 将版本号转为字符串
59+
* @param v {int}
60+
* @return {const char*}
61+
*/
62+
static const char* version_s(int v) {
63+
switch (v) {
64+
case ssl_ver_3_0:
65+
return "ssl_ver_3_0";
66+
case tls_ver_1_0:
67+
return "tls_ver_1_0";
68+
case tls_ver_1_1:
69+
return "tls_ver_1_1";
70+
case tls_ver_1_2:
71+
return "tls_ver_1_2";
72+
case tls_ver_1_3:
73+
return "tls_ver_1_3";
74+
default:
75+
return "ssl_ver_unknown";
76+
}
77+
}
5678
//public:
5779
/**
5880
* 加载 CA 根证书(每个配置实例只需调用一次本方法)

lib_acl_cpp/include/acl_cpp/stream/sslbase_io.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ class ACL_CPP_API sslbase_io : public stream_hook {
3636
return 0;
3737
}
3838

39+
/**
40+
* 获得当前连接的 SSL 版本,以字符串表示
41+
* @return {const char*} 返回非空版本字符串
42+
*/
43+
const char* get_version_s() const;
44+
3945
/**
4046
* 设置套接字为阻塞模式/非阻塞模式
4147
* @param yes {bool} 当为 false 时则设为阻塞模式,否则设为非阻塞模式

lib_acl_cpp/samples/ssl/https_server/http_servlet.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ bool http_servlet::doPost(acl::HttpServletRequest& req,
6767
acl::string buf;
6868
body.build_xml(buf);
6969

70-
printf(">>>buf: %s\r\n", buf.c_str());
70+
//printf(">>>buf: %s\r\n", buf.c_str());
7171

7272
bool keep_alive = req.isKeepAlive();
7373

@@ -79,6 +79,6 @@ bool http_servlet::doPost(acl::HttpServletRequest& req,
7979
// 发送 http 响应体,因为设置了 chunk 传输模式,所以需要多调用一次
8080
// res.write 且两个参数均为 0 以表示 chunk 传输数据结束
8181
bool ret = res.write(buf) && res.write(NULL, 0) && keep_alive;
82-
printf(">>>write %s\r\n", ret ? "ok":"error");
82+
//printf(">>>write %s\r\n", ret ? "ok":"error");
8383
return ret;
8484
}

lib_acl_cpp/samples/ssl/https_server/master_service.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,7 @@ static acl::sslbase_io* setup_ssl(acl::socket_stream& conn, acl::sslbase_conf& c
9393
return NULL;
9494
}
9595

96-
logger("handshake_ok");
97-
96+
//logger("handshake ok, ssl version: %s", ssl->get_version_s());
9897
return ssl;
9998
}
10099

@@ -119,8 +118,7 @@ bool master_service::thread_on_read(acl::socket_stream* conn)
119118

120119
bool master_service::thread_on_accept(acl::socket_stream* conn)
121120
{
122-
logger("connect from %s, fd: %d", conn->get_peer(true),
123-
conn->sock_handle());
121+
//logger("connect from %s, fd: %d", conn->get_peer(true), conn->sock_handle());
124122

125123
conn->set_rw_timeout(var_cfg_io_timeout);
126124

@@ -139,8 +137,7 @@ bool master_service::thread_on_timeout(acl::socket_stream* conn)
139137

140138
void master_service::thread_on_close(acl::socket_stream* conn)
141139
{
142-
logger("disconnect from %s, fd: %d", conn->get_peer(),
143-
conn->sock_handle());
140+
//logger("disconnect from %s, fd: %d", conn->get_peer(), conn->sock_handle());
144141

145142
http_servlet* servlet = (http_servlet*) conn->get_ctx();
146143
delete servlet;
@@ -194,6 +191,8 @@ void master_service::proc_on_init()
194191
exit (1);
195192
}
196193

194+
//var_cfg_tls_1_3_force = 1;
195+
197196
if (var_cfg_tls_1_2_force) {
198197
conf_->set_version(acl::tls_ver_1_2, acl::tls_ver_1_2);
199198
} else if (var_cfg_tls_1_3_force) {

lib_acl_cpp/samples/ssl/ssl_client2/ssl_client.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,14 @@ static void usage(const char* procname)
9292
int main(int argc, char* argv[])
9393
{
9494
int ch, max_loop = 10, max_connections = 10;
95-
acl::string addr("127.0.0.1:9001"), libpath("../libpolarssl.so");
95+
acl::string addr("127.0.0.1:9800");
96+
#ifdef __linux__
97+
acl::string libpath("../libmbedcrypto.so;../libmbedx509.so;../libmbedtls.so");
98+
#elif defined(APPLE)
99+
acl::string libpath("../libmbedcrypto.dylib;../libmbedx509.dylib;../libmbedtls.dylib");
100+
#else
101+
# error "Not supported!"
102+
#endif
96103

97104
acl::acl_cpp_init();
98105

@@ -139,6 +146,8 @@ int main(int argc, char* argv[])
139146
__ssl_conf = new acl::polarssl_conf;
140147
}
141148

149+
//__ssl_conf->set_version(acl::tls_ver_1_3, acl::tls_ver_1_3);
150+
142151
if (max_connections <= 0) {
143152
max_connections = 100;
144153
}

lib_acl_cpp/samples/ssl/ssl_client2/valgrind.sh

100644100755
File mode changed.

lib_acl_cpp/samples/ssl/ssl_server2/master_service.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ static acl::sslbase_io* setup_ssl(acl::socket_stream& conn,
7575
return NULL;
7676
}
7777

78-
logger("setup hook ok, tid: %lu", acl::thread::thread_self());
78+
logger("setup hook ok, tid: %lu, ssl version: %s",
79+
acl::thread::thread_self(), ssl->get_version_s());
7980
return ssl;
8081
}
8182

@@ -199,6 +200,8 @@ void master_service::proc_on_init()
199200
conf_ = new acl::polarssl_conf();
200201
}
201202

203+
//conf_->set_version(acl::tls_ver_1_3, acl::tls_ver_1_3);
204+
202205
// 允许服务端的 SSL 会话缓存功能
203206
conf_->enable_cache(var_cfg_session_cache);
204207

lib_acl_cpp/src/stream/sslbase_io.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ sslbase_io::~sslbase_io()
2727
delete refers_;
2828
}
2929

30+
const char* sslbase_io::get_version_s() const
31+
{
32+
return sslbase_conf::version_s(this->get_version());
33+
}
34+
3035
void sslbase_io::set_non_blocking(bool yes)
3136
{
3237
// 此处仅设置非阻塞 IO 标志位,至于套接字是否被设置了非阻塞模式

0 commit comments

Comments
 (0)