我们在 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
才行。
本文链接 https://yanbin.blog/apache-ssl-tomcat/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。