环境
-
openssl 交叉编译
./config no-asm shared no-async --prefix=/usr/local/openssl/openssl-1.0.2u/build --cross-compile-prefix=arm-linux-gnueabihf-
(提示要:make depend先执行该命令)
make && make install -
paho mqtt-c 交叉编译
cmake -DPAHO_WITH_SSL=TRUE -DPAHO_BUILD_STATIC=TRUE -DOPENSSL_ROOT_DIR=/usr/local/openssl/openssl-1.0.2u -DCMAKE_INSTALL_PREFIX=/usr/local/paho-mqtt/paho.mqtt.c-1.3.13/build -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc
make && make install
以上编译完成后将libcrypto.so、libssl.so、libpaho-mqtt3cs.a拷贝至工程目录,最后还要注意的是需要拷贝libatomic.so动态库到开发板中。
设置服务器地址
sprintf(address,"ssl://%s:%s",server,port);
初始化mqtt ssl配置
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
MQTTClient_SSLOptions ssl_opts = MQTTClient_SSLOptions_initializer;
双向认证
ssl_opts.keyStore = clientCrt; //客户端证书路径
ssl_opts.trustStore = CAFile; //ca证书路径
ssl_opts.privateKey = clientKey; //客户端密钥路径
ssl_opts.privateKeyPassword = mqtt_tls_port->clientKeyPasswd; //密钥,如果有客户端密钥路径该项可为空
ssl_opts.sslVersion = MQTT_SSL_VERSION_DEFAULT;
conn_opts.ssl = &ssl_opts;
单向认证
ssl_opts.trustStore = CAFile; //ca证书路径
ssl_opts.sslVersion = MQTT_SSL_VERSION_DEFAULT;
conn_opts.ssl = &ssl_opts;
加密不认证
ssl_opts.enableServerCertAuth = 0;
ssl_opts.sslVersion = MQTT_SSL_VERSION_DEFAULT;
conn_opts.ssl = &ssl_opts;