参考教程: Apache Tomcat 7 SSL/TLS Configuration HOW-TO
1.首先需要了解下看看https运行流程:
(1):客户端(浏览器)发送https请求到服务器
(2):服务器有私钥和公约
(3):服务器返回公钥给客户端
(4):客户端通过系统根证书机构验证公钥是否有效,验证公钥、时间、机构等信息
(5):客户端验证成功后生成一定长度的随机数(如2048位),然后使用公钥通过证书支持的算法与随机数加密然后发送给服务器
(6):服务器接受到加密数据口通过私钥解密然后取得随机数
(7):然后使用随机数通过证书支持的算法(如:RSA)把内容加密然后响应给客户端
(8):客户端使用随机数解密内容。
整个https数据交互中涉及到公钥,私钥
2.生成密钥对:
keytool -genkeypair -alias testdomain -keyalg RSA -keysize 2048 -validity 3650 -keystore e:\\testdomain.keystore
其中名字和姓氏是自己的域名,其他的任意。
生成了以后就在e:\\盘能看到testdomain.keystore 文件了
3.配置tomcat https:
打开%TOMCAT_HOME%/conf/server.xml
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="443"
maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="e:\\testdomain.keystore" keystorePass="123456"
clientAuth="false" sslProtocol="TLS"/>
keystoreFile:是密钥对的路径,keystorePass:是配置密钥对时候的密钥口令。
然后保存启动tomcat。在浏览器中输入:https://test.domain.com 因为我在c:/windows/system32/drivers/etc/hosts中配置了 :127.0.0.1 test.domain.com 所以我访问它也就相当于访问本地服务器了。
打开浏览器的结果页面: (如果打不开该页面,或者打开后不正常 用netstat -ano |findstr "443" 这条命令查询443端口是否被占用,或者把端口改成其他的或默认8443.如果端口是非443则访问的时候需要单独输入端口号)
因为还未生成证书,所以浏览器(操作系统)不信任当前https链接则出现当前页面。
如果已有证书 (跳过4,5步骤)导入证书到keystore中
keytool -import -alias tomcat -keystore <your_keystore_filename> -file <your_certificate_filename>
4.接下来生成证书:
keytool -exportcert -alias testdomain -keystore e:\\testdomain.keystore -file e:\\testdomain.cer
-exportcert命令详解
导出证书后,就能在e盘看到testdomain.cer文件了。
5.安装证书让操作系统信任该证书
双击打开证书:
点击安装证书
选择当前或本地计算机,然后下一步
选择第二个:将所有的证书都放入下列存储,然后点击浏览。
然后下一步与完成
这儿选择是
6.然后关闭浏览器重新打开
现在就能看到https已经受信任了。
7.配置默认使用https:
在%TOMCAT_HOME%/conf/web.xml webapp标签里面 最后添加以下代码
<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<!-- Authorization setting for SSL -->
<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>