Tomcat SSL https端口问题

Tomcat SSL https端口问题,tomcat,ssl,https,basic-authentication,Tomcat,Ssl,Https,Basic Authentication,目前,我正在努力提高我的雄猫技能。我正在尝试用SSL设置tomcat。 我的想法是,我通过/app获得了不需要任何授权的路径,以及需要基本身份验证的路径/admin。我想这只是缺乏SSL的一般知识,我无法理解会发生什么 当我使用urlhttp://localhost:8080/myapp/app/它可以工作并显示我的页面。现在我将/app更改为/admin。之后,我的url是https://localhost/myapp/admin它不工作,因为8443端口丢失。我不明白为什么它会自动更改为ht

目前,我正在努力提高我的雄猫技能。我正在尝试用SSL设置tomcat。 我的想法是,我通过/app获得了不需要任何授权的路径,以及需要基本身份验证的路径/admin。我想这只是缺乏SSL的一般知识,我无法理解会发生什么

当我使用url
http://localhost:8080/myapp/app/
它可以工作并显示我的页面。现在我将/app更改为/admin。之后,我的url是
https://localhost/myapp/admin
它不工作,因为8443端口丢失。我不明白为什么它会自动更改为https,但之后端口就丢失了?我的问题是什么?如何解决

非常感谢您的帮助:)

My 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 &quot;%r&quot; %s %b"/>

        </Host>
    </Engine>
</Service>


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

MyApp REST服务
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
main.ch.myapp.resource.app
com.sun.jersey.api.json.POJOMappingFeature
真的
1.
Myapp REST服务
/应用程序接口/*
MyApp管理REST服务
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
main.ch.myapp.resource.admin
com.sun.jersey.api.json.POJOMappingFeature
真的
1.
MyApp管理REST服务
/管理api/*
MyApp管理员
/管理员/*
/管理api/*
管理
保密的
基本的

由于
中包含的
机密
,因此对https进行了更改

看看:

指定安全连接

中的用户数据约束(
TutorialUser data constraint
) 部署描述符)包含
传输保证
元素。A. 用户数据约束可用于要求受保护的传输 层连接,如HTTPS(HTTP over SSL)可用于所有 安全协议中指定的受约束URL模式和HTTP方法 约束。运输担保的选择包括:, 整数,或无。如果您指定“机密”或“集成”作为 安全约束,它通常意味着SSL的使用是安全的 必需,并且该类型的安全约束适用于所有请求 与web资源集合中的URL模式匹配,而不是 只需转到登录对话框

此外,我假设8443端口不可用,因为您没有将Tomcat配置为使用SSL
在以下链接中,您可以找到一个关于在Tomcat上配置SSL支持的好方法:

---编辑(已发布server.xml配置)---

要重定向到端口8443,您需要更改连接器配置,如下所示:

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

重定向端口

如果此连接器支持非SSL请求,并且请求 接收到匹配的
安全约束要求SSL的
传输时,Catalina将自动将请求重定向到
此处指定的端口号


端口8443在添加时可用。但是我可以配置它在我使用https时自动切换端口吗?@Andy我不确定我是否正确理解了你的问题。更改为https时重定向到的端口是在连接器的redirectPort属性中配置的端口。您应该得到这样一个url:您可以发布您的server.xml配置吗?Ty以获得帮助。我添加了server.xml。我想你是对的。当我添加8443到我的网址,它的工作。但是,当我将url更改为/admin后被重定向到https://时,端口没有更改为8443。@Andy将
redirectPort=“8443”
添加到
great,ty:)这就是我想要的改变