花了两星期的时间完成移植和调bug,下面就说一下几个关键的地方
1.
mbedtls_ssl_conf_authmode( &conf, MBEDTLS_SSL_VERIFY_REQUIRED );
第二个参数不要用MBEDTLS_SSL_VERIFY_OPTIONAL,不然验证通不过的时候也能用,意义不大
2.
mbedtls_ssl_set_hostname( &ssl, "MQTT" )
第二个参数一定要和生成证书时所指定的CN字段一样
3.
mbedtls_ssl_conf_max_version(&conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1);
mbedtls_ssl_conf_min_version(&conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1);
这两条语句有可能会用到
4.
const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_default =
{
#if defined(MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES)
/* Allow SHA-1 (weak, but still safe in controlled environments) */
MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA1 ) |
#endif
/* Only SHA-2 hashes */
MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA224 ) |
MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA256 ) |
MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA384 ) |
MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA1 ) |
MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA512 ),
0xFFFFFFF, /* Any PK alg */
0xFFFFFFF, /* Any curve */
1024,
};
证书的密钥长度。
mbedTLS默认用配置的参数是2048,上面我改成的1024和我的相匹配。
另外自己增加了
MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA1 )
这是我分析内部比较证书时所执行的代码得出的结论,可能是加密算法。当然你定义下面内容也可以
MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES
5.实现收发数据的接口时一定要注意采用阻塞方式还是超时方式,不然可能会死锁
6.遇到问题一定要深入去查看代码,到底是为何失败