因此,在做了更多的挖掘之後,我找到了Bouncy Castle TLS API。長話短說它似乎到目前爲止,但我會列出我經歷的步驟,因爲我一路上碰到了一些障礙。
您可以從http://www.bouncycastle.org/latest_releases.html下載源文件以及類文件的zip文件。在「Sources and Javadoc」部分,有J2ME的鏈接。
首先,我嘗試將cldc_classes.zip作爲外部JAR添加到構建路徑中。現在,Eclipse的代碼完成工作在Eclipse中。所以我開始模擬器,但是當我嘗試啓動應用程序時,它給了我「錯誤啓動應用程序:Module'cldc_classes.zip'not found。」我四處搜索,發現問題在於我需要檢查構建路徑設置的「訂單和導出」選項卡上的框。哎呀!
所以我檢查了它並試圖再次運行,但在模擬器啓動之前得到了「錯誤:預驗證失敗」。一些更多的搜索顯示,我不得不預先驗證zip文件的工作,似乎很容易。
使用preverify工具給出了很多錯誤和警告,看起來像是他們與java包中類的重複創建有關。在Bouncy Castle常見問題解答中,他們提到了類似的內容,並建議混淆代碼。
我發現了一個java混淆器,經過一番小小的調整就可以混淆這些類。試圖預驗證,並再次失敗......我不想學習比預先驗證更多,所以我決定只導入源文件。
其中一個軟件包有依賴於ArrayList的錯誤,但它似乎沒有必要,我只是刪除它。試圖運行它有一個關於「重複屬性不匹配:'MIDlet-name'」的錯誤。在其中一個包中有一個.jad文件,爲了擺脫這個錯誤,我刪除了這個文件。測試包也可以被刪除而沒有後果。
試圖現在運行我得到了「Eclipse I/O錯誤:無法運行程序」jar「:CreateProcess error = 2」。一些搜索顯示我需要將java jdk bin文件夾(類似於C:\ Program Files \ Java \ jdk \ bin)添加到PATH環境變量中。
最後我能夠運行,並且能夠成功地連接,發送和接收數據。在項目中使用彈性城堡罐可能有更好的/簡單的方法,現在我知道代碼實際上可以工作了。以下是連接的一些示例代碼。
SocketConnection con = (SocketConnection)Connector.open("socket://url:443");
TlsProtocolHandler tph = new TlsProtocolHandler(con.openInputStream(), con.openOutputStream());
tph.connect(new AlwaysValidVerifier());
is = tph.getInputStream();
os = tph.getOutputStream();