我尝试在本地 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 在端口 上运行,80
tomcat 在 下运行其 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 上下文/?