単純な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キーペアを生成できませんでした」および「プライムサイズは64の倍数である必要があり、512〜1024(両端を含む)の範囲でしかありません」というエラーが表示されます。
Java:SSLハンドシェイクで「DHキーペアを生成できませんでした」という例外が発生するのはなぜですか?
これはJavaの既知のバグであることが判明したため、BouncyCastleのJCE実装を使用することをお勧めします。
私の質問は...このようなものにBouncyCastleをどのように使用するのですか?または、他に選択肢はありますか?
免責事項:私は、暗号化とHTTPSクエリを可能にする基盤技術についての知識と関心をほとんど持っていません。むしろ、アプリケーションロジックに焦点を当て、さまざまなライブラリに低レベルの問題を処理させたいと思います。
BouncyCastleのWebサイトとドキュメントをチェックし、GoogleでJCEなどの詳細を調べましたが、全体としては非常に圧倒的であり、上記のコードのようなことを行うための簡単なコード例を見つけることができませんでした。