BlackBerry上的默认客户端证书



我正在尝试使用https连接到服务器,当我这样做时,它说连接需要客户端证书。如果我按"是"继续,我将得到一个TLSAlertException
连接代码看起来像:

SecureConnection con = (SecureConnection)Connector.open("ssl://url:443");

我已经查看了模拟器上(以及设备上)的证书,默认情况下没有任何客户端(个人)证书。我试着通过代码生成一个,但我不知道如何让它显示在手机上的个人证书下。

我发现了这一点,但在设备上获得个人证书的选项都不太理想。

那么,有可能在模拟器上获得个人证书吗,最好是通过代码
如果我能得到一个,SecureConnection会在连接到服务器时自动使用它吗
如果没有,有没有图书馆可以做到这一点?

所以在做了更多的挖掘之后,我找到了Bouncy Castle TLS API。长话短说,到目前为止,它似乎起到了作用,但我将列出我所经历的步骤,因为我在这一过程中遇到了一些障碍。

您可以从以下位置下载类文件的源代码和ziphttp://www.bouncycastle.org/latest_releases.html.在"Sources and Javadoc"部分下有J2ME的链接。

首先,我尝试将cldc_classes.zip作为外部JAR添加到构建路径中。弹性城堡代码的代码完成现在已经在Eclipse中工作了。所以我启动了模拟器,但当我试图启动应用程序时,它给了我"启动应用程序错误:找不到模块'cldc_classes.zip'。"我四处搜索,发现问题是我需要选中构建路径设置的"订单和导出"选项卡上的框。哎呀!

所以我检查了它,并试图再次运行,但在模拟器启动之前收到了"错误:预验证失败"。更多的搜索显示,我必须预先验证zip文件才能工作,这似乎很容易。

使用preverify工具会出现很多错误和警告,这些错误和警告看起来与java包中重复创建类有关。在Bouncy Castle常见问题解答中,他们提到了类似的内容,并建议混淆代码。

我找到了一个java模糊器,经过一点摆弄,我能够模糊类。尝试进行预验证,但再次失败。。。我不想了解更多关于预验证的信息,所以我决定只导入源文件。

其中一个程序包在依赖ArrayList时出错,但似乎没有必要,我只是删除了它。试图运行它时出现了一个关于"重复属性不匹配:MIDlet名称"的错误。其中一个包中有一个.jad文件,我删除了这个文件以消除错误。测试包也可以被删除而不会产生任何后果。

现在尝试运行时,我得到了"Eclipse I/O错误:无法运行程序"jar":CreateProcess错误=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();

最新更新