return( ret );
}
------------------------------------
// 处理SSL握手的单个步骤
int mbedtls_ssl_handshake_step( mbedtls_ssl_context *ssl )
{
int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE;
return( ret );
}
------------------------------------
// SSL客户端的单个阶段的握手处理
int mbedtls_ssl_handshake_client_step( mbedtls_ssl_context *ssl )
{
int ret = 0;
/* Change state now, so that it is right in mbedtls_ssl_read_record(), used
* by DTLS for dropping out-of-sequence ChangeCipherSpec records */
#if defined(MBEDTLS_SSL_SESSION_TICKETS)
if( ssl->state == MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC &&
ssl->handshake->new_session_ticket != 0 )
{
ssl->state = MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET;
}
#endif
case MBEDTLS_SSL_CLIENT_KEY_EXCHANGE:
//发送客户端的KEY协商报文,主要包括KEY协商的协议如DH, 和协商的材料。
ret = ssl_write_client_key_exchange( ssl );
break;
case MBEDTLS_SSL_CERTIFICATE_VERIFY:
ret = ssl_write_certificate_verify( ssl );
break;
case MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC:
// 客户端发送changecipherspec报文,表明接下来开始使用协商计算出来的key,进行加密通信
ret = mbedtls_ssl_write_change_cipher_spec( ssl );
break;
case MBEDTLS_SSL_CLIENT_FINISHED:
// 客户端发送finished报文,表明握手结束。消息包括客户端交换过的重要信息的MAC,此消息是被加密的
// 重要信息包括客户端发送的随机数,KEY交换的材料等, 这个报文的意义在于之前协商的报文虽然是明文,
// 但确是不能被篡改的,所以需要一个握手最后过程的完整性保护。
ret = mbedtls_ssl_write_finished( ssl );
break;
return( ret );
} 4.2、AliOS Things Mbed TLS AliOS Things Mbed TLS是在开源的Mbed TLS 2.16.0 基础上,适配到AliOS Things。 秉承的宗旨是尽量少改动,API与开源的完全保持一致,方便开发者使用和移植上面的应用。相关代码路径在components/security/mbedtls。
AliOS Things Mbed TLS组件在开源的基础上主要有以下几点修改: