繁体   English   中英

使用SSL将WAR部署到Tomcat 8

[英]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/testApplicationERR_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM