Tomcat 在 Apache httpd 后面,带有 SSL 和客户端证书

Tomcat 在 Apache httpd 后面,带有 SSL 和客户端证书

我尝试在本地 win32 机器上为客户评估基础架构。基础架构应基于在 tomcat (6.0.20+) 上运行的 j2ee webapp,位于 secur apache httpd (httpd-2.2.16/openssl-0.9.8) 之后,该 httpd 仅转发那些经过授权(使用客户端证书)的请求。

mod_jk我的方法是使用 和相应的协议解决 tomcat 和 apache 之间的连接ajp13。tomcat (ajp13) 在端口 上运行8099,我配置了workers.properties和我的mod_jk.conf(并将其包含在 中httpd.conf)。连接成功。httpd 在端口 上运行,80tomcat 在 下运行其 http 端口8084。向 发送 http 请求时http://localhost/my-webapp-context。tomcats 会回答并显示我的 webapp。

目前为止有以下配置文件:

mod_jk配置文件

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.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 拒绝使用此配置启动并向我显示列出的错误。

更新

现在我终于让带有 ssl 和客户端证书的 apache 运行了:

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>

答案1

我是队长。你确实给了我的计算机名称是否完全按照原样保存,包括域名?如果不 ...请再次重新创建密钥。

答案2

你可以随时添加一个重定向到 apache,直接进入你的 web 应用程序

重定向匹配 ^/(.)/$http://host.domain.com/你的 webapp 上下文/

相关内容