Просмотр исходного кода

add:添加服务器证书校验

Dozingfiretruck 3 лет назад
Родитель
Сommit
dfce9f83d7

+ 10 - 6
components/network/libemqtt/luat_lib_mqtt.c

@@ -231,9 +231,10 @@ mqtt客户端创建
 @string 服务器地址,可以是域名, 也可以是ip
 @int  	端口号
 @bool  	是否为ssl加密连接,默认不加密
-@string 证书数据,可选
-@string 证书密钥,可选
-@string 证书密码,可选
+@string 服务器ca证书数据
+@string 客户端ca证书数据
+@string 客户端私钥加密数据
+@string 客户端私钥口令数据
 @return userdata 若成功会返回mqtt客户端实例,否则返回nil
 @usage
 -- 普通TCP链接
@@ -296,13 +297,16 @@ static int l_mqtt_create(lua_State *L) {
 	
 	if (opts.is_tls){
 		if (lua_isstring(L, 5)){
-			opts.client_cert = luaL_checklstring(L, 5, &opts.client_cert_len);
+			opts.server_cert = luaL_checklstring(L, 5, &opts.server_cert_len);
 		}
 		if (lua_isstring(L, 6)){
-			opts.client_key = luaL_checklstring(L, 6, &opts.client_key_len);
+			opts.client_cert = luaL_checklstring(L, 6, &opts.client_cert_len);
 		}
 		if (lua_isstring(L, 7)){
-			opts.client_password = luaL_checklstring(L, 7, &opts.client_password_len);
+			opts.client_key = luaL_checklstring(L, 7, &opts.client_key_len);
+		}
+		if (lua_isstring(L, 8)){
+			opts.client_password = luaL_checklstring(L, 8, &opts.client_password_len);
 		}
 	}
 	

+ 2 - 0
components/network/libemqtt/luat_mqtt.h

@@ -38,6 +38,8 @@ typedef struct luat_mqtt_connopts
     const char* host;
     uint16_t port;
     uint16_t is_tls;
+    const char* server_cert;
+    size_t server_cert_len;
     const char* client_cert;
     size_t client_cert_len;
     const char* client_key;

+ 5 - 1
components/network/libemqtt/luat_mqtt_client.c

@@ -67,8 +67,12 @@ int luat_mqtt_set_connopts(luat_mqtt_ctrl_t *mqtt_ctrl, luat_mqtt_connopts_t *op
     memcpy(mqtt_ctrl->host, opts->host, strlen(opts->host) + 1);
     mqtt_ctrl->remote_port = opts->port;
 	if (opts->is_tls){
-		network_init_tls(mqtt_ctrl->netc, opts->client_cert?2:0);
+		network_init_tls(mqtt_ctrl->netc, (opts->server_cert || opts->client_cert)?2:0);
+		if (opts->server_cert){
+			network_set_server_cert(mqtt_ctrl->netc, (const unsigned char *)opts->server_cert, opts->server_cert_len);
+		}
 		if (opts->client_cert){
+			
 			network_set_client_cert(mqtt_ctrl->netc, (const unsigned char*)opts->client_cert, opts->client_cert_len,
 					(const unsigned char*)opts->client_key, opts->client_key_len,
 					(const unsigned char*)opts->client_password, opts->client_password_len);