Вот упрощенная версия кода, который я использую для выполнения простых 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, и рекомендуется использовать реализацию JCE BouncyCastle.
Мой вопрос ... как мне использовать BouncyCastle для чего-то подобного? Или есть еще альтернативы?
Отказ от ответственности: я очень мало знаю и интересуюсь криптологией и базовой технологией, которая делает возможным HTTPS-запросы. Скорее, я бы предпочел сосредоточиться на логике своего приложения и позволить различным библиотекам решать проблемы низкого уровня.
Я проверил веб-сайт BouncyCastle и документацию и Googled, чтобы узнать больше о JCE и т. Д., Но в целом это довольно сложно, и я не смог найти простых примеров кода для выполнения чего-то вроде приведенного выше кода.