我很努力地找到一種機制來向目標服務器發送請求,並且當套接字有數據要讀取時,將套接字傳遞給另一個進程以獲取數據。 我到目前爲止在Linux上使用epoll,爲了實現這一點,我做了握手,我發送請求和請求到達,然後我將套接字fd傳遞給另一個進程以進一步處理,我明確地保存SSL會話使用PEM_write_bio_SSL_SESSION
,然後使用PEM_read_bio_SSL_SESSION
讀取它並將其添加到上下文中,但我無法讀取另一個進程中的ssl套接字,因爲我得到內部錯誤或握手失敗。將連接的SSL Socket傳遞給另一個進程
我讀過這個article但仍找不到任何機制來解決它。我知道這是因爲openssl是應用程序級庫,但必須有辦法,因爲Apache已經這樣做了。
至少,如果它不可能的話,有沒有辦法使用來自openssl會話的主密鑰解密來自套接字(我可以正常讀取)的數據?
謝謝你的回答。我希望能找到一條出路,避免分叉這個過程,因爲它對我所做的事情來說非常昂貴。我明白了這一點,是否有辦法通過SSL會話獲得的信息手動刪除數據?我可以從套接字讀取所有加密的數據。 – purrogrammer
據我所知,你唯一的選擇是分叉過程。沒有當前SSL狀態的序列化,因此您可以傳輸它。請注意,SSL會話不是內部SSL狀態。 –
你是對的,我只是重複使用ssl會話,這會降低握手開銷,但這絕對不是將套接字句柄賦予另一個進程的方式。我試着用posix線程,它運作良好。仍然對性能感到悲觀,希望通過pthread中的合作調度獲得更好的性能。我想知道Apache如何做,我會看看他們的實現。 – purrogrammer