2014-10-07 108 views
2

我是J2ME midlet的新手。我爲諾基亞創建了midlet應用程序。應用程序可以正常使用http。但在將url從http更改爲https後,它不起作用。其他https網站(如谷歌)工作正常。但我們的服務器鏈接不工作。我得到以下異常java.io.IOException本機錯誤-5。這是我的示例代碼。J2ME Https連接不工作

String url = "https://domain"; 
HttpsConnection hc = (HttpsConnection)Connector.open(url); 
SecurityInfo si = hc.getSecurityInfo(); 
Certificate c = si.getServerCertificate(); 
String subject = c.getSubject(); 
+0

您應該將服務器證書導入證書管理區域中的WTK。並確保您在生成證書時在CN區域中具有相同的名稱IP地址。 – 2015-07-25 07:57:13

回答

1

我記得諾基亞手機報告這樣的錯誤(來自本地代碼層的錯誤)。爲他們找到意義並不容易。如果是Symbian手機,則可以嘗試從Symbian SDK doc中檢查Symbian I/O錯誤代碼(而不是Java中的缺失代碼)。據我所知,錯誤代碼以負號報告給J2ME。 對於您的情況,我認爲發生這種情況是因爲您在服務器上使用了自簽名SSL證書,並且該設備無法根據設備上安裝的根證書頒發機構證書進行驗證。這就解釋了爲什麼您可以訪問其他HTTPS網站,例如google,它們在服務器上使用適當的證書。

解決方法可以是:

(1)購買並在服務器上安裝從Twante或Verysign SSL證書。某些設備可能無法識別Twante(它們沒有適當的根證書),某些Verysign(這不太可能,但很少有設備出現這種問題)。 J2ME設備的主要部分應接受Twante證書,這些證書是(當我爲J2ME開發的時候)比Verysign便宜

(2)將您的根證書安裝到設備(儘管在某些設備上可能,但很少)。這對一般情況下,一個壞的解決方案,因爲你不能在所有的設備上安裝證書,每次用戶安裝應用

(3)不使用SSL在所有:)

(4)使用HTTP,但自己加密數據,甚至有一些J2ME加密庫,如BouncyCastle的端口http://en.wikipedia.org/wiki/Bouncy_Castle_(cryptography)。但是,在Java代碼中處理SSL會嚴重影響性能。可接受的數據量不大(文本等),但您可能希望通過普通HTTP傳輸圖像而不使用SSL