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

Обеспечение безопасности SSL-запросов с помощью mod_cluster?

Если у меня есть и httpd, и JBoss в защищенной локальной сети, можно ли завершить запросы SSL на httpd и передать запрос доступному JBoss через mod_cluster?

Есть идеи, какая конфигурация задействована?

вы также можете

  1. защитите только соединение клиентов с вашим балансировщиком и сделайте сеть балансировщиков надежной:

    клиент <--SSL--> балансировщик <- AJP / HTTP -> воркеры

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

    клиент <--SSL--> балансировщик <--SSL--> воркеры

Вариант 2) имеет серьезные недостатки в производительности. Я покажу вам, как это сделать:

1) httpd:

<IfModule manager_module>
  Listen 8888
  ManagerBalancerName qacluster
  <VirtualHost localhost:8888>
  ServerName localhost:8888
    <Directory />
      Order deny,allow
      Deny from all
      Allow from all
    </Directory>

    ServerAdvertise on
    EnableMCPMReceive
    AdvertiseGroup 224.0.1.105:6666

    <Location /mcm>
      SetHandler mod_cluster-manager
      Order deny,allow
      Deny from all
      Allow from all
   </Location>

   SSLEngine on
   SSLCipherSuite AES128-SHA:ALL:!ADH:!LOW:!MD5:!SSLV2:!NULL
   SSLVerifyDepth 10
   SSLCertificateKeyFile /home/karm/Server/server.key
   SSLCertificateFile /home/karm/Server/server.crt
   SSLCACertificateFile /home/karm/Server/myca.crt
   LogLevel debug

  </VirtualHost>
</IfModule>

AS7:

<subsystem xmlns="urn:jboss:domain:modcluster:1.1">
    <mod-cluster-config advertise-socket="modcluster" advertise="true" sticky-session="true" sticky-session-remove="false" sticky-session-force="false" connector="ajp">
        <dynamic-load-provider history="10" decay="2">
            <load-metric type="busyness"/>
        </dynamic-load-provider>
        <ssl key-alias="javaclient" password="tomcat" certificate-key-file="/home/karm/Client/client-cert-key.jks" cipher-suite="AES128-SHA:ALL:!ADH:!LOW:!MD5:!SSLV2:!NULL" ca-certificate-file="/home/karm/Client/ca-cert.jks"/>
    </mod-cluster-config>
</subsystem>

Теперь AS7 использует HTTPS только для отправки сообщений Mod_cluster в балансировщик. Другой балансировщик -> Связь AS7 (например, запросы клиента) не зашифрована, поскольку использует AJP.

2) httpd:

+++
SSLEngine on   
+SSLProxyEngine On
+++

AS7:

+++
-<connector name="ajp" protocol="AJP/1.3" scheme="ajp" socket-binding="ajp"/>
+<connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https" secure="true">
+    <ssl name="https" key-alias="javaclient" password="tomcat" certificate-key-file="/home/karm/Client/client-cert-key.jks" cipher-suite="AES128-SHA:ALL:!ADH:!LOW:!MD5:!SSLV2:!NULL" protocol="TLS" verify-client="false" certificate-file="/home/karm/Client/client-cert-key.jks" ca-certificate-file="/home/karm/Client/ca-cert.jks"/>
+</connector>
+++
-<mod-cluster-config advertise-socket="modcluster" advertise="true" sticky-session="true" sticky-session-remove="false" sticky-session-force="false" connector="ajp">
+<mod-cluster-config advertise-socket="modcluster" advertise="true" sticky-session="true" sticky-session-remove="false" sticky-session-force="false" connector="https">
+++

Относительно 2)

  • Обратите внимание: verify-client = "false", вы не можете проверить клиента, так как запрос проходит через балансировщик ...
  • Обратите внимание на падение производительности.
  • Обратите внимание на неприятную ошибку https://issues.jboss.org/browse/JBPAPP-9493 (вероятно, влияет и на текущий Mod_cluster)

HTH

Ура

По умолчанию mod_cluster разорвет ваше SSL-соединение и передаст информацию на бэкэнд в незашифрованном виде. Видеть http://docs.jboss.org/mod_cluster/1.0.0/html/UsingSSL.html для инструкций.

Обратите внимание на раздел 12.2, в котором показана дополнительная конфигурация, необходимая для использования SSL между прокси и серверной службой. В разделе 12.3 показано, как пересылать информацию о прерванном сеансе SSL, если у вашего приложения есть причины для этого.