当前位置: 首页 > 知识库问答 >
问题:

在Tomcat中将HTTP重定向到HTTPS:PORT诊断树

耿永寿
2023-03-14

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

<Connector executor="tomcatThreadPool"
           port="80"
           protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="443" />

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

共有3个答案

闾丘照
2023-03-14

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

正如马拉古纳回答的那样,连接器配置不是重定向规则。这只是执行由<code>触发的重定向时使用的设置

没有办法根据每个应用程序覆盖该设置。

如果您需要更好地控制此类重定向,您需要实现自己的Filter来实现重定向(if(!request.isSecure()){response.send重定向(…);}),或配置第三方。

//从技术上讲,在当前的Tomcat 8代码中,由传输保证触发的重定向是通过org.apache.catalina.realm.RealmBase.hasUserDataPermission(…)方法执行的。

归德厚
2023-03-14

你可以对部署到tomcat的每个应用程序执行此操作,方法是将其添加到tomcat_dir/conf/web.xml的末尾:

<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>

这样你就不用在你的webapp的web.xml上改了。

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

<!-- Default tomcat connector, changed the redirectPort 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>
白芷阳
2023-03-14

您所展示的连接器配置并没有按照您所设想的方式重定向特定的URL。

如果您在servlet容器中为web应用程序配置了CONFIDENTIAL传输保证,则该配置起作用。

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

<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会将任何匹配的< code>url-pattern重定向到已配置的端口,以便使用HTTPS作为传输机密性的保证人。

所以,如果你想重定向一个特定的URL,你必须用特定的应用程序配置来补充连接器的配置。

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

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

<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"/>

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

最重要的是为HTTPS连接提供服务所需的KeyStore配置。这里有为Tomcat提供HTTPS服务的java KeyStore的官方文档。

 类似资料:
  • 我使用的是 Java 7、Spring靴 1.1.7 和一个带有嵌入式的 Tomcat 7。 过去,当我使用独立Tomcat时,我会添加一个http连接器,将请求重定向到HTTPS端口: 当我使用嵌入的Tomcat(我没有服务器.xml文件)时,我该怎么做?

  • 我们使用拉维5。要将http连接重定向到https,请使用中间件HttpsProtocol。 在我们的4个测试用例中,只有1个正确工作(最后一个重定向)。其他3种情况的中间件添加了url extra index.php。 http://www.aqualink.az/index.php ---

  • 我想问一下HTTP到HTTPS的重定向。正如我们所知,重定向是通过从web服务器端重定向来实现的。但是,当涉及到https重定向时,它可以通过两种方式完成,服务器端()和应用程序端()。我想知道: 以下哪种方法有效且性能更好。 考虑到同一服务器上的多个域和域,每种方法的优缺点 非常感谢。 参考: 将Laravel中的WWW重定向到非WWW-堆栈溢出

  • 请不要向我推荐超过173票的长而详细的帖子。这对我不起作用。我也试过很多其他的(1,2,3,4)。他们都给我太多的重定向或错误500。因此,我的问题是: 用我的电流。htaccess,这就是发生的情况: https://www.dukescasino.com/-工作完美 https://dukescasino.com/-重定向到上面的内容,这很好 下面的两个选项加载罚款,但它应该重定向到https

  • 我已经在我的 Web 应用程序中配置了 SSL。我已经按照所需的步骤在我的 Tomcat 中安装了证书。 我一直关注的导师是https://www.mulesoft.com/tcat/tomcat-security 我已经强制使用 https over http,这意味着任何对 http 的请求都将转发到 https。我在服务器中进行了以下更改.xml 查看更多:https://www.mules

  • 我jenkins.war部署在Tomcat 9(Linux)上,并将其配置为超文本传输协议和https。 server.xml上的配置 web.xml配置 当jenkins没有被托管时,我能够使用上面的tomcat配置将http重定向到https。但在部署詹金斯之后。war将http重定向到https不起作用。 对于jenkins,将http重定向到https还需要其他配置更改吗?