Tomcat Two-Way SSL доверяет только конкретному сертификату без импорта сертификата CA

у меня есть проблема с двусторонним ssl-соединением tomcat,

Мне нужно настроить веб-сервис, который использует двустороннее ssl-соединение. будут использоваться два разных сертификата: один для ssl-соединения и один для мыльной подписи. Правило заключается в том, что сертификат, используемый для подписи мыла, не может использоваться для соединения ssl, и наоборот.

у клиента есть три сертификата: сертификат ssl, сертификат мыла и собственный сертификат CA, которые подписывают их сертификат ssl и мыло.

проблема заключается в ssl-соединении, когда я импортирую только ssl-сертификат клиента в пользовательский доверенный ресурс tomcat, указанный в файле конфигурации tomcat, соединение вызвало исключение с неверным сертификатом ssl. но когда я попытался импортировать только сертификат CA, ssl-соединение с использованием сертификата SOAP также было принято tomcat, нарушив правило.

Что меня смутило, так это то, что когда я не указал какой-либо пользовательский файл хранилища доверенных сертификатов, который, как я предполагаю, tomcat будет использовать файл cacerts по умолчанию, без импорта какого-либо сертификата клиента в файл cacerts, соединение было принято tomcat. как это возможно? я установил «clientAuth» на «true» в конфигурации tomcat.

кто-нибудь может мне помочь?

Спасибо


person rucciva    schedule 11.12.2014    source источник


Ответы (1)


Посмотрите на это (http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html#Installing_a_Certificate_from_a_Certificate_Authority). Что по существу необходимо сделать, так это импортировать корневой сертификат CA (поскольку сертификат SSL подписан корнем) и сертификат SSL в хранилище ключей и настроить хранилище ключей для SSL на tomcat (вышеприведенный документ подробно описывает шаги). Это должно решить вашу проблему с SSL.

Теперь, что касается проблемы SOAP, подписи, связанные с SOAP, по сути являются подписями XML, и Tomcat не обрабатывает то же самое. Эти подписи соответствуют этой спецификации (http://www.w3.org/TR/SOAP-dsig/), который по сути является расширением. Реализация службы SOAP, например Apache CXF, обрабатывает эти подписи (см.: http://cxf.apache.org/docs/ws-security.html). Хотя вы, возможно, не используете CXF, серверная библиотека на самом деле выполнит это подписание, используя предоставленные вами сертификаты (хранилище для этого сертификата — это другой вопрос).

Что касается последней части вашего вопроса, проверьте, был ли запрос сделан с использованием SSL, Tomcat обычно не принимает запросы SSL на 443/8443, если не настроен сертификат.

person Ironluca    schedule 11.12.2014
comment
Спасибо за ответ. Я пробовал это, но проблема в том, что когда я импортирую сертификат CA, Tomcat принимает ssl-соединение с использованием сертификата SOAP, что запрещено правилом. Я просто не понимаю, какова функция импорта сертификата клиента в хранилище доверенных сертификатов tomcat (не хранилище ключей), если нам все еще нужно импортировать сертификат CA, который его подписал. - person rucciva; 12.12.2014
comment
@rucciva, у Tomcat нет собственного хранилища доверенных сертификатов, по умолчанию он использует javax.net.ssl.trustStore, который обычно указывает на хранилище доверенных сертификатов JVM. SSL также имеет возможность запрашивать сертификат клиента во время рукопожатия, но обычно не используется/не включается. В вашем случае, возможно, вы импортировали сертификат CA в хранилище доверенных сертификатов JVM и включили сертификат клиента для SSL. Теперь в SSL, если клиент предоставляет сертификат и его можно проверить по сертификату CA, тогда устанавливается личность клиента, поэтому сертификат SOAP также будет работать на стороне клиента... продолжение - person Ironluca; 12.12.2014
comment
Сделайте это, для проверки не устанавливайте значение trustStoreFile для конфигурации Tomcat SSL (http://tomcat.apache.org/tomcat-5.5-doc/config/http.html)и иметь только сертификат SSL и сертификат CA в «Хранилище ключей» Tomcat и проверить. Затем установите для clientAuth значение false, т. е. отключите аутентификацию клиента. и проверьте. - person Ironluca; 12.12.2014
comment
здесь написано (http://tomcat.apache.org/tomcat-7.0-doc/config/http.html), что мы можем установить файл хранилища доверенных сертификатов tomcat, указав опцию «truststore». я попытался опустить опцию хранилища доверенных сертификатов в файле конфигурации tomcat, но без импорта какого-либо сертификата клиента (не ЦС тоже). но ssl-соединение также принимается. означает ли это, что сертификат, предоставленный клиентом, может быть проверен центрами сертификации по умолчанию в хранилище доверенных сертификатов jvm? так что tomcat не может доверять клиенту по двустороннему ssl, импортируя только сертификат ssl клиента без сертификата CA клиента? - person rucciva; 12.12.2014
comment
Вы найдете сертификат ЦС по умолчанию в файле «cacerts» в JDK_PATH\jre\lib\security, попробуйте извлечь файл из этой папки и проверить один раз, технически, поскольку сертификаты ЦС отсутствуют, JVM не сможет его проверить. и должен генерировать исключение (или нет). Но сделайте это в том случае, если вы переустанавливаете JDK, если это необходимо. Кроме того, на вашем компьютере может быть более одной JRE (но Tomcat будет использовать ту, которая находится внутри JDK). Это немного другая проблема, поэтому вам, возможно, придется сделать некоторые пробные и ошибочные действия - :) - person Ironluca; 13.12.2014