2012-01-15 101 views
0

如何保護普通套接字通信?我寫了一個只能連接到專用SSL端口(5223)的Jabber客戶端(使用SSLSocket)。正常的方法是連接到Jabber標準端口5222並請求starttls。我怎樣才能做到這一點?如何通過普通Java套接字實現(SSL/TLS)安全通信

+0

你嘗試過什麼?而不是聽起來很愚蠢,但你有沒有檢查他們是你試圖連接到服務器的SSL服務器實施。我不使用jabber,所以我不知道。如果沒有服務器運行SSL連接,那麼您的SSL客戶端是浪費時間! – 2012-01-15 22:24:05

+0

Google在talk.google.com上有5223個端口,但每個服務器中的大多數都爲我們提供了傳統的starttls方法。我不知道如何在請求啓用TLS之後保護通信。 – Bijoy 2012-01-15 22:30:11

+0

在java中創建SSL套接字與驗證類似於創建標準套接字。你能提供一些代碼以及你所得到的錯誤信息嗎? – 2012-01-15 22:32:15

回答

1

我不能完全確定你所問的,但你可以通過使用SSLSocketFactory.createSocket()方法層上的現有的普通(非安全)插座安全套接字。這是使用類似starttls的方式「升級」套接字的一種方法。但這是艱難的做法。幾乎可以肯定,你的XMPP庫將提供對這種功能的高級訪問。

+0

好的。讓我嘗試一下。我正在嘗試編寫我自己的庫。 – Bijoy 2012-01-15 22:51:58

+0

@Bijoy:你真的說你想要實現你自己的SSL/TLS庫嗎(即使JRE中有一個爲你提供的:JSSE)?這有點像你的標題聽起來像。不過,你可能也不會要求對SO,如果這是你真正想做的事,你只是經過的RFC(在這種情況下,運氣好的話...)。如果您只想編寫自己的XMPP庫並將普通TCP套接字升級到SSL/TLS套接字,請使用Gregs的建議。 – Bruno 2012-01-15 23:45:57

+0

啊,對不起。通信錯誤,我完全想要編寫我自己的XMPP庫而不是SSL/TLS庫。 – Bijoy 2012-01-16 04:39:01

1

期望管理:我沒有用Jabber試過這個。但是,它的工作原理Gmail的SMTP服務器,所以也許......

這裏是如何的插座升級到SSL插座,其中socket是原始(非TLS)連接:

SSLSocket sslSocket = (SSLSocket) ((SSLSocketFactory) SSLSocketFactory.getDefault()).createSocket(
         socket, 
         socket.getInetAddress().getHostAddress(), 
         socket.getPort(), 
         true); 
InputStream inputStream = sslSocket.getInputStream(); 
OutputStream outputStream = sslSocket.getOutputStream(); 
// reads from the socket 
Scanner scanner = new Scanner(inputStream); 
// writes to the socket 
OutputStream outputStream = new BufferedOutputStream(outputStream);