Я просто попытаюсь вспомнить несколько вещей, чтобы, возможно, заполнить ваш контрольный список. Я не могу привести полный пример. Я предполагаю, что вы контролируете как клиентский, так и серверный код. Или, по крайней мере, клиентский код и полная настройка конфигурации сервера.
0 - используйте wireshark, чтобы узнать, что происходит.
1 - убедитесь, что ваша сторона сервера отправляет сертификат accept-client-cert или требует-клиента-сертификат на сервере hello. Curl может работать только потому, что сервер не «требует» его, а только запрашивает его.
2 - убедитесь, что подписчик сертификата клиента будет доверен серверу. Иногда это означает взломать хранилище сертификатов (CA) сервера, если вы будете делать самоподписанный сертификат клиента при тестировании.
3 - с помощью wireshark, посмотрите диалог ssl / tls и убедитесь, что как clienthello, так и serverhello ожидается (в основном, если serverhello запрашивает / требует аутентификации клиента и если клиент даже пытается отправить его). Во всяком случае, это довольно познавательно.
4-напишите тривиальный код, используя руководства по jsse снизу вверх. сделать код ката, чтобы увидеть, есть ли хранилище ключей / castore, содержит то, что вы ожидаете. Затем перейдите к безопасной настройке сокета [server], keymanager, trustmanager и hostnameverifier (с или без опасного обхода двух последних, которые некоторые осмеливаются предложить). Когда эти 4 части настроены, вы готовы на 99%, и ваш сокет ssl / tls должен работать. Несколько вещей, которые обычно могут помешать вашему соединению ssl / tls, - это несовместимый набор шифров или версия tls, или сертификаты с недопустимыми датами. Поскольку вы управляете и клиентом, и сервером, это не должно вызывать проблем.
5 - как только вы можете доверять поведению на стороне клиента, вы можете попытаться подключиться к серверу https, как tomcat или jetty (я не знаю, что вы используете) и отправляете сырой GET на sslsocket с вашим java клиентом.
6-Когда это работает, теперь вы можете передать свой sslsocketfactory многим стекам http [s] (smtp, httplient, даже core JDK httpurlconnection).