在另一篇https介绍与应用中主要介绍的是https的基本概念以及要素。这篇介绍的是如何在apache或tomcat中配置https。
首先,要明白以下几点:
- https需要证书,不管是哪一类容器解析这个协议都需要证书
- apache和tomcat协同工作时,只需要配置apache的就可以了
- 这里介绍的是在线安装apache2,系统环境是ubuntu 15.10,apache的在线版本是2.4.2(通过
apache2 -v
查询得到) - 这篇还会介绍,如何配置eclipse的wtp,使之协同apache(https/http协议)进行即时开发和debug
在tomcat中配置https
证书那些事
用java工具生成服务器证书
keytool -genkey -v -alias tomcat -keyalg RSA -keystore tomcat.keystore -validity 36500
需要设置一个keystore密码和在tomcat中使用的密码
可以查看证书列表:
keytool -list -keystore tomcat.keystore
(tomcat为你设置服务器端的证书名)。
双向认证还需要以下步骤:
(1)让客户端信任
keytool -keystore tomcat.keystore -export -alias tomcat -file tomcat.cer
这个可以在客户机上安装
(2)生成客户端证书
keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore mykey.p12
(3)让服务器信任
keytool -export -alias mykey -keystore mykey.p12 -storetype PKCS12 -storepass 87654321 -rfc -file mykey.cer
下一步,是将该文件导入到服务器的证书库,添加为一个信任证书使用命令如下:
keytool -import -v -file mykey.cer -keystore tomcat.keystore
在tomcat中使用证书
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true" maxThreads="150" scheme="https"
secure="true" clientAuth="false" sslProtocol="TLS"
keystoreFile="${user.home}/p/apache-tomcat-7.0.68/tomcat.keystore" keystorePass="123456"
truststoreFile="${user.home}/p/apache-tomcat-7.0.68/tomcat.keystore" truststorePass="123456" />
这样就可以通过https访问:
https://192.168.16.71:8443/locator/v3/tikimo
另外,在web.xml可以配置为强制用https访问,这样访问会自动跳转
<security-constraintg>
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
附,权威签名方法:使用certbot证书实现对HTTPS的支持
在apache中配置https
(1)在线安装apache2
sudo apt-get install apache2
(2)启动apache2
不能直接输入apache2,它是一个服务,正确的方法是service apache2 start
。如果启动失败,可以通过跟踪模式了解到问题出在哪里:systemctl status apache2.service -l
需要介绍的是在线安装版的apache的几个主要目录:
- /usr/lib/apache2/modules 库文件放在这里
- /etc/apache2/mods-enabled/ 组件配置与加载放在这里,不过都是快捷方式,真正可以被采用的都放在/etc/apache2/mods-available/目录下
- /etc/apache2/sites-enabled/000-default.conf 虚拟目录及网站在这里配置
(3)配置JK
mod_jk是apache与tomcat的connector,当然可以下载相应版本的库存放本地:/usr/lib/apache2/modules/mod_jk.so
配置文件和加载文件也要,可以放在前文所述的/etc/apache2/mods-available/
下,然后用在/etc/apache2/mods-enabled/
下创建快捷方式:ln -s source_file target_dir
jk.load的内容是
LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so
jk.conf的内容是:
JkWorkersFile /etc/apache2/mods-enabled/jk_workers.properties
JkLogFile /var/www/iwit/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
jk_workers.properties的内容是:
worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=localhost
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.cachesize=10
worker.worker1.cache_timeout=600
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
(4)配置host
vim /etc/apache2/sites-enabled/
的内容是:
<VirtualHost *:80>
ServerName 192.168.16.71
ServerAlias tl
#DocumentRoot /var/www/iwit/locator_3.0
JkMount /* worker1
ErrorLog /var/www/iwit/err.log
CustomLog /var/www/iwit/access.log combined
</VirtualHost>
(5)配置HTTPS
- 需要签名文件及签名所用的密码,用的是128位rsa非对称加密算法
openssl genrsa 1024 > server.key
- 生成证书请求文件,后续需要填写相当多的证书相关的资料
openssl req -new -key server.key > server.csr
- 由前面两者生成证书
openssl req -x509 -days 365 -key server.key -in server.csr > server.crt
- 查看证书是否有效,打开验证即可
openssl x509 -in server.crt -text -noout
- 将证书和密钥复制到相应的位置
sudo cp server.crt /etc/ssl/certs
以及sudo cp server.key /etc/ssl/private
- 添加host,要像第(4)一样添加host,注意端口443,这样http/https都支持了,注意这个host的相关属性都要打开
<VirtualHost *:443>
ServerName 192.168.16.71
ServerAlias tl
#DocumentRoot /var/www/iwit/locator_3.0
SSLEngine On
SSLOptions +StrictRequire
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
JkMount /* worker1
ErrorLog /var/www/iwit/err.log
CustomLog /var/www/iwit/access.log combined
</VirtualHost>
(6)看效果,在WTP配置好的情况下,输入http(s)://tl/xx或http(s)://192.168.16.71/xxx,都能正常访问了。
如何与WTP连接
WTP指的是eclipse的web tools platform工程,将在发布到server容器,可以在eclipse工具平台上运行web应用,主要特点是在开发的同时能自动发布。因此,当软件过程正处理开发和debug阶段好用,通常在局域网内用,公网的方法可同受此方法启示。
正常的WTP发布很简单,添加一个server(通常tomcat),将WTP工程添加到server上,即可。
现在这里要讲的是:
- apache+tomcat+wtp联合,能通过域名(其实就是计算机名)或局域网IP访问WTP程序。
- 同时支持HTTP/HTTPS访问。
- WTP的工作目录自定义
在eclipse中server.xml需要配置的内容不多,主要有以下几点注意:
- 自定义WTP工作目录,点击server,打开配置标签页,配置
Server Locations
项目就可以了,注意server path
下会保存其它配置信息,就像tomcat的一个根目录下的其它文件一样,deploy path
才是各个项目发布的父文件夹,相当于通常的webapps
,项目文件夹无法自定义。 - 在server.xml(eclipse中的,相当于tomcat本身的一个拷贝)的host节点下添加以下子项:
<Alias>192.168.16.71</Alias>
因为默认的localhost不能被更改,更改启动失败了。这指两个域名(或IP)指向同一个HOST节点。HOST节点下的path,可配成""
- server.xml中的
<connector ... redirectPort="8443">
中的redirectPort指,当https请求到达这个端口时,跳转到相应的8443端口