В настоящее время у меня есть приложение, которое будет отправлять HTTP-запрос на множество URL-адресов. Некоторые из соединений не работают со следующим исключением.Как установить «jsse.enableSNIExtension» в false только для одного HTTPURLConnection?
Исключение в потоке "основного" javax.net.ssl.SSLProtocolException: рукопожатие предупреждение: unrecognized_name на sun.security.ssl.ClientHandshaker.handshakeAlert (ClientHandshaker.java:1410) в sun.security.ssl .SSLSocketImpl.recvAlert (SSLSocketImpl.java:2004) на sun.security.ssl.SSLSocketImpl.readRecord (SSLSocketImpl.java:1113) на sun.security.ssl.SSLSocketImpl.performInitialHandshake (SSLSocketImpl.java:1363) на sun.security.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1391)
. , ,
Следовательно, я хочу установить «jsse.enableSNIExtension» в false только для определенных соединений, которые вызывают вышеупомянутое исключение.
Как это сделать на уровне HTTPsURLConnection/SSLSocket?
Код
URL url = new URL("https://artofskinmd.localgiftcards.com/");
HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
httpConnection.connect();
Я пытаюсь найти способ изменить SSLParameters для объекта HttpsURLConnection. Но я не могу найти какой-либо метод setSSLParameters() для установки пустого списка имен серверов. Я не могу найти что-либо в Интернете при настройке SSLParameters для HttpURLConnection, SSLContext и т. Д.
Если вы [не знаю, что последствия безопасности делать этого являются] (http://stackoverflow.com/q/32067124/207421), почему вы спрашиваете? – EJP
Другой вопрос освещает проблемы безопасности с установкой свойства системы jsse. Этот вопрос будет полезен в случае отсутствия высокого риска безопасности при подходе. – Sashwat
В соответствии с немного более старым исходным кодом, который у меня есть и проверен javap для 7u80 и 8u51, 'private final static boolean enableSNIExtension' в' sun.security.ssl.ClientHandshaker' инициализируется только тогда, когда класс загружен **, и есть нет API для его изменения. Untested, но если вы не находитесь под SecurityManager (например,браузерный апплет), он * должен * работать, чтобы использовать отражение, чтобы временно скрыть это. Если какой-либо другой поток (ы) мог бы сделать (клиент) SSL/TLS одновременно, вам нужно mutex; это просто и понятно для синхронизации на «ClientHandshaker.class». –