[英]OpenSSL: perform en-/decryption without SSL_read() / SSL_write()
我用C編寫了一個基於事件的網絡庫,現在我想通過OpenSSL添加SSL / TLS支持。 我不想使用SSL_read()
和SSL_write()
,而是希望OpenSSL只執行傳出/傳入數據的加密/解密,讓我自己傳輸/接收數據。
我是SSL / TLS和OpenSSL的新手,所以:
有沒有辦法讓OpenSSL 只執行char
數組的加密/解密?
像size_t SSL_encrypt(const char *buf_in, size_t size_in, char *buf_out)
這樣的東西會很棒。
正是你所要求的是不可能的,因為在TLS中,在應用層發送內容和在網絡套接字上發送內容之間沒有一對一的對應關系。 重新協商等事件意味着有時SSL需要從網絡讀取數據以便在發送數據方面取得進展,反之亦然。
但是,您仍然可以使用OpenSSL執行SSL,但要自己負責從網絡讀取和寫入。 您可以通過在SSL
指針上調用SSL_set_bio()
而不是SSL_set_fd()
:
使用BIO_new_bio_pair()
創建連接的BIO對。 一個BIO將由SSL例程讀取和寫入,另一個BIO將由您的應用程序讀取和寫入(允許它通過任何方法將數據傳遞到另一端)。
在新的SSL對象上使用SSL_set_bio()
將讀取和寫入BIO都設置為生成的對中的一個BIO。
在對中的另一個BIO上使用BIO_read()
和BIO_write()
來讀取和寫入SSL協議數據。
在SSL對象上正常使用SSL_accept()
, SSL_connect()
, SSL_read()
和SSL_write()
。
(目前尚不清楚這會給你的應用程序帶來什么好處:在這種情況下你除了讀寫OpenSSL傳遞給你的東西之外你什么都做不了,所以你也可以讓它做讀書和寫作) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.