2009-05-01 92 views
0

我正在做一些Java SE中的事情,這將要求我以不尋常的方式使用SSL。
所需步驟類似於:Java SSL重新協商(從SSL到清除頻道)

  • 建立SSL會話;
  • 交換一些私人信息;
  • 重新協商連接參數以停止使用加密操作。

我在Java API中找不到這種方法。我相信通過使用會話重新協商可以解決問題的解決方案,但是對於沒有加密操作的密碼套件,但是沒有這樣的選擇;或訪問下聯套接字並繞過加密操作。

是否有這些選項可能?你相信這樣的功能可以在其他語言和框架(C,PHP,Ruby,.NET,Perl,Python等)中使用嗎?

感謝您的幫助,
路易斯·M.科斯塔

回答

3

你可以做在Java中這樣的事情,但它絕對不是標準。我不能擔保其他平臺有這方面的必要支持。

JSSE通過SSLEngine爲傳輸無關的SSL提供支持。你可以用它暫時用SSL來「裝飾」一個套接字,然後在完成時關閉它並直接使用原始套接字IO。

我猜不出爲什麼你想花掉協商SSL會話的開銷就關閉SSL。如果是爲了性能,只要雙方都允許,您可以重新協商密碼套件以使用「NULL」機密性和完整性協議。您在SSL記錄層中仍然有一點點開銷。但是,會話參數協商後SSL的開銷非常低。如果您的應用程序對這種開銷很敏感,您可能需要考慮專用的SSL硬件。

+0

我不得不同意並強調SSL的實際開銷都在談判中;對通過鏈路移動的實際數據執行對稱加密/解密幾乎不需要任何工作。 – 2009-05-02 06:51:48

1

爲什麼不放棄連接並重新連接?在重新協商SSL時,建立TCP連接的開銷較小。

2

在現有套接字上關閉SSL的一個原因是爲了實現FTP清除控制通道(CCC)命令(通過TLS的FTP)。這將控制通道切換回明文,以便防火牆可以看到動態端口請求。

+0

我從來沒有聽說過這個;感謝您指出這個例子。 – erickson 2011-01-28 20:24:43

0

要重寫透明密碼,我猜你至少要啓用它,因爲它不是默認啓用的。但我認爲沒有好的「空」密碼,將SSL套接字從底層套接字中分離會更好。

SSLEngine#setEnabledCipherSuites(new String(){"SSL_RSA_WITH_NULL_SHA"}); 
SSLEngine#beginHandshake();