這是關於客戶端服務器通信中的openssl重新協商問題。openssl版本是1.0.1c。使用阻塞套接字在openssl中進行SSL重新協商
客戶端和服務器正在使用阻塞套接字建立SSL連接,並且通信正常。客戶端發送數據並且服務器接收併發送回客戶端。
當服務器想要重新協商時,使用SSL_renogotiate和SSL_do_handshake完成後,將SSL狀態設置爲SSL_ST_ACCEPT。
客戶端的一般行爲是在控制檯上等待讀取數據使用SSL_write發送到服務器。在此期間,如果服務器重新協商並且客戶端通過調用SSL_write從控制檯發送任何數據,則重新註冊失敗。
下面線在服務器側被印刷返回-1從第二SSL_do_handshake
3086063264:錯誤:140940F5:SSL例程:SSL3_READ_BYTES:意想不到記錄:s3_pkt.c:1404:
以下行是在客戶端側打印時它是使用SSL_read其返回-1讀取其發送數據之後服務器
3086079648:錯誤:140943F2:SSL例程:SSL3_READ_BYTES:SSLV3警報意外的消息:s3_pkt.c:1251:SSL警報數10 3086079648:錯誤:140940E5:SSL例程:SSL3_READ_B YTES:SSL握手失敗:s3_pkt.c:1151:
在openssl.org阻止插座下面給出
如果底層的BIO是阻塞,SSL_write()將只返回,一次寫操作已經完成或發生錯誤,除非重新協商發生,在這種情況下可能會發生SSL_ERROR_WANT_READ。
SSL_write在接收SSL虛擬轉換時如何在clint端行爲。在這種情況下,重新握手如何成功?
問候, 普拉迪普