首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将HTTP重定向到HTTPS: Tomcat中的端口

将HTTP重定向到HTTPS: Tomcat中的端口
EN

Stack Overflow用户
提问于 2015-10-19 15:25:21
回答 7查看 88.6K关注 0票数 29

我有一个正在运行的tomcat应用程序,它已经具有以下从HTTP到HTTPs的重定向规则:

代码语言:javascript
运行
复制
<Connector executor="tomcatThreadPool"
               port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" />

是否可以添加一个例外/规则,即特定的HTTPrequest (http://www.example.com)将被重定向到另一个指定了端口(例如https://www.example.com:8443/test)的特定地址,而无需更改/删除上面的连接器?

EN

回答 7

Stack Overflow用户

发布于 2015-10-22 13:43:13

您所显示的连接器配置不会按照您设想的方式重定向特定的URL。

如果您已经为servlet容器中的web应用程序配置了CONFIDENTIAL传输保证,那么该配置就会起作用。

我的意思是,如果您在该连接器上部署了任何应用程序,其中其web.xml描述符具有如下所示的security-constraint

代码语言:javascript
运行
复制
<security-constraint>

    <web-resource-collection>
        <web-resource-name>Secured</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>

    ...

    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>

</security-constraint>

然后,Tomcat会将任何匹配的url-pattern重定向到配置的端口,以便使用HTTPS作为传输中的机密性保证。

因此,如果要重定向特定URL,则必须使用特定应用程序配置来补充连接器的配置。

编辑

正如您在评论中建议的那样,这可能是使此配置工作的另一个步骤。一旦你已经配置了http连接器,然后像我告诉你的那样配置了app,你只需要确保你的Tomcat服务器已经配置了HTTPS连接器,其他方式的重定向将不起作用。

要配置此HTTPS连接器,您可以使用以下配置:

代码语言:javascript
运行
复制
<Connector connectionTimeout="20000"
    acceptCount="100" scheme="https" secure="true"
    port="443" clientAuth="false" sslProtocol="TLS"  
    keystoreFile="PATH_TO_KEY_STORE"  
    keystorePass="KEY_STORE_PASS"  
    keyAlias="KEY_STORE_ALIAS"/>  

这是一个示例配置,我没有在其中放置一些对您很重要的属性,如线程属性、执行器等。

最重要的是为HTTPS连接提供服务所需的KeyStore配置。你有官方文档为Tomcat准备一个java KeyStore来服务Here

票数 29
EN

Stack Overflow用户

发布于 2017-07-05 05:55:43

您可以通过将以下内容添加到tomcat_dir/conf/web.xml的末尾,对部署到tomcat的每个应用程序执行此操作

代码语言:javascript
运行
复制
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Entire Application</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <!-- auth-constraint goes here if you requre authentication -->
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

所以你不需要在你的网页应用程序的web.xml上更改它。

这应该是可行的,假设你已经让https在另一个端口(通常是443)上工作。如果您没有这样做,请确保您的tomcat_dir/conf/server.xml如下所示:

代码语言:javascript
运行
复制
<!-- Default tomcat connector, changed the redirectPortport from 8443 to 443 -->
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" />

<!-- To make https work on port 443 -->
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
        maxThreads="150" SSLEnabled="true">
    <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>
    <SSLHostConfig>
        <Certificate certificateKeyFile="/your/own/privkey.pem"
            certificateFile="/eyour/own/cert.pem"
            certificateChainFile="/your/own/chain.pem"
            type="RSA" />
    </SSLHostConfig>
</Connector>
票数 25
EN

Stack Overflow用户

发布于 2015-10-25 11:46:55

我有一个正在运行的tomcat应用程序,它已经有了以下从HTTP到HTTPs的重定向规则:

正如马拉古纳回答的那样,该Connector配置不是重定向规则。这只是<transport-guarantee>CONFIDENTIAL</transport-guarantee>触发的重定向时使用的设置。

无法在每个应用程序的基础上覆盖该设置。

如果您需要更好地控制此类重定向,则需要实现您自己的过滤器来实现重定向(if (!request.isSecure()) { response.sendRedirect(...);}),或者配置3rd party one

//从技术上讲,目前Tomcat8代码中,transport-guarantee触发的重定向都是通过org.apache.catalina.realm.RealmBase.hasUserDataPermission(...)方法来实现的。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33208796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档