Назад | Перейти на главную страницу

Tomcat за Apache httpd с SSL и клиентскими сертификатами

Я пытаюсь оценить инфраструктуру для клиента на моей локальной машине win32. Инфраструктура должна быть основана на j2ee webapp, запущенном на tomcat (6.0.20+), за secur apache httpd (httpd-2.2.16 / openssl-0.9.8), который пересылает только те запросы, которые авторизованы (с клиентом сертификат).

Мой подход заключался в том, чтобы решить связь между tomcat и apache с помощью mod_jk и соответствующие ajp13 протокол. Tomcat (ajp13) работает на порту 8099, я настроил workers.properties и мой mod_jk.conf (и включил его в httpd.conf). Подключение работает успешно. Httpd работает на порту 80 кот запускает свой http-порт под 8084. При отправке http-запроса на http://localhost/my-webapp-context. Котики отвечают и показывают мое веб-приложение.

Пока есть следующие файлы конфигурации:

mod_jk.conf

LoadModule    jk_module  modules/mod_jk.so
#LoadModule    ssl_module  modules/mod_ssl.so

JkWorkersFile conf/workers.properties
JkShmFile     logs/httpd/mod_jk.shm
JkLogLevel    info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

JkMount /* balancer

worker.properties

worker.list=jk-status
worker.jk-status.type=status
worker.jk-status.read_only=true
worker.list=jk-manager
worker.jk-manager.type=status
worker.list=balancer
worker.balancer.type=lb
worker.balancer.error_escalation_time=0
worker.balancer.max_reply_timeouts=10
worker.balancer.balance_workers=node1
worker.node1.reference=worker.template
worker.node1.host=localhost
worker.node1.port=8109
worker.node1.activation=A
worker.balancer.balance_workers=node2
worker.node2.reference=worker.template
worker.node2.host=localhost
worker.node2.port=8099
worker.node2.activation=A
worker.template.type=ajp13
worker.template.socket_connect_timeout=5000
worker.template.socket_keepalive=true
worker.template.ping_mode=A
worker.template.ping_timeout=10000
worker.template.connection_pool_minsize=0
worker.template.connection_pool_timeout=600
worker.template.reply_timeout=300000
worker.template.recovery_options=3

Как описано, это работает как шарм, теперь я прочитал несколько руководств по ssl. Я уже создал server.key (без закрытого ключа, потому что это, похоже, не работает на платформе win32) и server.cer который сертифицирован нашим местным центром сертификации.

Когда дело доходит до включения mod_ssl я получаю несколько ошибок. Я пробовал следующую конфигурацию:

<VirtualHost *:443>
  SSLEngine On
  SSLCertificateFile conf/server.cer
  SSLCertificateKeyFile conf/server.key
</VirtualHost>

В этой конфигурации я выдаю предстоящую ошибку (где CN - это имя моего компьютера в локальной сети), это также значение, которое я предоставил при создании сертификата. Apache отказывается запускаться с этой конфигурацией и показывает мне указанную ошибку.

Обновить

Теперь я наконец получил apache с запущенными ssl и клиентскими сертификатами:

mod_jk_ssl.conf

LoadModule    jk_module  modules/mod_jk.so
LoadModule    ssl_module  modules/mod_ssl.so

JkWorkersFile conf/workers.properties
JkShmFile     logs/httpd/mod_jk.shm
JkLogLevel    info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

Listen 443

<VirtualHost *:443>
 JkMount /* balancer

 SSLEngine On
 SSLCertificateFile conf/web.crt
 SSLCertificateKeyFile conf/web.key
 SSLCACertificateFile conf/exampleCA.crt
 SSLVerifyClient require
 SSLVerifyDepth 2

 <IfDefine SSL>
     SSLRequireSSL
     SSLRequire           %{SSL_CLIENT_S_DN_O}  eq "certification-authority" and  
     %{SSL_CLIENT_S_DN_OU} in {"BALVI"}
 </IfDefine>
</VirtualHost>

Капитан Очевидно здесь. Вы дали мое-имя-компьютера точно как есть, включая доменное имя? Если нет, создайте ключ еще раз.

Вы всегда можете добавить перенаправление на apache, чтобы перейти прямо к вашему веб-приложению.

RedirectMatch ^ / (.) / $ http://host.domain.com/your-webapp-context/?