Неожиданные результаты при попытке доступа к Tomcat 6 HTTPS-коннектору по HTTP - PullRequest
2 голосов
/ 23 августа 2011

Я настроил экземпляр Tomcat, следуя этой статье: http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html. Я закомментировал HTTP-коннектор, потому что я хочу, чтобы мое демонстрационное приложение было доступно только через HTTPS. Я настроил HTTPS-разъем следующим образом:

   <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" keystorePass="nopass"
           keystoreFile="/home/someuser/.keystore" keyAlias="tomcat" />

Все работает нормально, когда я нажимаю URL-адрес сервлета моего демонстрационного приложения, используя HTTPS.

Когда я попытался поразить его с помощью HTTP-URL, я ожидал, что он вернет 403 или похожую ошибку Вместо этого я получил загрузку небольшого (11 байт?) Двоичного файла с именем, совпадающим с именем сервлета.

Кто-нибудь сталкивался с подобной проблемой? Как вы решили это? Что я должен проверить, чтобы убедиться, что я все сделал правильно?

РЕДАКТИРОВАТЬ: Я попытался подключиться к тому же разъему, используя curl вместо браузера, и заметил, что он не возвращает никаких заголовков. Да, и размер ответа составляет 7 байтов, а не 11.

РЕДАКТИРОВАТЬ 2: Это часть, связанная с безопасностью файла web.xml моего демонстрационного приложения:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Secure Servlet</web-resource-name>
        <url-pattern>/SecureServlet</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
    <auth-constraint>
        <role-name>connect</role-name>
    </auth-constraint>
</security-constraint>

<security-role>
    <description>The role required to connect to the application
    </description>
    <role-name>connect</role-name>
</security-role>

<login-config>
    <auth-method>BASIC</auth-method>
</login-config>

1 Ответ

8 голосов
/ 26 августа 2011

Я проверил это, комментируя HTTP-коннектор в server.xml, заставляя приложение работать по HTTPS

https://localhost:8443/testapp

работает как положено

http://localhost:8080/testapp

возвращает a 404

http://localhost:8443/testapp

Обратите внимание на неверно смесь протокола и порт возвращает небольшое поток мусора, который отображается в IE и как двоичный файл в Firefox

это 7 байтов

Можете ли вы перепроверить, если вы видите 3-й сценарий , который не должен происходить в естественном случае, а только если кто-то возится с URL-адресом?

Хорошо, я проверил, используя CONFIDENTIAL, но он по-прежнему не перенаправляет http на 8443 на https. Я предполагаю, что это появляется только тогда, когда пользователь попробовал http на действительном порту 8080.

Используя Fiddler, я вижу, что возвращающиеся заголовки не существуют и нежелательный ответ.

HTTP / 1.1 200 Этот глючный сервер не вернул заголовки

Похоже, что это стандартное поведение, и конечные пользователи, которые получают доступ к приложению таким образом, увидят нежелательные сообщения, как и ожидалось.

Если вам действительно нужно, вы можете попробовать написать свой собственный пользовательский Tomcat Valve , который действует как фильтр, чтобы позаботиться об этом особом случае и перенаправить пользователей на SSL * 1060. *

...