This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3235SF:安全套接字问题

Guru**** 1624225 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1384031/cc3235sf-secure-socket-problem

器件型号:CC3235SF

工具与软件:

您好、 TI 工程师

    、SDK 版本是6.10.00.05 μ s 使用 安全套接字 API 连接 服务器。 TCP 已连接 但 SSL 握手。

    这是我的 安全套接字代码  

	ssl_fd = sl_Socket(AF_INET,SOCK_STREAM,0);
		if(ssl_fd<0)
		{
			goto tcp_error;
		}

		SlSockSecureMethod_t method;
		_i16 status;
		method.SecureMethod = SL_SO_SEC_METHOD_SSLv3_TLSV1_2;
		status = sl_SetSockOpt(ssl_fd,SL_SOL_SOCKET,SL_SO_SECMETHOD,&method,sizeof(SlSockSecureMethod_t));
		SYS_LOGW(SSL_TAG,"sl_SetSockOpt SSL status=%d",status);
		SlSockSecureMask_t mask;
		mask.SecureMask = 0xFFFFF;
		status = sl_SetSockOpt(ssl_fd,SL_SOL_SOCKET,SL_SO_SECURE_MASK,&mask,sizeof(SlSockSecureMask_t));
		SYS_LOGW(SSL_TAG,"sl_SetSockOpt SSL mask=%d",status);
		status = sl_SetSockOpt(ssl_fd,SL_SOL_SOCKET,SL_SO_SECURE_FILES_CA_FILE_NAME,"ssl_ca",strlen("ssl_ca"));	
		_u32 dummyVal;
		status = sl_SetSockOpt(ssl_fd,SL_SOL_SOCKET, SL_SO_SECURE_DISABLE_CERTIFICATE_STORE,&dummyVal,sizeof(dummyVal));

		ret = sl_Connect(ssl_fd,(struct sockaddr *)&dest, sizeof(dest));
		if(ret!=0)
		{
			SYS_LOGE(SSL_TAG,"connect false,ret is %d,errno is %d\n",ret,errno);
			sl_Close(ssl_fd);
			sleep(1);
			goto create_socket;
		}
			
		SYS_LOGI(SSL_TAG,"tcp client connect success\n");
		while(1)
	    {
	        ret = sl_Recv( ssl_fd, ssl_recv_buf, MAX_SSL_MSG ,0);

	        if( ret < 0 )
	        {
	            SYS_LOGE(SSL_TAG,"failed\n  ! mbedtls_ssl_read returned %d,errno=%d\r\n", ret ,errno);
	            break;
	        }

	        if( ret == 0 )
	        {
	            SYS_LOGE(SSL_TAG,"server discon" );
	            break;
	        }
			if(ssl_param.ssl_recv_deal)
	        	ssl_param.ssl_recv_deal(ssl_recv_buf,ret);
	    }
	sl_Close(ssl_fd);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Lemon:

    是的、这是预期行为。 因为您创建了纯 TCP 而非安全套接字。 对于 TLS 套接字、您需要创建带安全标志(SL_SEC_SOCKET)的套接字、例如:

    sl_Socket(SL_AF_INET, SL_SOCK_STREAM, SL_SEC_SOCKET);

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢回复!

        这对我来说是一个错误。 现在测试成功。 它是否支持不验证证书?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    如果您不想验证证书,可以在 sl_Connect () API 返回 SL_ERROR_BSD_ESECSNOVERIFY 时继续连接。

    1月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好   

      我测试连接 AWS 、需要验证服务器和客户端。  认证正常、 其他设备可以连接 AWS。 但现在连接 false ,sl_Connect 返回-688。   

    		SlSockSecureMethod_t method;
    		_i16 status;
    		method.SecureMethod = SL_SO_SEC_METHOD_SSLv3_TLSV1_2;
    		status = sl_SetSockOpt(ssl_fd,SL_SOL_SOCKET,SL_SO_SECMETHOD,&method,sizeof(SlSockSecureMethod_t));
    		SYS_LOGW(SSL_TAG,"sl_SetSockOpt SSL status=%d",status);
    		SlSockSecureMask_t mask;
    		mask.SecureMask = 0xFFFFF;
    		status = sl_SetSockOpt(ssl_fd,SL_SOL_SOCKET,SL_SO_SECURE_MASK,&mask,sizeof(SlSockSecureMask_t));
    		SYS_LOGW(SSL_TAG,"sl_SetSockOpt SSL mask=%d",status);
    
    		if(ssl_param.mode>=SSL_MODE_CHECK_SERVER)
    		{
    			status = sl_SetSockOpt(ssl_fd,SL_SOL_SOCKET,SL_SO_SECURE_FILES_CA_FILE_NAME,"ssl_ca",strlen("ssl_ca"));
    			SYS_LOGW(SSL_TAG,"sl_SetSockOpt SSL SL_SO_SECURE_FILES_CA_FILE_NAME=%d",status);
    		}
    		if(ssl_param.mode==SSL_MODE_CHECK_CLIENT)
    		{
    			status = sl_SetSockOpt(ssl_fd,SL_SOL_SOCKET,SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME,"ssl_client_cert",strlen("ssl_client_cert"));
    			SYS_LOGW(SSL_TAG,"sl_SetSockOpt SSL SL_SO_SECURE_FILES_CERTIFICATE_FILE_NAME=%d",status);
    			status = sl_SetSockOpt(ssl_fd,SL_SOL_SOCKET,SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME,"ssl_client_key",strlen("ssl_client_key"));
    			SYS_LOGW(SSL_TAG,"sl_SetSockOpt SSL SL_SO_SECURE_FILES_PRIVATE_KEY_FILE_NAME=%d",status);
    		}
    		_u32 dummyVal;
    		status = sl_SetSockOpt(ssl_fd,SL_SOL_SOCKET, SL_SO_SECURE_DISABLE_CERTIFICATE_STORE,&dummyVal,sizeof(dummyVal));
    		
    		ret = sl_Connect(ssl_fd,(struct sockaddr *)&dest, sizeof(dest));
    		if(ret!=0)
    		{
    			if(ssl_param.mode == SSL_MODE_NOCHECK_SERVER && ret==SL_ERROR_BSD_ESECSNOVERIFY )
    			{
    				SYS_LOGE(SSL_TAG,"ssl connected but no vertify server");
    			}
    			else
    			{
    				SYS_LOGE(SSL_TAG,"connect false,ret is %d,errno is %d\n",ret,errno);
    				sl_Close(ssl_fd);
    				sleep(1);
    				goto create_socket;
    			}
    		}
      

    需要何种配置?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    对于此类身份验证、您需要设置和上载证书、私钥和 CA 文件。 在 AWS 中使用自签名证书可能会有问题。

    有关 AWS 连接问题的更多详细信息、请在 e2e 论坛上搜索"SL_ERROR_BSD_ESEC_ASN_NO_SIDER_E AWS"或"-688 AWS"。 您会发现有多个与此主题相关的线程。

    1月