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 (ssl, sd); err = SSL_connect (ssl); CHK_SSL(err); /*打印所有加密算法的信息(可选)*/ printf ("SSL connection using %s\n", SSL_get_cipher (ssl)); /*得到服务端的证书并打印些信息(可选) */ server_cert = SSL_get_peer_certificate (ssl); CHK_NULL(server_cert); printf...
openssl中有个s_client命令集合,该命令用于实现客户端的通信,它的实现在s_client.c文件中,在这个庞大代码中有一个不起眼的函数调用,这个函数是SSL_set_tlsext_host_name。该函数的作用是在客户端在发送ClientHello消息时,将所访问的主机(服务器)名称写入到server name的扩展字段中。 if (!noservername && (serv...
int SSL_set_wfd(SSL *ssl,int fd); //以只写模式绑定流套接字 (4)完成SSL握手 在这一步,我们需要在普通TCP连接的基础上,建立SSL连接。与普通流套接字建立连接的过程类似:Client使用函数SSL_connect()【类似于流套接字中用的connect()】发起握手,而Server使用函数SSL_ accept()【类似于流套接字中用的ac...
int SSL_set_fd(SSL *s, int fd); 成功返回1,失败返回0。 也可以直接使用BIO代替。 BIO* bio = BIO_new_socket(socket, BIO_NOCLOSE); SSL_set_bio(ssl, bio, bio); 7)执行SSL握手。 SSL握手过程是一个复杂过程,涉及到重要的加密秘钥交换。
在这段示例代码中,我们首先初始化了SSL库,并创建了SSL上下文对象和SSL对象。然后通过SSL_set_fd函数将SSL对象和Socket绑定在一起,通过SSL_connect函数来建立SSL连接。接着我们可以使用SSL_write和SSL_read函数来发送和接收数据。最后在结束通信之前,我们需要通过SSL_shutdown函数来关闭SSL连接并释放相应的资源。
SSL_set_fd(ssl,fd); /*SSL的握手过程*/ SSL_connect(ssl); /*接下来用SSL_write(), SSL_read()代替原有的write(),read()即可*/ SSL_read (ssl, buf, sizeof(buf)); 根据RFC2246(TLS1.0)整个TLS(SSL)的流程如下: Client Server ClientHello ---> ServerHello...
SSL_set_fd(ssl, new_fd); // 建立SSL连接 if(SSL_accept(ssl) ==-1) { closesocket(new_fd); break; } // 开始处理每个新连接上的数据收发 memset(buf,0, MAXBUF); strcpy(buf,"[服务端消息] hello lyshark"); // 发消息给客户端
1 . 客户端NUM个线程共享一个Channel,这个Channel对应一个Socket、一个fd、和一个SSL_CTX*。 2. 这一个SSL_CTX建立了一个SSL赋给SSLSession。 3. 多个线程共用一个SSL*读写同一个fd,靠brpc防止数据交织。 我还不清楚的是brpc是怎么防止数据交织的,我看到ssl_helper.cpp的CreateSSLSession函数调用SSL_set_app...