Apache 配置 SSL(HTTPS) 并整合 Tomcat

我们在 Tomcat 中可以开启 SSL,用 HTTPS 来访问,见前一篇 快速启用 Tomcat 的 HTTPS 协议访问,不过更接近实际的应用是 Tomcat 只担当 Servlet 容器,HTTPS 协议部份,甚至是静态页面是交给 Apache 的处理,Apache 与 Tomcat 之间有一个通道。当然前端用 F5 那类负载均衡设备就另当别论了。

这里实践一下怎么开启 Apache 的 HTTPS,并与 Tomcat 进行整合的操作。平台是 Mac OS X, Apache2, Tomat8,其他平台或不同版本的应用软件配置类似。

第一步: 生成自签署证书

安全加密的东西都得证书,我们需要用到 openssl,没有就先安装它,命令是:

openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key

上面命令可以指定生成 server.crt 和 server.key 文件的目录,默认产生在当前目录下,假设这两个文件生成在 /etc/apache2 目录下。

第二步: 配置 httpd.conf

确保加载了 ssl_module 模块,比如像这样的行是打开的

LoadModule ssl_module libexec/apache2/mod_ssl.so

打开 443 端口及相关的配置, 可能在 extra/httpd-ssl.conf 中,则要打开像下面的这行

Include /private/etc/apache2/extra/httpd-ssl.conf

不同的 OS 或 Apache 可能配置在不同的地方,总之必须保证 Apache 中有下面那样的配置

Listen 443

<VirtualHost _default_:443>
    SSLEngine on
    SSLCertificateFile "/etc/apache2/server.crt"
    SSLCertificateKeyFile "/etc/apache2/server.key"
</VirtualHost>

其他的如 Apache 的 VirtualHost 通用配置都可以放里面,比如 DocumentRoot, ServerAdmin, ServerName, ErrorLog, CustomLogs 等

sudo apachectl restart

重启 Apache 后就可以用 https://localhost 来访问你的 Apache 服务了。

第三步: 整合 Tomcat

Apache 与 Tomcat 通信可以通过以下三种 Connector

Java HTTP Connector: http://tomcat.apache.org/tomcat-8.0-doc/config/http.html (blocking & non-blocking)
Java AJP  Connector: http://tomcat.apache.org/tomcat-8.0-doc/config/ajp.html
APR (HTTP/AJP) Connector: http://tomcat.apache.org/tomcat-8.0-doc/apr.html

我们这里要用到的就是 Java AJP,需要再到前面的   中添加

ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/

重启 Apache 后,这里访问 https://localhost 就转到 Tomcat 中了,和 http://localhost:8080 一个界面,是不是看到了那只可能的大雄猫了。

不用 ajp://localhost:8009/ 你也可直接代理到 http://localhost:8080/,这和 Tomcat  的 Connector 没什么关系,完全是 Apache 的 ProxyPass 的功能了。

到这里,基本是配置就完成了,这里不涉及到负载均衡。

由于上面用的是自签署的证书,而不是由第三方机构颁发的,所以浏览器访问时有安全警告,需手动信任一下,并且用 curl 命令访问时也要带个参数 -k 才行。

类别: Java/JEE, Linux/Unix, Mid-Ware. 标签: , , . 阅读(1,062). 订阅评论. TrackBack.

Leave a Reply

avatar