【发布时间】:2018-07-13 03:34:06
【问题描述】:
下面的场景我真的不知道该怎么做:
1:在应用程序中,我们调用 SSL_write(s, data, 100) 想向对等方发送 100 字节的明文。
2:在openssl中,数据会被加密并扩展为116字节(也许其他大小,我不在乎)
3:在openssl中,对输入进行加密后,调用BIO_write/send(tcp层接口)发送116字节,但只发送了10字节(可能是socket缓冲区不够,send()返回10)`。 OpenSSL 是否将 100 个密文缓存在它自己的缓冲区中?
当 1 2 3 发生时,SSL_write 的返回值是多少?
1:如果SSL_write返回10(或再次),应用程序将缓存90(或100)字节明文,并在fd可写时再次调用SSL_write写入90(或100)字节明文,但这将导致加密状态错误,因为 SSL_write 已经加密了所有明文。
2:如果SSL_write返回100,应用程序认为它已经发送了所有数据/明文,并且可能不会调用select/epoll_add来轮询fd的可写事件。 (我发现Nginx确实是这样的,也许我错了),那么应用程序如何刷新openssl左侧数据中的剩余数据?
【问题讨论】:
标签: openssl