您现在的位置是:首页» windows系统» openssl的官方网站,openssl库是什么

openssl的官方网站,openssl库是什么

2024-07-13 02:05:38
本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。sslOpenSSL的SSL/TLS库,实现了SSL(Secur)/TLS(Transport Layer Security

本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。

ssl

OpenSSL的SSL/TLS库,实现了SSL(Secur)/TLS(Transport Layer Security)/DTLS(Datagram Transport Layer Security)协议的多个版本。

SSL_CTX对象包含证书、算法等信息,用于建立TLS/SSL连接。

网络连接建立后可以赋值给SSL对象,然后可以使用SSL对象完成握手操作(SSL_accept或SSL_connect或SSL_do_handshake),握手完成后就可以读写了。关闭网络连接前先调用SSL_shutdown关闭TLS/SSL连接。

SSL_METHOD特定协议的操作函数,创建SSL_CTX时需要 SSL_CIPHER加密算法信息,可以在SSL_CTX中指定可用的算法集合,SSL_SESSION中会记录实际使用的算法。 SSL_CTX全局配置,包含SSL配置的默认值。 SSL_SESSION包含当前session信息的结构,包括:加密算法、证书、密钥等 SSLSSL连接,

使用证书和密钥

SSL_CTX操作

一些SSL_CTX中的设置也可以在SSL中单独设置或修改,接口也一并在此列出。

SSL_CONF_CTX操作

SSL基本操作

这些SSL函数不包含socket的基础操作,必须跟系统的socket或BIO结合使用。

基于BIO的SSL操作

BIO socket 操作

注意:上述操作仅是socket操作,没有涉及SSL相关内容,要实现SSL通信,还需要结合以下SSL操作

SSL BIO操作

操作是否需要重试

在非阻塞模式下,操作无法立即完成时会返回错误,应用需要判断是需要重试还是真的有错误,判断是否需要重试、重试的原因和重试的操作:

关于accept socket的非阻塞模块

设置非阻塞模式:long BIO_set_nbio_accept(BIO *b, int n);

如果accept socket是非阻塞模式,调用BIO_do_accept来等待连接,当前没有连接时会返回错误,BIO_should_retry会返回true,说明操作需要重试,BIO_should_io_special会返回true并且BIO_get_retry_reason会返回 BIO_RR_ACCEPT,这种情况说明accept操作需要阻塞等待,应用程序应该等待直到底层socket接受一个连接后再重试BIO_do_accept。等待可用使用select/poll/epoll来实现。

demo解读

server-arg

首先需要构建一个用于server端的SSL_CTX对象ctx:ctx = SSL_CTX_new(TLS_server_method()); 再构建一个SSL_CONF_CTX对象cctx对ctx进行配置:cctx = SSL_CONF_CTX_new(); SSL_CONF_CTX_set_ssl_ctx(cctx, ctx); 构建server socket BIO: in = BIO_new_accept(port) 等价于: 构建一个用于server端连接的BIO:ssl_bio = BIO_new_ssl(ctx, 0);将ssl_bio指定用于server socket传入连接BIO的处理,每个传入连接会复制ssl_bio对象(链),使用ssl_bio一致的方式处理传入连接,即相当于: 接受连接:BIO_do_accept(in) 接受连接后,进行读写操作BIO_read(in, buf, 512);新建连接对应的BIO对象被串到accept BIO之后,即accept->socket,此时读写accept BIO对象,相当于读写socket BIO,而没有接受连接之前读写accept BIO,accept BIO在BIO链的末端,会先等待连接,再在socket BIO上执行读写操作。而之前还调用了BIO_set_accept_bios(),BIO链应该是accept->otherbios->socket。 连接用完之后要关闭它,先将它从BIO链中移除:tmp = BIO_pop(in);这里返回的tmp实际是BIO链otherbios->socket,可以关闭它,也可以做其他IO操作,需要并发处理多个连接时,通常在BIO_do_accept之后,执行BIO_pop得到对应连接的BIO,进行后续处理,而accept BIO就可以再次执行BIO_do_accept 关闭socket BIO:BIO_free_all(tmp);注意这里是一个BIO链,所以用BIO_free_all全部关闭。 最后关闭accept BIO:IO_free(in);关闭accept BIO的同时会自动关闭之前设置的ssl_bio。

client-arg

构建一个用于client端的SSL_CTX对象ctx:ctx = SSL_CTX_new(TLS_client_method()); 再构建一个SSL_CONF_CTX对象cctx对ctx进行配置:cctx = SSL_CONF_CTX_new(); SSL_CONF_CTX_set_ssl_ctx(cctx, ctx); 创建用于客户端连接的BIO对象:sbio = BIO_new_ssl_connect(ctx); 指定服务端地址端口:BIO_set_conn_hostname(sbio, connect_str); 连接到服务器:BIO_do_connect(sbio) 发送请求:BIO_puts(sbio, “GET / HTTP/1.0nn”); 读应答:BIO_read(sbio, tmpbuf, 1024); 关闭连接:BIO_free_all(sbio);

XTw.com.Cn系统网专业应用软件下载教程,免费windows10系统,win11,办公软件,OA办公系统,OA软件,办公自动化软件,开源系统,移动办公软件等信息,解决一体化的办公方案。

免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!

联系邮箱:773537036@qq.com

标签: openssl ssl