APACHE2.0 TOMCAT5.0 SSL 配置

  最近因为有个项目,对方采用APACHE+TOMCAT方式进行应用配置。之前对于APACHE+TOMCAT合作方式并不是很了解,通过GOOGLE基本了解后开始了试验环境搭建及测试。从各方面文档看主要配置手段可以分为JK和ProxyPass方式。还有一种AJP我没有找到合适的配置文档,所以没有成功。这里我只介绍前两种的配置方法。

一、环境准备

    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文件当中有如下内容:

  <Connector port="8009"
               enableLookups="false" redirectPort="8443" debug="0"
               protocol="AJP/1.3" />

当tomcat 启动时--APACHE2.0 TOMCAT5.0 SSL 配置

 配置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

<VirtualHost *:80>
<IfModule mod_ssl.c>
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即可
</IfModule>
ServerName localhost
JkMount /*.jsp worker1
JkMount /*.do worker1
</VirtualHost>

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" %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY bgColor=#e4edff>
<%
 boolean bRevoked=false ;
 boolean isFaf = true;
 X509Certificate x509Cert;
 String str="";
 //////////////////////////////jsp get request certificata
 X509Certificate certs[] = (X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate");
 x509Cert = certs[0];
 out.println("SerialNumber: "+x509Cert.getSerialNumber().toString(16));
 out.println("<br>");
 out.println("<br>");
 out.println("SubjectDN: "+x509Cert.getSubjectDN().toString());
 out.println("<br>");
 out.println("<br>");
%>
</BODY>
</HTML>

访问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

该四项去掉注释。

<VirtualHost *:80>
<IfModule mod_ssl.c>
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
</IfModule>
ServerName localhost
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/
</VirtualHost>

你可能感兴趣的:(apache)