Bouncycastle HTTPS,忽略证书验证问题

时间:2011-12-15 05:30:47

标签: blackberry java-me bouncycastle

我正在开发一个需要对服务器进行HTTPS调用的BlackBerry(OS 5)应用程序。服务器具有自签名证书。我不能仅使用可用的J2ME类来忽略或抑制BlackBerry端的验证错误,因此我想使用Bouncycastle的轻型TLS库来实现这一点。

我的代码:

SocketConnection sc = (SocketConnection) Connector.open("https://<myserversite>");
TlsProtocolHandler tlsHandler = new TlsProtocolHandler(sc.openInputStream(),         
sc.openOutputStream());
CertificateVerifyer cv = new AlwaysValidVerifyer();
tlsHandler.connect(cv);
DataOutputStream writer = new DataOutputStream(tlsHandler.getOutputStream());
InputStream inputStream = tlsHandler.getInputStream();

我正在使用Bouncycastle轻量级API ver 1.46,Java 1.6

我遇到了一些问题:

  1. 当我尝试连接时,我收到一个异常:“内部TLS错误,这可能是一次攻击”。我调试过,当Bouncycastle通过TlsUtils.checkVersion(InputStream是,TlsProtocolHandler处理程序)进行版本检查时抛出它。我已经尝试寻找原因,但无法确定发生了什么。尝试连接到另一个(受信任的)启用HTTPS的站点时,我也会遇到同样的异常。
  2. AlwaysValidVerifyer已被弃用。 javadoc声明“在TlsAuthentication实现中执行证书验证”但我找不到任何有关如何执行此操作的示例 - 任何人都可以帮助获取示例吗?
  3. 我试图搜索要使用的J2ME兼容的HTTPS库,但除了Bouncycastle之外找不到任何其他内容 - 有人可以推荐另一个库吗?
  4. 非常感谢任何帮助

    威尔

1 个答案:

答案 0 :(得分:0)

更改

SocketConnection sc = (SocketConnection) Connector.open("https://<myserversite>");

SocketConnection sc = (SocketConnection) Connector.open("socket://<myserversite>:443");