ctx = SSL_CTX_new(SSLv23_client_method());// 创建ssl上下文,并绑定套接字SSL* ssl = SSL_new (m_ctx); SSL_set_fd(m_ssl, s);// 开始ssl握手intiRet = SSL_connect(m_ssl);if(1!= iRet)returnFALSE;// 下面使用SSL_read或SSL_write进行通信 上述代码中SSL_connect函数是最重要的,它内部实...
int SSL_CTX_check_private_key(SSL_CTX *ctx); 4) 建立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...
openssl中有个s_client命令集合,该命令用于实现客户端的通信,它的实现在s_client.c文件中,在这个庞大代码中有一个不起眼的函数调用,这个函数是SSL_set_tlsext_host_name。该函数的作用是在客户端在发送ClientHello消息时,将所访问的主机(服务器)名称写入到server name的扩展字段中。 if (!noservername && (serv...
//基于ctx产生一个新的ssl,建立SSL连接 ssl=SSL_new(ctx); SSL_set_fd(ssl,sockfd); if(SSL_connect(ssl)==-1) ERR_print_errors_fp(stderr); else{ printf("connect with %s encryption\n",SSL_get_cipher(ssl)); ShowCerts(ssl); } bzero(buffer,MAXBUF+1); fgets(buffer,MAXBUF+1,stdin); ...
read */err = SSL_read(ssl, buf, sizeof(buf) - 1); //如果是SSL_ERROR_WANT_READ,则要重新接收数据buf[err] = '\0';printf ("got %d chars:%s\n", err, buf);这里面要特别注意的是 SSL_set_fd 关联的 socket 必须是 socket 已经连接上网络了,否则后面的 SSL_connect 是不...
此时需要调用 swSSL_create 函数将新的连接与 SSL 绑定。 在swSSL_create 函数中,SSL_new 函数根据 ssl_context 创建新的 SSL 对象,利用 SSL_set_fd 绑定 SSL,SSL_set_accept_state 函数对 SSL 进行连接初始化。 int swServer_master_onAccept(swReactor *reactor, swEvent *event) ...
这里面要特别注意的是 SSL_set_fd 关联的 socket 必须是 socket 已经连接上网络了,否则后面的 SSL_connect 是不会成功的。因为我们已经在上一篇文章说过了, ssl/tsl 的"连接"不过是双方交换/协商通讯加密密码的过程,和真实的网络连接过程是无关的,所以是要先连接上网络的。
ssl = SSL_new(ctx); /*下面是正常的socket过程*/ fd = socket(); connect(); /*把建立好的socket和SSL结构联系起来*/ SSL_set_fd(ssl,fd); /*SSL的握手过程*/ SSL_connect(ssl); /*接下来用SSL_write(), SSL_read()代替原有的write(),read()即可*/ ...
OpenSSL的SSL/BIO_get_fd 只要是用到了OpenSSL,总会碰到让人心塞的事。 这次是SSL_get_fd。我用一种很简单的方式创建了一个SSL对象,直接在这个对象上进行SSL的accept: bio = BIO_new(BIO_s_accept()); BIO_set_accept_port(bio, "1234"); BIO_do_accept(bio); SSL_set_bio(ssl, bio, bio); ...
客户端 SSL_set_connect_state(ch->ssl_); 4. 处理SSL握手 tcp三度握手建立连接之后,要建立SSL的连接,那么还需要在已经建立的tcp连接上,进行数据交互,完成SSL的握手。因此epoll_wait调用返回,如果SSL相关的socket有读写事件需要处理则进行SSL握手,直到握手完成。下面代码是socket事件的处理,直到SSL握手完成int r ...