undefined reference to 'ssl_set_fd@libssl.so.10' 这个错误通常表明在链接阶段,编译器找不到 ssl_set_fd 这个函数在 libssl.so.10 这个共享库中的定义。这可能是由于几个不同的原因造成的,以下是一些可能的解决步骤: 确认库是否正确安装: 确保你的系统中已经安装了 libssl.so.10 这个库。你可以使用 ldconfi...
SSL_set_fd()函数将建立的SSL结构与TCP套接字联系,使SSL结构对套接字中的TCP数据进行SSL封装。 /* ssl/ssl_lib.c */ int SSL_set_fd(SSL *s,int fd) { int ret=0; BIO *bio=NULL; // 建立一个BIO,BIO是OpenSSL提供的用来进行算法封装的处理结构,还可以将多个算法 // 串联起来,这样可以很方便地...
5、将普通套接字转换成SSL套接字。通过SSL_set_fd函数,关联已有的Socket句柄与SSL结构体。 6、握手。双方交换各自的信息,并协商加密算法、生成共享的密钥等。这一过程,通过SSL_connect或SSL_accept函数完成。 7、数据传输。使用SSL_read和SSL_write代替标准的read和write操作,以确保所有发送和接收的数据都是加密的。
SSL_set_fd(m_ssl, s);// 开始ssl握手intiRet = SSL_connect(m_ssl);if(1!= iRet)returnFALSE;// 下面使用SSL_read或SSL_write进行通信 上述代码中SSL_connect函数是最重要的,它内部实现了SSL的握手过程,openssl在内部采用状态机的方式实现了整个握手,代码还是相当的晦涩。几乎所有的SSL通信失败都是在握手...
openssl中有个s_client命令集合,该命令用于实现客户端的通信,它的实现在s_client.c文件中,在这个庞大代码中有一个不起眼的函数调用,这个函数是SSL_set_tlsext_host_name。该函数的作用是在客户端在发送ClientHello消息时,将所访问的主机(服务器)名称写入到server name的扩展字段中。
//SSL_CTX_set_verify(ctx,SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT,verify_callback_server//验证回调函数);//如果验证客户端 SSL_CTX_set_verify(ctx,SSL_VERIFY_FAIL_IF_NO_PEER_CERT,0); //如果不验证客户端 SSL_CTX_load_verify_locations(ctx,ROOTCERTF,NULL); ...
SSL_set_fd(ssl, new_fd); // 建立SSL连接 if(SSL_accept(ssl) ==-1) { closesocket(new_fd); break; } // 开始处理每个新连接上的数据收发 memset(buf,0, MAXBUF); strcpy(buf,"[服务端消息] hello lyshark"); // 发消息给客户端
SSL_set_fd (ssl, sd); //接受新SSL连接 err = SSL_accept (ssl); client: // 建立SSL ssl = SSL_new (ctx); // 将SSL与TCP socket连接 SSL_set_fd (ssl, sd); // SSL连接 err = SSL_connect (ssl); server的SSL_accept()和client的SSL_connect()函数共同完毕SSL的握手协商过程。
SSL套接字是建立在普通的TCP套接字基础之上,在建立SSL套接字时可以使用下面的一些函数: SSL *SSl_new(SSL_CTX *ctx); // 申请一个SSL套接字 int SSL_set_fd(SSL *ssl, int fd);) // 绑定读写套接字 int SSL_set_rfd(SSL *ssl, int fd); // 绑定只读套接字 ...
ssl=SSL_new(ssl_ctx); SSL_set_fd(ssl, sockfd); SSL_set_connect_state(ssl);// s->handshake_func = s->method->ssl_connect; if(SSL_connect(ssl) == -1) SSL 创建: TLS_method是怎么实现的,是通过定义了一个宏: 在methods.c文件中有如下的定义, ...