Назад | Перейти на главную страницу

Как предотвратить попадание не-https в приложения tomcat через apache mod_proxy_ajp?

Я настраиваю интерфейс Apache 2.2 для передачи определенных приложений в Tomcat через mod_proxy_ajp. В некоторых из этих приложений, таких как служба входа / аутентификации, я хочу принудительно принимать только HTTPS-запросы.

В моем файле httpd-proxyajp.conf есть такие строфы для каждого приложения:

  ProxyPass /auth-1.0 ajp://localhost:8009/auth-1.0
  ProxyPassReverse /auth-1.0 ajp://localhost:8009/auth-1.0

  <Proxy /auth-1.0>
    Order Deny,Allow
    Allow from All
  </Proxy>

  <Proxy /auth-1.0/WEB-INF>
    Order Deny,Allow
    Deny from All
  </Proxy>

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

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/auth-1.0 https://%{HTTP_HOST}%{REQUEST_URI}

Я действительно хочу вместо этого выдать ошибку.

Сложность: это делается на Amazon EC2, поэтому нельзя использовать виртуальные хосты на основе IP и нельзя использовать на основе имен, потому что я использую SSL. Я бы предпочел сделать это без виртуального хостинга; Мне нужно, чтобы приложения обслуживались с одним и тем же DNS-именем.

Думаю, я придумал что-то, что делает то, что я хочу, но хотел бы критики. Я тестировал его, и, похоже, он работает для наиболее очевидных случаев использования, но это может быть сложно для крайних случаев. В любом случае, для любого из этих приложений я хочу быть «только https», он выдает 403 Forbidden, если вы нажимаете их через http, но отлично работает через https.

В httpd-proxyajp.conf:

RewriteEngine On
#
# Auth Service
#
  RewriteCond %{HTTPS} off
  RewriteRule ^/auth-1.0 - [F]
  ProxyPass /auth-1.0 ajp://localhost:8009/auth-1.0
...
#
# An Insecure Service, foo
#
  ProxyPass /foo-1.0 ajp://localhost:8009/foo-1.0
...
#
# Another Secure-only Service, bar
#
  RewriteCond %{HTTPS} off
  RewriteRule ^/bar-1.0 - [F]
  ProxyPass /bar-1.0 ajp://localhost:8009/bar-1.0
...