【问题标题】:Not able to redirect http to https无法将 http 重定向到 https
【发布时间】:2020-07-27 04:47:54
【问题描述】:

请查看我的server.xml; 我无法将端口 8019 重定向到 https(端口 443)。我在网上尝试了各种示例,但仍然无法正常工作。谁能帮我解决我的server.xml 有什么问题?

<Connector port="8019" protocol="HTTP/1.1"
           connectionTimeout="100000"
           redirectPort="443" />

<Connector port="443" maxHttpHeaderSize="8192" SSLEnabled="true"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true" clientAuth="false"
keystoreFile="C:\zenfortecertificate\3_zensar_com.pfx" keystorePass="[my password]" keystoreType="PKCS12"
sslEnabledProtocols="TLSv1.2" 
ciphers="TLS_RSA_WITH_AES_256_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"/>

<Connector port="8019" protocol="AJP/1.3" redirectPort="443" />

<Engine name="Catalina" defaultHost="zenforte-stg.zensar.com">
  <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">
    [...]
  </Host>
  <Host name="zenforte-stg.zensar.com"  appBase="zen_webapps"
        unpackWARs="true" autoDeploy="true"/> 
</Engine>

【问题讨论】:

    标签: java http tomcat https


    【解决方案1】:

    您的server.xml 存在一些问题。其中一些与您的实际问题有关,其他只是您可能想要考虑的事情。

    首先,您在同一个端口 (8019) 上有两个 &lt;Connector&gt; 元素:

    <Connector port="8019" protocol="HTTP/1.1" connectionTimeout="100000" redirectPort="443" />
    

    <Connector port="8019" protocol="AJP/1.3" redirectPort="443" />
    

    所以首先要做的是选择一个连接器并移除另一个。如果您想将 AJP 协议与反向代理或负载均衡器一起使用,请保留 AJP 协议。否则,请使用 HTTP。

    重定向 HTTP -> HTTPS 的关键是您的非安全 &lt;Connector&gt; 中的 redirectPort(在端口 8019 上,无论您选择哪一个 AJP/HTTP)。但是除非您的应用程序要求重定向,否则不会发生重定向。为此,您需要在应用程序的WEB-INF/web.xml

        <security-constraint>
          <web-resource-collection>
            <web-resource-name>Everything</web-resource-name>
            <url-pattern>/*</url-pattern>
          </web-resource-collection>
          <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
          </user-data-constraint>
        </security-constraint>
    

    这告诉容器 (Tomcat) 应用程序需要“机密”通信,它会自动将任何非机密(即不安全)请求重定向到另一个端口 (https/443) 上的机密(即加密)协议。

    其他一些注意事项:

    1. 您的connectionTimeout 100 秒是很长的时间。您可能希望这个值要低得多,否则客户端可能会在不完成任何工作的情况下占用您的服务器。
    2. 您的&lt;Connector&gt; 包含您的所有安全配置。现代 Tomcat 使用 &lt;SSLHostConfig&gt; 进行所有配置。这表明旧配置带有新服务器,或者更糟糕的是,旧服务器。您应该尝试升级到最新的服务器并使用最新的配置样式。较新的配置样式使您可以更好地控制配置,并使正在发生的事情更加清晰。 (例如,如果您想使用 RSA + ECDSA,则使用 &lt;SSLHostConfig&gt; + &lt;Certificate&gt; 的配置比仅指定密钥库并希望获得最好的配置更加明确。
    3. 如果您没有在配置中使用“localhost”&lt;Host>,请将其删除。更好的是,如果您没有定义任何其他&lt;Host&gt;s,只需允许“localhost”覆盖所有内容。这使您的配置更少从默认值中定制,因此您需要维护的更改更少server.xml
    4. 指定disableUploadTimeout="true" 没有任何效果,除非您还指定connectionUploadTimeout

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-27
      • 2017-11-13
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多