沒有可使用Java實現SSL
與NIO (SocketChannel and SSLEngine)
,不使用框架,如網狀等線程安全與SSL + NIO
我想拿出一個SSL
實現,它可以工作了一些有用的信息與blocking/non
阻止頻道,並得到了一些基本qns
。
當appData和Net緩衝區被操縱時,關於線程安全性的問題沒有太多的信息。每SSLEngine
文檔,
「有兩個併發問題需要注意的:
的wrap()
和unwrap()
方法可以互相併發執行SSL/TLS
協議使用有序分組應用程序必須。請注意確保生成的數據包按順序傳送,如果數據包無序到達,可能會發生意外或致命結果。「
這是否適用於阻塞和非阻塞?有人可以解釋。謝謝。
此外,建立初始緩衝區大小的一般建議似乎基於(session.getApplicationBufferSize()/getPacketBufferSize()
),這些值將如何設置?這些更好用來代替32k
左右的標準緩衝區大小嗎?
謝謝@EJP。像往常一樣,你對這個話題的評論是非常有幫助的。你可以請。詳細說明了上面提到的可能的併發問題,正如通常我沒有看到的那樣,這些問題被明確處理: 「wrap()和unwrap()方法可能彼此併發執行 SSL/TLS協議使用有序的數據包。必須注意確保生成的數據包按順序發送,如果數據包無序到達,可能會發生意外或致命結果。「這應該在客戶端實例化SSLEngine中明確處理? –
'可以同時執行'意味着*你*可以同時執行它們。如果您只使用一個線程,這是NIO的全部要點,那麼不需要處理任何數據包序列問題。 – EJP
Final澄清請(希望),再次來自SSLEngine文檔:「通過從I/O傳輸機制中分離SSL/TLS抽象,SSLEngine可用於各種I/O類型,例如非阻塞I/O(輪詢),可選擇的非阻塞I/O,Socket和傳統的Input/OutputStreams,本地ByteBuffers或者字節數組..「這是否意味着SSLEngine可以用於NIO以外的傳輸,也就是常規套接字? Was SSLSocket被用於SSL,使用基於常規套接字的阻塞IO和用於NIO的SSLEngine(阻塞IO) –