[英]MQTT TLS session resumption in C
我正在使用Eclipse Paho MQTT C客戶端使用openssl通過TLS連接到mosquitto代理。 這是我的代碼的一部分:
MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
MQTTClient_message pubmsg = MQTTClient_message_initializer;
MQTTClient_SSLOptions sslOptions = MQTTClient_SSLOptions_initializer;
MQTTClient_deliveryToken token;
int rc;
MQTTClient_create(&client, ADDRESS, CLIENTID,
MQTTCLIENT_PERSISTENCE_NONE, NULL);
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
/* TLS */
sslOptions.enableServerCertAuth = 0;
sslOptions.trustStore = "ca_rsp.crt";
conn_opts.ssl = &sslOptions;
if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
{
printf("Failed to connect, return code %d\n", rc);
exit(EXIT_FAILURE);
}
實際上,每次我重新連接到代理時,客戶端都會進行一次完整的握手。 我想使用TLS會話恢復來減少開銷。 我已經在網上搜索過,但是還沒有找到如何以簡單的方式實現該功能的示例。
有什么建議嗎?
謝謝
這是最近在mosquitto dev郵件列表上出現的,這里https://dev.eclipse.org/mhonarc/lists/mosquitto-dev/msg01606.html
以下摘錄內容暗示着按原樣可能尚無法實現。
如何使用Mosquitto / OpenSSL C API在MQTT C客戶端中利用會話票證?
暫時不是,這需要更多的代碼更改-看來我們需要使用SSL_set_session()將保存的會話應用於客戶端,並需要使用SSL_CTX_sess_set_new_cb()來保存會話。
有什么辦法可以在客戶端上保留會話票證,以便它們在重新啟動后仍然有效?
通過上述更改,可以。
我認為這是由PAHO員工做出的一個不錯的決定,他們將干凈的會話標志與會話恢復鏈接在一起,因為github中提供的mosquitto客戶端缺少會話恢復的內置功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.