在单个 tomcat 实例上混合使用 https 和 http
Mix https and http on single tomcat instance
我有一个通常在 https 中运行的应用程序。 Tomcat 侦听端口 8443:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keyAlias="MY_ALLIAS" keystoreFile="PATH_TO_MY_KEY"
keystorePass="MY_PASWORD" />
Apache 侦听 80 并重定向到 8443:
<VirtualHost *:80>
ServerAdmin MY_EMAIL_ADDRESS
ServerName localhost
ServerAlias localhost
ProxyPass / http://localhost:8443/
ProxyPassReverse / http://localhost:8443/
DocumentRoot /var/www/html
最后在 web.xml 我补充说:
<security-constraint>
<web-resource-collection>
<web-resource-name>MY_WEB_RESOURCE_NAME</web-resource-name>
<url-pattern>/welcome</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
不幸的是,我必须将带有 http 站点的 IFRAME 添加到我的网站之一。那里的安全不是问题。我的问题是 Tomcat 配置。我想我会用 Apache 调度流量。但现在我的问题是如何设置 Tomcat,以便我可以为站点 http://localhost:8080/siteA and all the other sites will be served on https://localhost:8443/myOtherSites 提供服务?我尝试删除 redirectPort="8443",但这还不够。我正在使用 Tomcat 9.0.0.M4(如果需要的话,移动到 Tomcat 8 不是问题)。
请帮忙!
要解决此问题,请在您的 web.xml 中再添加一个 <security-constraint>
标签,就像这样`
<security-constraint>
<web-resource-collection>
<web-resource-name>Unsecured resources</web-resource-name>
<url-pattern>/siteA</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint> `
由于您已将 transport-guarantee 设置为 NONE,tomcat 将不会验证其是否是受保护的资源。通过这种方式,此 <security-constraint>
将有助于通过 http 访问您的 siteA
,而您已经声明的另一个 <security-constraint>
标签将帮助您访问 https
上的其他站点。请记住,在 <url-pattern>
标签中提供您要保留为 http 或 https 的页面的路径 让我知道这是否解决了您的问题:) .
我有一个通常在 https 中运行的应用程序。 Tomcat 侦听端口 8443:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keyAlias="MY_ALLIAS" keystoreFile="PATH_TO_MY_KEY"
keystorePass="MY_PASWORD" />
Apache 侦听 80 并重定向到 8443:
<VirtualHost *:80>
ServerAdmin MY_EMAIL_ADDRESS
ServerName localhost
ServerAlias localhost
ProxyPass / http://localhost:8443/
ProxyPassReverse / http://localhost:8443/
DocumentRoot /var/www/html
最后在 web.xml 我补充说:
<security-constraint>
<web-resource-collection>
<web-resource-name>MY_WEB_RESOURCE_NAME</web-resource-name>
<url-pattern>/welcome</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
不幸的是,我必须将带有 http 站点的 IFRAME 添加到我的网站之一。那里的安全不是问题。我的问题是 Tomcat 配置。我想我会用 Apache 调度流量。但现在我的问题是如何设置 Tomcat,以便我可以为站点 http://localhost:8080/siteA and all the other sites will be served on https://localhost:8443/myOtherSites 提供服务?我尝试删除 redirectPort="8443",但这还不够。我正在使用 Tomcat 9.0.0.M4(如果需要的话,移动到 Tomcat 8 不是问题)。 请帮忙!
要解决此问题,请在您的 web.xml 中再添加一个 <security-constraint>
标签,就像这样`
<security-constraint>
<web-resource-collection>
<web-resource-name>Unsecured resources</web-resource-name>
<url-pattern>/siteA</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint> `
由于您已将 transport-guarantee 设置为 NONE,tomcat 将不会验证其是否是受保护的资源。通过这种方式,此 <security-constraint>
将有助于通过 http 访问您的 siteA
,而您已经声明的另一个 <security-constraint>
标签将帮助您访问 https
上的其他站点。请记住,在 <url-pattern>
标签中提供您要保留为 http 或 https 的页面的路径 让我知道这是否解决了您的问题:) .