From 7738a150d04eeeb221a5d67c2c636df51107673f Mon Sep 17 00:00:00 2001 From: LuckyPowerfuljjj <119035666+LuckyPowerfuljjj@users.noreply.github.com> Date: Fri, 7 Apr 2023 20:57:24 +0800 Subject: [PATCH] demos_tlcp_client_connection (#1440) * Create tlcp_client_connect.c * Create rootcacert.pem * Create clientcert.pem * Create clientkey.pem * Create url_parser.h * Delete clientcert.pem * Delete clientkey.pem * Delete rootcacert.pem * Delete tlcp_client_connect.c * Delete url_parser.h * Create tlcp_client_rootcacert.pem * Create tlcp_client_cert.pem * Create tlcp_client_key.pem * Create demo_tlcp_client_connect.c * Delete tlcp_client_cert.pem * Delete tlcp_client_key.pem * Delete tlcp_client_rootcacert.pem * Update demo_tlcp_client_connect.c --- demos/src/demo_tlcp_client_connect.c | 91 ++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 demos/src/demo_tlcp_client_connect.c diff --git a/demos/src/demo_tlcp_client_connect.c b/demos/src/demo_tlcp_client_connect.c new file mode 100644 index 00000000..1fc27b86 --- /dev/null +++ b/demos/src/demo_tlcp_client_connect.c @@ -0,0 +1,91 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define TLS_DEFAULT_VERIFY_DEPTH 4 + +int main(int argc, char *argv[]) +{ + int ret = -1; + char *prog = argv[0]; + const int cipher = TLS_cipher_ecc_sm4_cbc_sm3; + struct hostent *hp; + struct sockaddr_in server; + int sock; + TLS_CTX ctx; + TLS_CONNECT conn; + char request[1024]; + uint8_t buf[16800]; + char *p; + size_t len; + + //证书和密钥使用/demos/scripts/tlcp_server.sh生成 + char* cacertfile="rootcacert.pem"; + char* certfile="clientcert.pem"; + char* keyfile="clientkey.pem"; + char *pass = "1234"; + if(argc < 3) + { + fprintf(stderr,"usage %s ip port \n",argv[0]); + return -1; + } + server.sin_family = AF_INET; + server.sin_port = htons(atoi(argv[2])); + server.sin_addr.s_addr = inet_addr(argv[1]); + if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { + perror("socket"); + printf("创建socket错误"); + goto end; + } + if (connect(sock, (struct sockaddr *)&server , sizeof(server)) < 0) {//去连接服务器 + perror("connect"); + printf("socket连接失败"); + goto end; + } + + + memset(&ctx, 0, sizeof(ctx)); + memset(&conn, 0, sizeof(conn)); + + tls_ctx_init(&ctx, TLS_protocol_tlcp, TLS_client_mode); + tls_ctx_set_cipher_suites(&ctx, &cipher, 1); + + if (cacertfile) { + if (tls_ctx_set_ca_certificates(&ctx, cacertfile, TLS_DEFAULT_VERIFY_DEPTH) != 1) { + fprintf(stderr, "%s: context init error\n", prog); + goto end; + } + } + if (certfile) { + if (tls_ctx_set_certificate_and_key(&ctx, certfile, keyfile, pass) != 1) { + fprintf(stderr, "%s: context init error\n", prog); + goto end; + } + } + + tls_init(&conn, &ctx); + tls_set_socket(&conn, sock); + + + if(tls_do_handshake(&conn) == 1) + { + return 0; + } + else {//握手 + fprintf(stderr, "%s: error\n", prog); + goto end; + } +end: + close(sock); + tls_ctx_cleanup(&ctx); + tls_cleanup(&conn); + return 0; +}