前言
讲 HTTPS 之前,我们先来回顾一下 HTTP 协议。HTTP 是一种超文本传输协议,它是无状态的、简单快速的、基于 TCP 的可靠传输协议。
既然 HTTP 协议这么好,那怎么有冒出来了一个 HTTPS 呢?主要是因为 HTTP 是明文传输的,这就造成了很大的安全隐患。在网络传输过程中,只要数据包被人劫持,那你就相当于赤身全裸的暴露在他人面前,毫无半点隐私可言。想象一下,如果你连了一个不可信的 WIFI,正好有使用了某个支付软件进行了支付操作,那么你的密码可能就到别人手里去了,后果可想而知。所以就诞生了 HTTPS 协议。
HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL (安全套接字层)和TLS (安全传输层协议)代替而已。即添加了加密及认证机制的 HTTP 称为 HTTPS ( HTTP Secure )。
HTTPS = HTTP + 加密 + 认证 + 完整性保护
步骤
一:证书配置
1、生成服务端证书
打开mac上的终端,使用keytool为Tomcat生成证书
这个指令的意思是:在/Users/用户名/资源库/Apache/CA/目录下创建tomcat.keystore文件,加密方式为 RSA,有效时间是36500天(100年)
上述指令回车后会提示输入密码及其他一系列认证信息,如下图:
注:在命令行填写必要参数: A、 输入keystore密码----此处需要输入大于6个字符的字符串。B、您的名字与姓氏是什么?----这个必须是tomcat部署主机的域名或者IP,否则浏览器会弹出警告窗口,提示用户证书与所在域不匹配。在本地做开发测试时,应填入“localhost”
2、生成客户端证书
为浏览器生成证书,以便让服务器来验证它。为了能将证书顺利导入至IE和Firefox,证书格式应该是PKCS12,命令如下:
注:myKey.p12是自定义名称,可任意命名。 /Users/.../CA/mykey.p12为证书路径,路径可自定义。双击mykey.p12文件,即可将证书导入至浏览器(客户端)。
3、服务端信任客户端证书
由于是双向SSL认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证。由于不能直接将PKCS12格式的证书库导入,必须先把客户端证书导出为一个单独的CER文件,使用如下命令:
localhost:~ xry$ keytool -export -alias myKey -keystore /Users/xry/Library/Apache/CA/myKey.p12 -storetype PKCS12 -storepass 123456 -rfc -file /Users/xry/Library/Apache/CA/myKey.cer
注:(其中mykey为自定义与客户端定义的mykey要一致,@“123456”是你设置的密码,此处填你设置的密码)。
通过以上命令,客户端证书就被我们导出到“/Users/用户名/工作/CA/mykey.cer”文件中了。 下一步,是将该文件导入到服务器的证书库,添加为一个信任证书使用命令如下:
keytool -import -v -file /Users/用户名/工作/CA/mykey.cer -keystore /Users/用户名/工作/CA/tomcat.keystore
通过list命令查看服务器的证书库,可以看到两个证书,一个是服务器证书,一个是受信任的客户端证书:
keytool -list -keystore /Users/.../CA/tomcat.keystore
(tomcat为你设置服务器端的证书名)。
4、客户端信任服务端证书
由于是双向SSL认证,客户端也要验证服务器证书,因此,必须把服务器证书添加到浏览器的“受信任的根证书颁发机构”。由于不能直接将keystore格式的证书库导入,必须先把服务器证书导出为一个单独的CER文件,使用如下命令:
localhost:CA xry$ keytool -export -keystore /Users/xry/Library/Apache/CA/tomcat.keystore -alias tomcat -file /Users/xry/Library/Apache/CA/tomcat.cer
注:(tomcat为你设置服务器端的证书名)。 通过以上命令,服务器证书就被我们导出到“/Users/.../CA/tomcat.cer”文件了。双击tomcat.cer文件,按照提示安装证书,将证书填入到“受信任的根证书颁发机构”。
如图:
二、Tomcat服务器配置使其支持HTTPS
1、配置server.xml文件
打开Tomcat根目录下的/conf/server.xml,找到Connector port=”8443”配置段,去掉注释并修改如下:
2、配置web.xml文件
打开/conf/web.xml,在最后添加如下内容进行HTTPS强制访问:
这样tomcat就能支持SSL双向认证了。
3、注意事项
A、tomcat6中protocol=”HTTP/1.1”, tomcat7中protocol=”org.apache.coyote.http11.Http11Protocol”;
B、如果要用Eclipse进行测试,必须修改Eclipse工作目录(workspace)下Servers文件夹下的tomcat配置文件才能生效,修改tomcat实际目录下的配置文件是无效的,切记!
C、server.xml文件中非SSL的Connector不能删除,删除后tomcat启动不了,会报超时错误,切记!
D、如果只是支持客户端认证服务端把clientAuth改为false就可以了。
部分内容参考Mac OS X配置tomcat支持HTTPS - 简书,引文中有几处编译失败,本文中有做修改