JkEnvVar SSL_CLIENT_CERT не работает, когда «SSLVerifyClient require» (настройка на уровне каталога) - PullRequest
1 голос
/ 08 марта 2011

[Моя среда такова: Apache / 2.2.17 (Win32) mod_ssl / 2.2.17 OpenSSL / 0.9.8o PHP / 5.2.9-2 mod_jk / 1.2.31 (хотя мы получаем то же самое поведение под Ubuntu 10.04.2 LTS с похожими спецификациями apache / mod_jk / tomcat)]

Я настроил виртуальный хост для обслуживания https, и я хочу, чтобы там были два типа каталогов / приложений: один обслуживался через «простой» https, а другой - с аутентификацией клиента (с сертификатами клиента).

Когда «SSLVerifyClient require» размещается на уровне виртуального хоста, соответствующий JkEnvVar SSL_CLIENT_CERT правильно передает информацию в tomcat. Когда он размещен на уровне каталога (внутри виртуального хоста), это не так. Любые подсказки ??

мой httpd.conf содержит следующие строки:

...
JkWorkersFile conf/workers.properties
JkShmFile     "C:/Program Files/Apache Software Foundation/Apache2.2/logs/mod_jk.shm"
JkLogFile     "C:/Program Files/Apache Software Foundation/Apache2.2/logs/mod_jk.log"
JkLogLevel    debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

Include conf/extra/httpd-ssl.conf
...

где conf / worker.properties это просто следующее:

worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009

и conf / extra / httpd-ssl.conf содержит следующие строки:

Listen 443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl

SSLPassPhraseDialog  builtin

SSLSessionCache        "shmcb:C:/Program Files/Apache Software Foundation/Apache2.2/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300

SSLMutex default

<VirtualHost _default_:443>
    DocumentRoot "C:/https"
    ServerName www.webrep.local
    ServerAdmin webmaster@webrep.local
ErrorLog "C:/Program Files/Apache Software Foundation/Apache2.2/logs/https-error.log"
TransferLog "C:/Program Files/Apache Software Foundation/Apache2.2/logs/https-access.log"

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/ssl/my-server.cert"
SSLCertificateKeyFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/ssl/my-server.key"

SSLCACertificateFile "C:/Program Files/Apache Software Foundation/Apache2.2/conf/ssl/ca/myCA.pem"

SSLOptions +StdEnvVars +ExportCertData
Alias /examples/oneway/ "C:/https/oneway/"
<Directory "C:/https/oneway">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

Alias /examples/twoway/ "C:/https/twoway/"
<Directory "C:/https/twoway">
    SSLVerifyClient require
    SSLVerifyDepth  10
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

BrowserMatch ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog "C:/Program Files/Apache Software Foundation/Apache2.2/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

JkMount  /examples/oneway/servlets/* worker1
JkMount  /examples/twoway/servlets/* worker1
JkExtractSSL Off
JkEnvVar SSL_CLIENT_S_DN
JkEnvVar SSL_CLIENT_CERT

</VirtualHost>                                  

В Tomcat я только что добавил простой вывод сервлета:

request.getAttribute("SSL_CLIENT_CERT")

под

C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\examples\WEB-INF\classes

1 Ответ

0 голосов
/ 11 марта 2011

Кажется, что проблема не в JkEnvVar, а в том, что, по-видимому, когда JkMount и + Alias ​​ссылаются на один и тот же URL-адрес, JkMount имеет преимущество, а директивы внутри никогда не вступают в силу (например, попробуйте ограничить доступ коdir с «Запретить от всех» - он никогда не вступает в силу; сервлеты / jsps получают доступ очень хорошо).

Два решения:

1) Используйте директиву для контроля доступа к коду, которыйбудет работать в Tomcat (то есть сопоставляться с Tomcat через JkMount).2) Используйте 'SetHandler jakarta-servlet' вместо JkMount (см. Конец http://tomcat.apache.org/connectors-doc/reference/apache.html для более подробной информации).Это работает внутри.Мне сказали, что это также работает внутри, но я не проверял это.

Надеюсь, это спасет кого-то от многих часов, которые мы потратили здесь, чтобы решить эту проблему ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...