[英]Deploy WAR to Tomcat 8 with SSL
我已经使用Intellij IDEA开发了一个Web应用程序,并且使用了IDE的Build函数来生成WAR文件。 我的应用程序的web.xml包含以下代码段:
<security-constraint>
<web-resource-collection>
<web-resource-name>sslTestApp</web-resource-name>
<url-pattern>*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
这样我的应用程序中的每个页面都将使用SSL保护。
我还使用了keytool
并且已按照Tomcat官方文档中的说明在conf/server.xml
8443端口上启用了HTTPS。
当我从IDE启动项目时,只要在端口8443上启用SSL,它就可以很好地运行,但是如果将.war文件放在tomcat的webapps目录中,请重新启动服务器并导航至https://localhost:8443/testApplication
, ERR_TIMED_OUT
错误。
如果我编辑部署的应用程序的web.xml并删除上面的段,从而允许该应用程序在默认端口8080上运行,则该应用程序将平稳运行。
因此,使用Intellij,两个端口都可以工作,但是如果我手动部署该应用程序,则只有8080可以正常工作。 我错过了什么吗?
看来IntellijIdea部署和手动之间的区别是您应用程序的上下文路径。 Intellij idea默认情况下作为根应用程序运行该应用程序,因此您可以在没有上下文路径的情况下进行访问。
尝试在web.xml /testApplication/*
url-pattern修改为此/testApplication/*
,构建您的war构件并将其手动部署到Tomcat
<web-resource-collection>
<web-resource-name>sslTestApp</web-resource-name>
<url-pattern>/testApplication/*</url-pattern>
</web-resource-collection>
以防万一其他人可能遇到相同的问题,解决方案是在server.xml
显式设置密钥的位置和密钥别名,如下所示:
<Connector port="8443" protocol="HTTP/1.1"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="C:\mykeystore"
keyAlias="mykey"
clientAuth="false" keystorePass="yourPassword" sslProtocol="TLS" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.