Я пишу прокси-сервер Java, который обменивается данными с другими серверами с помощью SSL. Все это хорошо работает с использованием ServerSocketFactory вместе с хранилищем ключей и trustore, которые заполняются сертификатом сервера.

Интересно, есть ли в Java 7 способ отключить сертификацию и доверять всем серверам? (и да, я знаю, что это рискованно - но прокси предназначен только для внутреннего использования)

Я видел несколько примеров реализации TrustManager с использованием реализации X509TrustManager, хотя, очевидно, Java 7 не поддерживает эти контракты, а сам X509TrustManager устарел.

Цените ваш совет и любой пример кода на Java 7, который работает.

3
Uri Lukach 19 Дек 2013 в 15:34

2 ответа

Лучший ответ

Я реализовал java.security.Provider с использованием кода, упомянутого в этом посте.

https://code.google.com/p/misc-utils/wiki/JavaHttpsUrl

Примечание: это второе предлагаемое решение.

В этом посте не упоминается, что вам также следует добавить хранилище ключей, чтобы все работало. Таким образом, этот аргумент виртуальной машины также должен быть установлен (если только вы не получите сообщение об ошибке « нет общих наборов шифров »):

                -Djavax.net.ssl.keyStore=KEYSTORE LOCATION
                -Djavax.net.ssl.keyStorePassword=YOUR PASS

Надеюсь, это поможет вам, так как во всех местах, где я смотрел, эта часть не упоминалась.

0
Uri Lukach 22 Дек 2013 в 11:55

Прокси-серверы MITM (то есть серверы, способные просматривать трафик SSL / TLS) обычно используют свой собственный ЦС для создания поддельных сертификатов для запрашиваемого сайта.

Установите этот сертификат CA в хранилище доверенных сертификатов вашего клиента вместо того, чтобы настраивать код. Это гораздо более чистое решение, и в конечном итоге его проще развернуть.

(Для более прямого ответа на ваш вопрос, бесчисленные примеры доверенных менеджеров, которые ничего не делают, все еще отлично работают в Java 7.)

1
Bruno 19 Дек 2013 в 17:06