2010-09-25 14 views
0

SSL(OpenSSL)最常用的'C'實現不支持對SSL會話進行並行操作。 (即,您無法爲同一個會話並行執行SSL_read & SSL_write)。可以在Java中基於JSSE的SSL Socket上並行執行讀取/寫入操作嗎?

Java的基礎SSL,JSSE是否支持這個功能?即對於使用JSSE創建的相同SSL會話,我可以在不同的線程上並行讀寫嗎?如果是,它是否也可以無縫處理重新談判(即如果從另一方收到重新談判請求,是否會處理?)

因爲我對Java很少或根本沒有想法,所以我有另一個非常基本的問題此外,是否有可能從Java的同一套接字的不同線程讀取/寫入並行?

+0

既然你問到Java,不要標記它C.我刪除該標記。 – jer 2010-09-25 02:20:17

回答

3

是的,SSLSockets和套接字可以通過單獨的線程讀取和寫入;是的,SSLSocket可以無縫處理重新協商。

您對'會話'的使用不太正確。每個SSL會話可以有多個SSLSockets(和openSSL套接字)。在Java中,它們都可以獨立使用。

+0

感謝您的回答。你能否詳細說明一下?據我所知,一個OpenSSL「SSL_S *」對象不能被多線程共享,沒有應用程序使用互斥鎖來保護它。但是,在Java中,這可以在沒有應用程序獲取互斥鎖的情況下實現?這是由Java內部完成的嗎? Java是否在下面使用OpenSSL? – Jay 2010-09-25 06:09:08

+0

我已經回答了。你可以使用多個線程。沒有信號量或互斥體或同步要求。 Java在底層不使用OpenSSL。 – EJP 2010-09-25 08:36:32

+0

謝謝,但是,現在我已經學習了很長一段時間的SSL了,我想知道在重新協商開始的情況下,Java實現如何處理它?在無縫重新協商處理的情況下,您的'讀'可能會'寫'和'寫'可能會在內部做'讀'。這是如何處理的?任何想法?另外,我沒有明白「每個會話多個OpenSSL套接字」的意思。一個會話究竟是什麼意思? – Jay 2010-09-25 08:47:08

相關問題