You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetX Duo发送HTTPS POST请求遇NX_SECURE_TLS_UNSUPPORTED_TLS_VERSION错误求助

NetX Duo HTTPS POST请求出现NX_SECURE_TLS_UNSUPPORTED_TLS_VERSION(0x110)错误

使用NetX Duo发送HTTPS POST请求时,触发TLS错误NX_SECURE_TLS_UNSUPPORTED_TLS_VERSION(错误码0x110,含义为收到的TLS版本不受支持)。已确认:

  • DNS解析正常,服务器IP地址正确
  • 目标服务器通过Cloudflare隧道访问,支持TLS v1.2
  • 所用Cloudflare CA证书在MQTTS服务中可正常使用
  • 更换其他安全相关函数后问题仍存在

tls_setup_callback函数

static NX_SECURE_X509_CERT trusted_certificate;
static NX_SECURE_X509_CERT remote_certificate, remote_issuer;
static UCHAR remote_cert_buffer[4096];
static UCHAR remote_issuer_buffer[4096];

static UINT tls_setup_callback(NX_WEB_HTTP_CLIENT *client_ptr, NX_SECURE_TLS_SESSION *tls_session)
{
UINT status;
    /* Initialize and create TLS session.  */
    status = nx_secure_tls_session_create(tls_session, &nx_crypto_tls_ciphers, crypto_metadata_client, sizeof(crypto_metadata_client));
    
    /* Check status.  */
    if (status)
    {
        return(status);
    }

    /* Allocate space for packet reassembly.  */
    status = nx_secure_tls_session_packet_buffer_set(&(client_ptr -> nx_web_http_client_tls_session), tls_packet_buffer, sizeof(tls_packet_buffer));

    /* Check status.  */
    if (status)
    {
        return(status);
    }

    /* Add a CA Certificate to our trusted store for verifying incoming server certificates.  */
    nx_secure_x509_certificate_initialize(&trusted_certificate, (UCHAR*)origin_ca_rsa_root_der, origin_ca_rsa_root_der_len, NX_NULL, 0, NULL, 0, NX_SECURE_X509_KEY_TYPE_NONE);
    nx_secure_tls_trusted_certificate_add(&(client_ptr -> nx_web_http_client_tls_session), &trusted_certificate);

    /* Need to allocate space for the certificate coming in from the remote host.  */
    nx_secure_tls_remote_certificate_allocate(&(client_ptr -> nx_web_http_client_tls_session), &remote_certificate, remote_cert_buffer, sizeof(remote_cert_buffer));
    nx_secure_tls_remote_certificate_allocate(&(client_ptr -> nx_web_http_client_tls_session), &remote_issuer, remote_issuer_buffer, sizeof(remote_issuer_buffer));

    return(NX_SUCCESS);
}

http_request函数

static NX_WEB_HTTP_CLIENT  my_client;
static UINT                error_counter;

void http_request()
{
  NX_PACKET       *recv_packet;
  NX_PACKET       *send_packet;
  UINT            i;
  UINT            status;
  UINT            chunked_size = 0;

  static char pkt[] = {
    0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 /* AAAAAAAAAA */
  };

  /* Create an HTTP client instance.  */
  status = nx_web_http_client_create(&my_client, "HTTP Client", &EthIP, &EthPool, 1536);

  #define SERVER_DNS_NAME "locall.ugurtumer.tech"
  NXD_ADDRESS server_ip_address;
  server_ip_address.nxd_ip_version = 4;
  status = nx_dns_host_by_name_get(&dns_client, (UCHAR *)SERVER_DNS_NAME,
                                &server_ip_address.nxd_ip_address.v4, DEFAULT_TIMEOUT);
  if (status != NX_SUCCESS)
  {
    printf("DNS lookup failed\n");
    Error_Handler();
  }
  printf(
    "Server IP: %lu.%lu.%lu.%lu\n", 
    (server_ip_address.nxd_ip_address.v4 >> 24) & 0xFF, 
    (server_ip_address.nxd_ip_address.v4 >> 16) & 0xFF, 
    (server_ip_address.nxd_ip_address.v4 >> 8) & 0xFF, 
    server_ip_address.nxd_ip_address.v4 & 0xFF
  );

  nx_web_http_client_response_header_callback_set(&my_client, http_response_callback);

  status = nx_web_http_client_post_secure_start(&my_client, &server_ip_address, NX_WEB_HTTPS_SERVER_PORT,
                                        "/index.htm",
                                        "locall.ugurtumer.tech",
                                        NX_NULL, NX_NULL, sizeof(pkt), tls_setup_callback, NX_WAIT_FOREVER);

  printf("Post secure start status: 0x%02X\n", status); // ERROR IS HERE. i got 0x110

  /* Allocate a packet.  */
  status = nx_web_http_client_request_packet_allocate(&my_client, &send_packet, NX_WAIT_FOREVER);
  /* Write data into the packet payload.  */
  nx_packet_data_append(send_packet, pkt, sizeof(pkt), &EthPool, NX_WAIT_FOREVER);

  status = nx_web_http_client_put_packet(&my_client, send_packet, 1 * NX_IP_PERIODIC_RATE);
  if (status)
  {
      nx_packet_release(send_packet);
      error_counter++;
  }

  while (1)
  {

      /* Get response from server.  */
      status = nx_web_http_client_response_body_get(&my_client, &recv_packet, NX_WAIT_FOREVER);

      if (status)
      {
          break;
      }
      else
      {
          chunked_size += recv_packet -> nx_packet_length;
          nx_packet_release(recv_packet);
      }
  }
  printf("Received response body:\n");
  printf("%.*s\n", recv_packet->nx_packet_length, recv_packet->nx_packet_prepend_ptr);

  nx_packet_release(recv_packet);
  nx_packet_release(send_packet);

  status = nx_web_http_client_delete(&my_client);
  if (status)
      error_counter++;
}

补充说明

  • DNS解析无错误,服务器IP地址正确;
  • 目标服务器支持TLS v1.2,通过CF隧道访问;
  • 更换其他安全相关函数后问题依旧。

内容的提问来源于stack exchange,提问作者Uğur Tümer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:59:51