一、环境准备
apache2.0.63(OPENSSL) + tomcat 5.0.30 可以从官方网站上下载.
jk_mod 可以从http://tomcat.apache.org/download-connectors.cgi 下载。
操作系统 winxp sp3
apache、tomcat 安装已经可以运行,数字证书已经申请。相关细节可以查看http://files.cnblogs.com/bjrmt/server_Apache.pdf http://files.cnblogs.com/bjrmt/113656.pdf
http://files.cnblogs.com/bjrmt/apache-tomcat-install.pdf 文档。
二、JK 环境配置
官方目前已经不支持JK2,所以我采用的是mod_jk-1.2.26-httpd-2.0.61.so。JK方式主要通过TOMCAT 8009端口进行通信,至于apache tomcat之间采用什么的协议是无所谓的。在tomcat SERVER.XML文件当中有如下内容:
protocol="AJP/1.3" />
配置APACHE:在httpd.conf
添加 LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.0.61.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkRequestLogFormat "%w %V %T"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
SSLEngine on
SSLSessionCacheTimeout 300
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLOptions +StdEnvVars +ExportCertData 当tomcat需要读取客户端证书内容需加上ExportCertData
SSLCertificateFile conf/ssl.crt/localhost.cer CA返回的证书文件
SSLCertificateKeyFile conf/ssl.crt/server.key 通过OPENSSL生成的私钥
SSLCertificateChainFile conf/ssl.crt/cachain.cer 服务器证书验证链文件
SSLCACertificatePath conf/ssl.crt CA根证书文件路径
SSLCACertificateFile conf/ssl.crt/cachain.cer CA根证书文件
SSLVerifyClient require 是否要求客户端证书验证 none为不要求 require 为要求
SSLVerifyDepth 3 证书检索深度,一般放在3或者4即可
ServerName localhost
JkMount /*.jsp worker1
JkMount /*.do worker1
workers.properties文件内容:该不存在需要新建
workers.tomcat_home=D:/Program Files/Apache Software Foundation/Tomcat 5.0
workers.java_home=D:/Program Files/Java/jdk1.5.0_06
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
这样apache的配置完毕,可通过 apache -t 测试,如出现syntax OK,则配置无问题,可以启动服务器。
测试应用页面:
<%@ page import="java.security.*" %>
<%@ page import="java.security.cert.*" %>
<%@ page contentType="text/html; charset=GBK" %>
访问https://localhost/cert.jsp 测试成功。
三、ProxyPass配置较为轻松,可直接配置。不过对于双向的认证,当这种方式时是无法读取证书内容的。至于原因我还不明白呢。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
该四项去掉注释。
SSLEngine on
SSLSessionCacheTimeout 300
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLOptions +StdEnvVars +ExportCertData
SSLCertificateFile conf/ssl.crt/localhost.cer
SSLCertificateKeyFile conf/ssl.crt/server.key
SSLCertificateChainFile conf/ssl.crt/cachain.cer
SSLCACertificatePath conf/ssl.crt
SSLCACertificateFile conf/ssl.crt/cachain.cer
SSLVerifyClient require
SSLVerifyDepth 3
ServerName localhost
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/