J2ME Https连接无法正常工作

时间:2014-10-07 10:17:11

标签: java https java-me midp

我是J2ME midlet的新手。我为诺基亚创建了midlet应用程序。应用程序适用于http。但在将URL从http更改为https后,它无法正常工作。其他https网站(如谷歌)工作正常。但我们的服务器链接不起作用。我得到以下异常 java.io.IOException Native Error-5 。这是我的示例代码。

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

1 个答案:

答案 0 :(得分:1)

我记得诺基亚手机会报告错误(来自原生代码层的错误)。为他们找到意义并不容易。如果是Symbian手机,您可以尝试从Symbian SDK doc(不是Java,因为它不存在)检查Symbian I / O错误代码。据我记忆,错误代码会以负号报告给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传输图像