一.获取签发服务器证书以及CA证书
1.创建本地证书密钥库以及密钥对
keytool -genkey -alias tomcat -keyalg RSA -keystore <your_keystore_filename>
在填写证书信息时,需要注意的是 "名字与姓氏" 或者 英文的"first- and lastname"填写服务器域名,
比如填写localhost
2.创建证书签发请求文件,里面包含了该文件的base64码用于获取签发证书
keytool -certreq -keyalg RSA -alias tomcat -file certreq.csr -keystore <your_keystore_filename>
3.登录CA服务器http://ip/certsrv高级证书申请,使用base64码提交证书申请
然后使用文本打开*.csr文件,拷贝里面的所有内容,复制到表单,证书模板选择Web 服务器或者自己弄的Web 服务器副本
4.下载申请的证书和CA的证书
比如CA的证书名是cacert.cerweb服务器证书名是tomcat.cer
二.导入证书到证书库
5.将CA证书导入证书库
keytool -import -alias root -keystore <your_keystore_filename> -trustcacerts -file cacert.cer6.将web服务器证书导入证书库
keytool -import -alias tomcat -keystore <your_keystore_filename> -file tomcat.cer三.配置TOMCAT
7.配置$CATALINA_BASE/conf/server.xml
1)单向认证
<Connector port="8443" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" clientAuth="true" sslProtocol="TLS" keystoreFile="<your_keystore_filename>" keystorePass="123456"/>2)双向认证
<Connector port="8443" maxThreads="200" scheme="https" secure="true" SSLEnabled="true" clientAuth="true" sslProtocol="TLS" keystoreFile="<your_keystore_filename>" keystorePass="123456" truststoreFile="<your_keystore_filename>" truststorePass="123456" />8.有兴趣的可以改下log配置,查看转向到https时候tomcat的操作
tomcat修改Log为log4j
然后在log4j.properties里添加
log4j.appender.SSL=org.apache.log4j.DailyRollingFileAppender log4j.appender.SSL.File=${catalina.base}/logs/ssl.log log4j.appender.SSL.Append=true log4j.appender.SSL.Encoding=UTF-8 log4j.appender.SSL.DatePattern='.'yyyy-MM-dd'.log' log4j.appender.SSL.layout = org.apache.log4j.PatternLayout log4j.appender.SSL.layout.ConversionPattern = %d [%t] %-5p %c- %m%n log4j.logger.org.apache.catalina.authenticator=DEBUG, SSL org.apache.catalina.authenticator=DEBUG, SSL用于记录认证过程
9.配置项目web.xml用于只能通过https访问
<security-constraint> <web-resource-collection> <web-resource-name>Login</web-resource-name> <url-pattern>/account/*</url-pattern> <http-method>POST</http-method> <http-method>GET</http-method> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>http-method为当为配置的访问方式时才进行认证跳转
url-pattern跟servlet的配置一样
<transport-guarantee>CONFIDENTIAL</transport-guarantee>这一条则规定只能通过https访问,使用http访问时自动重定向到https如果需要从https跳转到http需要在代码中重定向,暂时不了解其他方法跳转回来
10.启动TOMCAT,访问https://localhost:8443就OK了
参考:
1.TOMCAT SSL HOW-TO
2.TOMCAT自签发证书 SSL双向认证