#ssl #openssl #x509certificate #apache-tomee
#ssl #openssl ( открытый ) #x509certificate #апачи-томи #openssl #apache-tomee
Вопрос:
У меня проблема с остановкой доставки, которая сводит меня с ума. Я надеюсь, что кто-нибудь из вас, экспертов, сможет помочь.
Я использую последнюю версию TomEE (1.6.0.2) и последнюю версию Java 8 (сборка 1.8.0_05-b13). Независимо от того, что я пытаюсь, следующая строка кода в моем HttpServlet всегда возвращает null.
X509Certificate certs[] = (X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate");
Изначально я предположил, что неправильно указал имя атрибута, поэтому, чтобы диагностировать проблему, я решил взглянуть на полный список атрибутов, используя следующее:
Enumeration<String> enums = request.getAttributeNames();
Однако это показало мне только два атрибута: один для набора шифров, а другой для силы ключа.
Я прочитал другие статьи и убедился, что мой соединитель был правильным и что у него был правильно установлен атрибут clientAuth. Вот соединитель:
<Connector port="4449" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLSv1.2"
SSLCertificateFile="/etc/unipagos/certs/pay.crt"
SSLCertificateKeyFile="/etc/unipagos/certs/pay.key"
SSLVerifyClient="required"
SSLHonorCipherOrder="true"
ciphers="TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"/>
Соединение, похоже, работает, однако использование openssl s_client
with -msg
показывает, что сервер не запрашивает сертификат клиента.
Почему сервер не запрашивает сертификат клиента? Что я делаю не так?
Комментарии:
1. Вы пытались установить
SSLCACertificateFile
илиSSLCACertificatePath
? Обычно они требуются при использовании аутентификации по сертификату клиента.2. Позвольте мне попробовать их и посмотреть, работает ли это.
3. Ладно, вопрос… Я использую прямой TLS / SSL в Tomcat / TomEE и не использую Apache или mod_ssl. Учитывая это, по-прежнему ли применимы эти два варианта?
4. Да, вы используете протокол APR (
Http11AprProtocol
), поэтому вам следует обратиться к разделу APR руководства, который очень близок кmod_ssl
параметрам (он даже ссылается на него).5. Я добавил
SSLCACertificateFile
атрибут, указав его на двухуровневую цепочку сертификатов, и это не возымело никакого эффекта. 🙁 Есть идеи?
Ответ №1:
У меня есть рабочая конфигурация соединителя для tomee, и сервер запрашивает сертификат клиента. вы можете попробовать
<Connector port="7443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
SSLProtocol="TLSv1.2"
SSLVerifyClient="require"
SSLCertificateFile="/opt/_cdrom_apache/certs/ec-dev-apr.pem"
SSLCertificateKeyFile="/opt/_cdrom_apache/certs/ec-dev.key"
SSLCACertificateFile="/opt/_cdrom_apache/certs/CA.pem"
/>