Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Openssl SSL_写部分数据时如何处理应用程序_Openssl - Fatal编程技术网

Openssl SSL_写部分数据时如何处理应用程序

Openssl SSL_写部分数据时如何处理应用程序,openssl,Openssl,在下面的场景中,我真的不知道该怎么办: 1:在应用程序中,我们称为SSL_write(s,data,100),希望向对等方发送100字节的明文 2:在openssl中,数据将被加密并扩展到116字节(可能是其他大小,我不在乎) 3:在openssl中,加密输入后,它调用BIO_write/send(tcp层接口)发送116个字节,但只发送10个字节(可能是由于套接字缓冲区不够,send()返回10)`。openssl是否将100个密文缓存在自己的缓冲区中 发生123SSL时,SSL\u writ

在下面的场景中,我真的不知道该怎么办:

1:在应用程序中,我们称为SSL_write(s,data,100),希望向对等方发送100字节的明文

2:在openssl中,数据将被加密并扩展到116字节(可能是其他大小,我不在乎)

3:在openssl中,加密输入后,它调用BIO_write/send(tcp层接口)发送116个字节,但只发送10个字节(可能是由于套接字缓冲区不够,send()返回10)`。openssl是否将100个密文缓存在自己的缓冲区中

发生123SSL时,
SSL\u write
的返回值是多少

1:如果
SSL\u write
返回10(或再次),应用程序将缓存90(或100)字节的明文,并在fd可写时再次调用
SSL\u write
以写入90(或100)字节的明文,但这将导致加密状态错误,因为SSL\u write已经加密了所有明文


2:如果
SSL\u write
返回100,则应用程序认为它已发送所有数据/明文,并且可能不会调用
select
/
epoll\u add
来轮询fd的可写事件。(我发现Nginx是这样做的,也许我错了),那么应用程序如何刷新openssl左侧数据中的剩余数据呢?

好吧,我发现了openssl是如何做到的。
SSL_write将再次返回,即使实际只发送了10个字节,并且106个字节将缓存在is t缓冲区中。OpenSSL将记录当前输入大小(100)和保持大小(106)。第二次调用SSL_write时,它将首先发送剩余的数据(106),然后删除当前输入数据的前100字节