mbedTLS移植到stm32上以支持mqtt证书加密

花了两星期的时间完成移植和调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.遇到问题一定要深入去查看代码,到底是为何失败



你可能感兴趣的:(stm32,SSL,MQTT)