Итак, у меня такая ситуация: я пытаюсь загрузить изображение с somedomain.com, используя HTTPS. Домен, вероятно, неправильно настроен, но, к сожалению, я не могу это изменить. Что именно происходит:
Когда я перехожу на https://somedomain.com/animage.jpg, я получаю действительный сертификат, выданный для somedomain.com, который идеально подходит. Но когда я звоню на тот же сайт, используя его IP-адрес, скажем https://123.123.123.123 - я получаю (также действительный) сертификат для * .hostingcompany.com - сертификат хостинговой компании.
Теперь я пытаюсь загрузить содержимое файла, используя Java HttpsUrlConnection
, ничего особенного:
var urlConnection = new URL(imageUrl).openConnection();
((HttpURLConnection) urlConnection).getResponseCode();
(я хочу сначала проверить код ответа, но здесь это не важно.)
Этот код запускается внутри Spring Boot App и запускается по запросу. Он отлично работает для первого запроса с момента загрузки приложения. Каждый последующий запрос завершается с java.security.cert.CertificateException: No subject alternative DNS name matching somedomain.com found
. Это происходит потому, что при каждом последующем запросе SSL Handshake отправляется на IP, а не на имя хоста, и получает сертификат хостинговой компании.
Я пытался найти разные настройки для классов SSL, но безрезультатно. Я знаю, что есть обходной путь, когда я мог бы предоставить свой HostnameVerifier
, который мог бы просто вернуть true, но это не было бы безопасно, поэтому я не хочу этого делать.
Кто-нибудь сталкивался с такой проблемой? Может я ищу не в тех местах? Может быть это что-то с ДНС? Я буду признателен за любую помощь.