tomcat搭建https服务
Posted Excalibur
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat搭建https服务相关的知识,希望对你有一定的参考价值。
平时做自己的web demo基本上都是用http协议进行访问。
但是正式情况基本上都是https进行访问,所以掌握https的配置是很关键的。
需要准备的材料:
一台可以可以外网访问的远程服务器
tomcat 8.5
java环境(自行百度安装过程和配置环境变量)
web项目war包(可有可无)
第一步:
在远程服务器上配置好java环境后就是安装tomcat:
详情请见(tomcat安装、配置、使用):https://www.cnblogs.com/longLifeFrog/articles/8612260.html
过程是windows的,但是lunix也大同小异,思路基本一样,可以自行百度搜索相关安装过程
第二步:
由于我这台远程服务器开了2个端口8080和443。
所以这步要完成用tomcat部署2个不同端口的项目。
先将webapps文件夹和conf文件夹下面的Catalina文件夹,copy一份,如下图所示:
接下来是修改conf/server.xml:
代码如下:
<?xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <!--http配置--> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service> <Service name="Catalina2"> <Connector port="443" protocol="HTTP/1.1" connectionTimeout="20000" maxThreads="150" redirectPort="8443" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="C:\\Program Files\\Apache Software Foundation\\Tomcat 8.5\\www.xxxx.com.jks" keystorePass="xxxxxx" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina2" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps2" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service> </Server>
上图中8080端口是http形式,如果要将其改成https可以参考443端口的配置。
上图中www.xxxx.com.jks是从权威机构拿到的证书,keystorePass填相应的密码。
第三步:
copy项目到webapps和webapps2,然后运行startup,访问。这样就成功了。
补充:
1、http自动跳转https的安全配置:
到conf目录下的web.xml。在 </welcome-file-list>后面, </web-app>之前,也就是倒数第二段里,加上这样一段:
<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>
结果如下图所示:
这步目的是让非ssl的connector跳转到ssl的connector去。所以还需要前往server.xml进行配置:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />
redirectPort改成ssl的connector的端口443,重启tomcat后便会生效。
以上是权威证书的https配置方法。
最后附上使用jdk的keytool工具生成自签发证书及认证过程(单向和双向认证都能通):https://www.cnblogs.com/longLifeFrog/p/9069715.html
以上是关于tomcat搭建https服务的主要内容,如果未能解决你的问题,请参考以下文章