«java.net.SocketException: Socket closed» означает, что ваша сторона закрыла сокет. Вы говорите, что это происходит, когда вы пытаетесь установить SSL-соединение с вашим сервером. Однако трассировка стека предполагает, что это происходит, когда HTTPClient пытается записать HTTP-запрос по уже установленному соединению.
Это может произойти, если, например, вам каким-то образом удалось заставить HTTPClient отправлять запрос через соединение, которое ранее было закрыто HTTPClient или, что более вероятно, каким-либо другим кодом на вашей стороне. Проверьте, обращаетесь ли вы где-нибудь к соответствующему сокету. Или может быть так, что сокет закрыт по протоколу SSL / TLS (если я не ошибаюсь, SSL / TLS имеет свой собственный протокол более высокого уровня для закрытия основного соединения), но HTTPClient каким-то образом удалось этого не заметить (дон Не знаю, возможно ли это, но, скажем, удаленная сторона закрыла соединение SSL, но использовала постоянные соединения HTTP / 1.1 и не установила соединение: закрытый ответ).
Вы можете устранить эти проблемы, проанализировав трафик TCP с помощью tcpdump / Wireshark. Вы также можете запустить stunnel на компьютере с HTTPS-портом сервера, а затем заставить свой код взаимодействовать с сервером по обычному HTTP через этот туннель. Это должно позволить вам видеть HTTP-трафик в текстовом виде.
«java.net.SocketException: Тайм-аут соединения» означает, что TCP-соединение не может быть установлено из-за тайм-аута. Возможно, пакеты сбрасываются брандмауэром. Например, может случиться так, что вам нужно использовать HTTP-прокси для выполнения запросов HTTPS. Может также случиться так, что серверный компьютер действительно занят или сеть действительно занята. Опять же, я предлагаю вам попробовать tcpdump / Wireshark, чтобы увидеть, что происходит на уровне TCP.