Как вернуться из SSL в не-SSL в Tomcat 6? - PullRequest
0 голосов
/ 27 декабря 2010

Я использую jsf 2 + jaas + ssl + tomcat 6.0.26

У меня на сайте 2 пути:

/ лица / защищены / *, который использует SSL

/ лица / незащищенные / * которые не используют SSL.

Я поместил это в свой web.xml:

<login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/faces/login.jsp</form-login-page>
            <form-error-page>/faces/error.jsp</form-error-page>
        </form-login-config>
    </login-config>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Secure Resource</web-resource-name>
            <description/>
            <url-pattern>/faces/unprotected/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>HEAD</http-method>
            <http-method>PUT</http-method>
            <http-method>OPTIONS</http-method>
            <http-method>TRACE</http-method>
            <http-method>DELETE</http-method>           
        </web-resource-collection>
        <auth-constraint>
            <role-name>C</role-name>
        </auth-constraint>          
    </security-constraint>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Secure Resource</web-resource-name>
            <description />
            <url-pattern>/faces/protected/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>HEAD</http-method>
            <http-method>PUT</http-method>
            <http-method>OPTIONS</http-method>
            <http-method>TRACE</http-method>
            <http-method>DELETE</http-method>
        </web-resource-collection>
        <auth-constraint>
            <role-name>C</role-name>
        </auth-constraint>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>     
    </security-constraint>
    <security-role>
        <description> Role Client </description>
        <role-name>C</role-name>
    </security-role>

а это мой server.xml:

 <Connector port="8080" protocol="HTTP/1.1" 
               maxThreads="400"
               maxKeepAliveRequests="1"
               acceptCount="100"
               connectionTimeout="3000"
               redirectPort="8443"
                compression="on"
                compressionMinSize="2048"
                noCompressionUserAgents="gozilla, traviata"
                compressableMimeType="text/javascript,text/css,text/html, text/xml,text/plain,application/x-javascript,application/javascript,application/xhtml+xml"  />


  <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" SSLEnabled="true"
               maxThreads="400" scheme="https" secure="true"
               clientAuth="optional" sslProtocol="TLS" 
               SSLCertificateFile="path/to/crt" 
               SSLCertificateKeyFile="path/to/pem"/>

когда я вхожу на защищенные пути, он переключается на HTTPS (порт 8443), но когда я вхожу на путь / лица / незащищенные / что-то ... он продолжает использовать HTTPS.

Что я хочу, так это когда я вхожу на незащищенные пути, он возвращается к не-SSL-коммуникациям (в противном случае мне придется повторно входить в систему, когда я устанавливаю точный адрес в своем браузере).

Что не так с моими конфигурациями?

Есть ли способ, чтобы я мог сделать такую ​​вещь?

Можно ли использовать страницу без повторной аутентификации?

Ответы [ 2 ]

1 голос
/ 03 мая 2012

Если вы войдете в систему по протоколу HTTPS, а затем вернетесь к HTTP, вы подвергнете аутентифицированный файл cookie атаке «человек посередине».Это плохо.

Вы должны оставаться в HTTPS в течение всего времени аутентификации сеанса.

Вычисления, требуемые для выполнения SSL, по сравнению с работой, выполняемой вашим приложением, совершенно тривиальны.Просто придерживайтесь SSL.

1 голос
/ 27 декабря 2010

Да, это нормальное поведение на Tomcat.

Как только он перейдет в https, он не будет перенаправлять другие URL-адреса обратно в http, если он явно не предназначен для http.

Если вам действительно нужно , вам придется написать Filter, чтобы проверить, не является ли URL-адрес частью защищенного шаблона, а затем перенаправить обратно на http.

...