Monthly Archives: August 2010
Итак, сегодня мы займемся настройкой портов HTTP, а также настройкой HTTPS. Стандартный бандл JBoss сконфигурирован так, что HTTP привязан к порту 8080, а HTTPS – к порту 8443. Допустим, нам необходимо настроить сервер так, чтобы использовался 80 порт для HTTP и 443 для HTTPS, причем при заходе на 80 порт сервер перекидывал клиента на порт HTTPS. Для этого необходимо внести следующие изменения в конфигурационные файлы:
/server/default/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml (заменяем в трех местах – первые два определяют порты по умолчанию, третье место определяет XSLT-преобразование, которое применяется для конфигурационного файла server.xml.) У меня эти три места были приведены к следующему виду:
<bean>
<property name=”serviceName”>jboss.web:service=WebServer</property>
<property name=”port”>80</property>
<property name=”description”>JBoss Web HTTP connector socket; also drives the values for the HTTPS and AJP sockets</property>
<bean>
<property name=”serviceName”>jboss.web:service=WebServer</property>
<property name=”bindingName”>HttpsConnector</property>
<property name=”port”>443</property>
<property name=”description”>JBoss Web HTTPS connector socket</property>
</bean>
<Connector>
<xsl:for-each select=”@*”>
<xsl:choose>
<xsl:when test=”(name() = ‘port’ and . = ’80’)”>
<xsl:attribute name=”port”><xsl:value-of select=”$port” /></xsl:attribute>
</xsl:when>
<xsl:when test=”(name() = ‘port’ and . = ‘8009’)”>
<xsl:when test=”(name() = ‘redirectPort’)”>
<xsl:attribute name=”redirectPort”><xsl:value-of select=”$portHttps” /></xsl:attribute>
</xsl:when>
<xsl:when test=”(name() = ‘port’ and . = ‘443’)”>
<xsl:attribute name=”port”><xsl:value-of select=”$portHttps” /></xsl:attribute>
</xsl:when>
<xsl:otherwise>
2. /server/default/deploy/jbossweb.sar/server.xml
Здесь для наших настроек самое главное будет выглядеть так:
<!– A HTTP/1.1 Connector on port 8080 –>
<Connector protocol=”HTTP/1.1″ port=”80″ address=”${jboss.bind.address}”
connectionTimeout=”20000″ redirectPort=”443″ />
<!– A AJP 1.3 Connector on port 8009 –>
<Connector protocol=”AJP/1.3″ port=”8009″ address=”${jboss.bind.address}”
redirectPort=”443″ />
<!– SSL/TLS Connector configuration using the admin devl guide keystore–>
<Connector protocol=”HTTP/1.1″ SSLEnabled=”true”
port=”443″ address=”${jboss.bind.address}”
scheme=”https” secure=”true” clientAuth=”false”
keystoreFile=”${jboss.server.home.dir}/conf/mykeystore”
keystorePass=”qwerty” sslProtocol = “TLS” />
Здесь keystore-путь к файлу, содержащему ключи, необходимые для работы HTTPS. Если у вас такого файла нет, вы можете сгенерировать самоподписанный сертификат с использованием стандартной джавовой тулзы keytool (лежит в директории bin в JDK) следующей командой:
<blockquote>keytool –genkey –alias jboss –keypass qwerty –keyalg RSA –keystore mykeystore –validity 3650</blockquote>
Соответственно, keystorePass- пароль для этой связки ключей.
Интересно, что если сконфигурировать server.xml, но оставить bindings-jboss-beans.xml таким же, то JBoss запустится, но порты будут использованы не те. Не только у меня это вызывает недоумение, но, судя по топику http://community.jboss.org/message/540960?tstart=0, это решение (выполнение дополнительного XSLT преобразования над server.xml) было продиктовано исторически, и в данный момент уже не является чем-то необходимым. Поэтому, скорее всего, в следующих версиях JBoss AS такого дублирования не будет.
Итак, осталось только исправить на всякий случай еще один конфиг, использующий порты 8080 и 8443 – /server/default/deployers/jbossws.deployer/META-INF/jboss-beans.xml :
<!–
Set these properties to explicitly define the ports that will be used for rewriting the SOAP address.
Otherwise the ports will be identified by querying the list of installed connectors.
If multiple connectors are found the port of the first connector is used.–>
<property name=”webServiceSecurePort”>443</property>
<property name=”webServicePort”>80</property>
</bean>
Последний шаг – для каждого WAR указать в дескрипторе web.xml на необходимость использования именно защищенного HTTPS протокола. Для этого в web.xml необходимо добавить строки:
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Context</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
В первую очередь это можно проверить на встроенных админ-панельках джейбосса (ROOT.war, admin-console.war и тд).
На днях подумал о том, что было бы неплохо написать несколько постов на тему настройки, использования и разработки на базе платформы JBoss, тем более что уже имеется некий опыт этих манипуляций. Пока, пожалуй, будем говорить о JBoss Application Server 5.1, возможно, чуть позже затронем тему JBoss AS 6 и JBoss Portal, но пока ограничимся Application Server’ом версии 5.1 GA. Это стабильная версия, ее можно скачать на официальном сайте jboss.org.
Итак, для настройки JBoss AS для разработки и использования в продакшене обычно требуется:
1. Настройка режима отладки JPDA
1. Настройка портов, на которые будут биндиться сервисы и HTTP-коннекторы.
2. Настройка админок так, чтобы анонимусы не могли ими воспользоваться
3. Настройка различных сервисов (например, сервис отправки email)
4. Тюнинг текущей конфигурации (отключение ненужных сервисов, изменение настроек)
По порядку эти вещи делать не обязательно, поскольку JBoss AS распространяется в зипованном бандле, который запускается “здесь и сейчас”, поэтому я буду описывать эти несложные, в общем-то, вещи, отдельно, в виде небольших шпаргалок.
Итак, начнем с настройки режима отладки JBoss.
Первым делом разработчик, который начал использовать JBoss, хочет заглянуть в свое приложение отладчиком. Для того, чтобы JBoss поддерживал возможность отладки, необходимо поправить файл run.bat, добавив туда опции для виртуальной машины. (В линуксе этим файлом будет, соответственно, run.sh) Я обычно копирую run.bat в run_jpda.bat и добавляю требуемые параметры после, например, этих строк:
if “x%JAVA_OPTS%” == “x” (
set “JAVA_OPTS=-Dprogram.name=%PROGNAME%”
) else (
set “JAVA_OPTS=-Dprogram.name=%PROGNAME% %JAVA_OPTS%”
)
Дописываем после них
set “JAVA_OPTS=%JAVA_OPTS% -Xdebug -Xrunjdwp:transport=dt_shmem,address=jboss,server=y,suspend=n”
транспорт может быть также dt_socket, флаг suspend означает то, будет ли перед запуском программа ждать подключения отладчика или запустится сразу. По указанному адресу (address) клиент JPDA будет подключаться к JBoss’у и в своей любимой IDE вы пропишете именно его. В данном случае адресом выступает строка “jboss”, однако, если вы используете сокетный транспорт, вам необходимо будет вместо имени указать порт.
2