运行mbedtls自带Demo ssl_client的记录
概述:
运行mbedtls自带 ssl demo的记录;
操作过程:
编译Demo,请看我专栏中的相关文章
先运行服务端程序,运行ssl_server.exe,运行结果如下:
mbedtls-3.2.1\mbedtls-3.2.1\programs\ssl> .\ssl_server.exe. Seeding the random number generator... ok. Loading the server cert. and key... ok. Bind on https://localhost:4433/ ... ok. Setting up the SSL data.... ok. Waiting for a remote connection ... ok. Performing the SSL/TLS handshake... ok< Read from client: 18 bytes readGET / HTTP/1.0> Write to client: 156 bytes writtenHTTP/1.0 200 OK
Content-Type: text/html<h2>mbed TLS Test Server</h2>
<p>Successful connection using: TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256</p>. Closing the connection... ok. Waiting for a remote connection ... ok. Performing the SSL/TLS handshake... ok< Read from client: 18 bytes readGET / HTTP/1.0> Write to client: 156 bytes writtenHTTP/1.0 200 OK
Content-Type: text/html<h2>mbed TLS Test Server</h2>
<p>Successful connection using: TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256</p>. Closing the connection... ok. Waiting for a remote connection ...
再运行服务端,ssl_client1.exe, 运行结果如下;
mbedtls-3.2.1\mbedtls-3.2.1\programs\ssl> .\ssl_client1.exe. Seeding the random number generator... ok. Loading the CA root certificate ... ok (0 skipped). Connecting to tcp/localhost/4433... ok. Setting up the SSL/TLS structure... ok. Performing the SSL/TLS handshake...ssl_client.c:0261: got supported group(001d)
ssl_client.c:0261: got supported group(0017)
ssl_client.c:0261: got supported group(0018)
ssl_client.c:0261: got supported group(001e)
ssl_client.c:0261: got supported group(0019)
ssl_client.c:0261: got supported group(001a)
ssl_client.c:0261: got supported group(001b)
ssl_client.c:0261: got supported group(001c)ok. Verifying peer X.509 certificate... ok> Write to server: 18 bytes writtenGET / HTTP/1.0< Read from server: 156 bytes readHTTP/1.0 200 OK
Content-Type: text/html<h2>mbed TLS Test Server</h2>
<p>Successful connection using: TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256</p>
ssl_msg.c:3900: mbedtls_ssl_handle_message_type() returned -30848 (-0x7880)
ssl_msg.c:5472: mbedtls_ssl_read_record() returned -30848 (-0x7880)
PS D:\Drive\SynologyDrive\NFC\16_开源项目\mbedtls-3.2.1\mbedtls-3.2.1\programs\ssl> .\ssl_client1.exe. Seeding the random number generator... ok. Loading the CA root certificate ... ok (0 skipped). Connecting to tcp/localhost/4433... ok. Setting up the SSL/TLS structure... ok. Performing the SSL/TLS handshake...ssl_client.c:0261: got supported group(001d)
ssl_client.c:0261: got supported group(0017)
ssl_client.c:0261: got supported group(0018)
ssl_client.c:0261: got supported group(001e)
ssl_client.c:0261: got supported group(0019)
ssl_client.c:0261: got supported group(001a)
ssl_client.c:0261: got supported group(001b)
ssl_client.c:0261: got supported group(001c)ok. Verifying peer X.509 certificate... ok> Write to server: 18 bytes writtenGET / HTTP/1.0< Read from server: 156 bytes readHTTP/1.0 200 OK
Content-Type: text/html<h2>mbed TLS Test Server</h2>
<p>Successful connection using: TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256</p>
ssl_msg.c:3900: mbedtls_ssl_handle_message_type() returned -30848 (-
抓取SSL过程分析:
使用wireshark 工具,可以实现抓包分析,抓取Demo的数据进行分析:
从抓包中可以看出,在进行完TCP连接后,进行了SSL连接过程:
Client Hello
Server Hell
Certification
Server key exchange
Server Hello done
Client Key exchange
Handshake 等操作
Demo代码:
贴出 client 端代码
int main( void )
{int ret = 1, len;int exit_code = MBEDTLS_EXIT_FAILURE;mbedtls_net_context server_fd;uint32_t flags;unsigned char buf[1024];const char *pers = "ssl_client1";mbedtls_entropy_context entropy;mbedtls_ctr_drbg_context ctr_drbg;mbedtls_ssl_context ssl;mbedtls_ssl_config conf;mbedtls_x509_crt cacert;#if defined(MBEDTLS_DEBUG_C)mbedtls_debug_set_threshold( DEBUG_LEVEL );
#endif/** 0. Initialize the RNG and the session data*/mbedtls_net_init( &server_fd );mbedtls_ssl_init( &ssl );mbedtls_ssl_config_init( &conf );mbedtls_x509_crt_init( &cacert );mbedtls_ctr_drbg_init( &ctr_drbg );mbedtls_printf( "\n . Seeding the random number generator..." );fflush( stdout );mbedtls_entropy_init( &entropy );if( ( ret = mbedtls_ctr_drbg_seed( &ctr_drbg, mbedtls_entropy_func, &entropy,(const unsigned char *) pers,strlen( pers ) ) ) != 0 ){mbedtls_printf( " failed\n ! mbedtls_ctr_drbg_seed returned %d\n", ret );goto exit;}mbedtls_printf( " ok\n" );/** 0. Initialize certificates*/mbedtls_printf( " . Loading the CA root certificate ..." );fflush( stdout );ret = mbedtls_x509_crt_parse( &cacert, (const unsigned char *) mbedtls_test_cas_pem,mbedtls_test_cas_pem_len );if( ret < 0 ){mbedtls_printf( " failed\n ! mbedtls_x509_crt_parse returned -0x%x\n\n", (unsigned int) -ret );goto exit;}mbedtls_printf( " ok (%d skipped)\n", ret );/** 1. Start the connection*/mbedtls_printf( " . Connecting to tcp/%s/%s...", SERVER_NAME, SERVER_PORT );fflush( stdout );if( ( ret = mbedtls_net_connect( &server_fd, SERVER_NAME,SERVER_PORT, MBEDTLS_NET_PROTO_TCP ) ) != 0 ){mbedtls_printf( " failed\n ! mbedtls_net_connect returned %d\n\n", ret );goto exit;}mbedtls_printf( " ok\n" );/** 2. Setup stuff*/mbedtls_printf( " . Setting up the SSL/TLS structure..." );fflush( stdout );if( ( ret = mbedtls_ssl_config_defaults( &conf,MBEDTLS_SSL_IS_CLIENT,MBEDTLS_SSL_TRANSPORT_STREAM,MBEDTLS_SSL_PRESET_DEFAULT ) ) != 0 ){mbedtls_printf( " failed\n ! mbedtls_ssl_config_defaults returned %d\n\n", ret );goto exit;}mbedtls_printf( " ok\n" );/* OPTIONAL is not optimal for security,* but makes interop easier in this simplified example */mbedtls_ssl_conf_authmode( &conf, MBEDTLS_SSL_VERIFY_OPTIONAL );mbedtls_ssl_conf_ca_chain( &conf, &cacert, NULL );mbedtls_ssl_conf_rng( &conf, mbedtls_ctr_drbg_random, &ctr_drbg );mbedtls_ssl_conf_dbg( &conf, my_debug, stdout );if( ( ret = mbedtls_ssl_setup( &ssl, &conf ) ) != 0 ){mbedtls_printf( " failed\n ! mbedtls_ssl_setup returned %d\n\n", ret );goto exit;}if( ( ret = mbedtls_ssl_set_hostname( &ssl, SERVER_NAME ) ) != 0 ){mbedtls_printf( " failed\n ! mbedtls_ssl_set_hostname returned %d\n\n", ret );goto exit;}mbedtls_ssl_set_bio( &ssl, &server_fd, mbedtls_net_send, mbedtls_net_recv, NULL );/** 4. Handshake*/mbedtls_printf( " . Performing the SSL/TLS handshake..." );fflush( stdout );while( ( ret = mbedtls_ssl_handshake( &ssl ) ) != 0 ){if( ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE ){mbedtls_printf( " failed\n ! mbedtls_ssl_handshake returned -0x%x\n\n", (unsigned int) -ret );goto exit;}}mbedtls_printf( " ok\n" );/** 5. Verify the server certificate*/mbedtls_printf( " . Verifying peer X.509 certificate..." );/* In real life, we probably want to bail out when ret != 0 */if( ( flags = mbedtls_ssl_get_verify_result( &ssl ) ) != 0 ){
#if !defined(MBEDTLS_X509_REMOVE_INFO)char vrfy_buf[512];
#endifmbedtls_printf( " failed\n" );#if !defined(MBEDTLS_X509_REMOVE_INFO)mbedtls_x509_crt_verify_info( vrfy_buf, sizeof( vrfy_buf ), " ! ", flags );mbedtls_printf( "%s\n", vrfy_buf );
#endif}elsembedtls_printf( " ok\n" );/** 3. Write the GET request*/mbedtls_printf( " > Write to server:" );fflush( stdout );len = sprintf( (char *) buf, GET_REQUEST );while( ( ret = mbedtls_ssl_write( &ssl, buf, len ) ) <= 0 ){if( ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE ){mbedtls_printf( " failed\n ! mbedtls_ssl_write returned %d\n\n", ret );goto exit;}}len = ret;mbedtls_printf( " %d bytes written\n\n%s", len, (char *) buf );/** 7. Read the HTTP response*/mbedtls_printf( " < Read from server:" );fflush( stdout );do{len = sizeof( buf ) - 1;memset( buf, 0, sizeof( buf ) );ret = mbedtls_ssl_read( &ssl, buf, len );if( ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE )continue;if( ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY )break;if( ret < 0 ){mbedtls_printf( "failed\n ! mbedtls_ssl_read returned %d\n\n", ret );break;}if( ret == 0 ){mbedtls_printf( "\n\nEOF\n\n" );break;}len = ret;mbedtls_printf( " %d bytes read\n\n%s", len, (char *) buf );}while( 1 );mbedtls_ssl_close_notify( &ssl );exit_code = MBEDTLS_EXIT_SUCCESS;exit:#ifdef MBEDTLS_ERROR_Cif( exit_code != MBEDTLS_EXIT_SUCCESS ){char error_buf[100];mbedtls_strerror( ret, error_buf, 100 );mbedtls_printf("Last error was: %d - %s\n\n", ret, error_buf );}
#endifmbedtls_net_free( &server_fd );mbedtls_x509_crt_free( &cacert );mbedtls_ssl_free( &ssl );mbedtls_ssl_config_free( &conf );mbedtls_ctr_drbg_free( &ctr_drbg );mbedtls_entropy_free( &entropy );mbedtls_exit( exit_code );
}
Demo代码比较简单,
运行mbedtls自带Demo ssl_client的记录相关推荐
- linux运行wordcount,Ubuntu16.04上运行Hadoop2.7.3自带example wordCount摸索记录
首先最最重要的写在最前面,也是我觉得个人踩得最深的坑,刚接触hadoop的人,缺少的认识: hdfs的理解:它是一个文件系统,跟linux的文件系统是类似的结构,拥有类似的语法,大概就是你在linux ...
- LeadTools Android 入门教学——运行第一个Android Demo
LeadTools 有很多Windows平台下的Demo,非常全面,但是目前开发手机应用的趋势也越来越明显,LeadTools也给大家提供了10个Android的Demo,这篇文章将会教你如何运行第一 ...
- Mediapipe 在RK3399PRO上的初探(一)(编译、运行CPU和GPU Demo, RK OpenglES 填坑,编译bazel)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 BlogID=103 环境说明 Ubuntu 18 ...
- 运行caffe自带的mnist实例教程
运行caffe自带的mnist实例教程 1.先进入caffe文件目录,(指令:cd ./caffe),再用data/mnist下的get_mnist.sh下載MNIST数据集,代码如下: cd ./c ...
- 全方位了解超宽带信号高速采集记录回放系统
超宽带高速记录回放系统 超宽带信号高速采集记录存储回放系统主要用于对超宽带信号进行长时间高速连续实时采集记录和回放产生,适用于雷达.无线通信.软件无线电.电子对抗.电子侦察.卫星导航.复杂电磁环境模拟 ...
- 全方面的了解超宽带信号高速采集记录回放系统
超宽带高速记录回放系统 超宽带信号高速采集记录存储回放系统主要用于对超宽带信号进行长时间高速连续实时采集记录和回放产生,适用于雷达.无线通信.软件无线电.电子对抗.电子侦察.卫星导航.复杂电磁环境模拟 ...
- mysql的条件求和函数_mysql 带条件取count记录数,SUM()函数按条件求和
在做统计报表的时候,通常会用到一些复杂的统计功能,而不是简单的 count(*), sum(abc) 就可以的,这就用到了一些基于条件的统计功能. 带条件取count记录数 参考方法: 统计sub_t ...
- McObject新版eXtremeDB v.8.0在E8存储上运行STAC基准测试创造了多个记录
2018年5月22日 - 伦敦,纽约和圣塔克拉拉:用于实时和历史数据分析的极速数据库系统eXtremeDB®的开发商McObject®,今天宣布其刷新了在E8 Storage上运行的STAC-M3™的 ...
- Unity——暴风魔镜无法演示SDK所带Demo
Unity--暴风魔镜无法演示SDK所带Demo 问题 导入暴风魔镜插件,演示Demo里面的场景,出现!,然后Unity崩溃. 解决 1.设置图形api,重启Unity 2.安装对应版本的sdk,jd ...
最新文章
- Java网络编程笔记2
- iOS系类教程之用instruments来检验你的app
- c语言,字符串原地翻转
- [ZJOI2007]棋盘制作
- android+4.4+jni闪退,native2.1 安卓退到后台时,概率闪退
- 闲鱼如何建设技术舆情治理体系 (多图多代码)
- scipy.signal.find_peaks(峰值检测)
- OpenGL与EGL最简流程(十八)
- RabbitMQ提升消息传输可靠性方法总结
- Chrome 进阶:用扩展武装自己
- 我个人中意的VS2017/VS2019插件,推荐给大家(#^.^#)
- Java 编程技术中汉字问题的分析及解决
- pyTest官方手册(Release 4.2)之蹩脚翻译(1)
- 草根创业者下一个风口:娃娃机
- 题1000、1001、1002
- 神经网络Loss损失函数总结
- 使用微软DNS服务器解决Hotmail、微软账户登录页面无法访问的问题
- Esp8266+TFT太空人天气时钟
- 本地调试公众号微信登录,微信支付
- 高数--函数--初等函数
热门文章
- 使用CNVkit进行CNV分析
- android 8.0 魅族手机,安卓8.0添新特性,但魅族flyme6早已实现
- 威纶通与三菱PLC条码枪解码程序
- vscode 通过pem文件远程连接云服务器 20220120
- ndk addr2line工具的使用
- cocoa pods
- 软件安装要求不能是服务器版系统,Windows Server 2016-系统安装软硬件要求
- eyoucms 1.5.5任意命令执行漏洞(0day)
- 小晶粒zsm分子筛合成表征实验报告_小晶粒ZSM-5分子筛的合成
- Idea上传GitHub时报错:push failed: fatal: unable to access ‘https://github.com/***port 443: Timed out