【发布时间】:2011-12-31 14:09:58
【问题描述】:
这是我用来执行简单 HTTPS 请求的代码的简化版本:
// Assume the variables host, file and postData have valid String values
final URL url = new URL("https", host, file);
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestProperty("Content-length", String.valueOf(postData.length()));
final DataOutputStream output = new DataOutputStream(connection.getOutputStream());
output.writeBytes(postData);
output.close();
final InputStream input = new DataInputStream(connection.getInputStream());
for (int c = input.read(); c != -1; c = input.read()) {
System.out.print((char) c);
}
System.out.println();
input.close();
这在连接到我们的服务器时效果很好(如果我使用 http 作为协议,仍然可以),直到最近完成了一些安全升级。
现在它给了我这个问题中提到的“无法生成 DH 密钥对”和“Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)”的错误:
Java: Why does SSL handshake give 'Could not generate DH keypair' exception?
原来这是 Java 中的一个已知错误,建议使用 BouncyCastle 的 JCE 实现。
我的问题是……我该如何使用 BouncyCastle 来做这样的事情?还是有更多的选择?
免责声明:我对密码学和使 HTTPS 查询成为可能的底层技术知之甚少,也没有兴趣。相反,我更愿意专注于我的应用程序逻辑,让各种库来处理低级问题。
我查看了 BouncyCastle 网站和文档,并在 Google 上搜索了有关 JCE 等的更多信息,但总而言之,这非常令人难以抗拒,而且我无法找到任何简单的代码示例来执行上述代码之类的操作。
【问题讨论】:
标签: java ssl https bouncycastle jce