Tomcat SSL https端口问题
此刻我试图改进我的tomcat知道如何。我试图用SSL建立tomcat。 这个想法是,我得到了/ app不需要任何授权的路径,以及需要基本身份验证的路径/ admin。我想它只是缺乏关于SSL的一般知识,我不知道会发生什么。Tomcat SSL https端口问题
当我使用url http://localhost:8080/myapp/app/
它的作品,它显示我的网页。现在我将/ app更改为/ admin。之后,我的网址是https://localhost/myapp/admin
,它不工作,因为8443端口丢失。我不明白为什么它会自动更改为https,但在此之后端口丢失?我的问题是什么?如何解决?
任何帮助,高度赞赏:)
我的server.xml:
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on"/>
<Listener className="org.apache.catalina.core.JasperListener"/>
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
/>
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="${catalina.home}/myapp.keystore"
keystorePass="histackoverflow"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.MemoryRealm" />
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b"/>
</Host>
</Engine>
</Service>
我的web.xml文件看起来像这样:
<servlet>
<servlet-name>MyApp REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>main.ch.myapp.resource.app</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Myapp REST Service</servlet-name>
<url-pattern>/app-api/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>MyApp Admin REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>main.ch.myapp.resource.admin</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyApp Admin REST Service</servlet-name>
<url-pattern>/admin-api/*</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>MyApp Admin</web-resource-name>
<url-pattern>/admin/*</url-pattern>
<url-pattern>/admin-api/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
对https的更改由<security-constraint>
中包含的<transport-guarantee>CONFIDENTIAL</transport-guarantee>
完成。
看一看:
The Java EE 6 Tutorial, Volume I. Specifying Security Constraints
The Java EE 6 Tutorial, Volume I. Specifying a Secure Connection
指定安全连接
(在 部署描述符
TutorialUser-data-constraint
)用户数据约束包含transport-guarantee
元件。可以使用用户数据约束来要求在安全 约束中指定的受约束的URL模式和HTTP方法的所有 受保护传输层(例如HTTPS(基于SSL的HTTP))的层连接。运输保证的选项包括CONFIDENTIAL, INTEGRAL或NONE。如果指定CONFIDENTIAL或者INTEGRAL作为 安全约束,这通常意味着使用SSL需要 ,以及该类型的安全约束适用于Web资源集合在匹配URL模式的所有请求 而不是 只是登录对话框。
此外,我想端口8443不可用,因为你没有Tomcat配置为使用SSL。
在下面的链接,你可以找到一个很好的如何对关于在Tomcat配置SSL支持:
Apache Tomcat 7. SSL/TLS Configuration HOW-TO
--- EDIT(服务器。XML配置被张贴)---
要被重定向到端口8443需要更改连接器配置,如下所示:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Apache Tomcat 7. The AJP Connector
redirectPort
如果此连接器支持非SSL请求,并且请求是 已收到匹配的
security-constraint
需要SSL 传输,Catalina会自动将请求重定向到此处指定的端口号 。
端口8443可用时,我添加它。但是,我可以配置它在IM上使用https时自动切换端口吗? – NDY 2014-09-02 13:11:08
@Andy我不确定我是否正确理解你的问题。更改为https时,您重定向到的端口是在连接器的redirectPort属性中配置的端口。你应该得到这样的网址:https:// localhost:8443/myapp/admin你可以发布你的server.xml配置吗? – 2014-09-02 13:24:42
Ty为您提供帮助。我添加了server.xml。我猜你确实明白我的意思。当我添加8443到我的网址,它的作品。但是当我在将URL更改为/ admin后重定向到https://时,端口不会更改为8443. – NDY 2014-09-02 13:41:28