Thursday, January 27, 2011

Включение поддержки HTTPS для Tomcat (v6.0)

В принципе ничего сложно в этом, нет, но как всегда пришлось немного повозиться.
[шаг 1] Первым делом я предлагаю перевести логгинг в режим отладки. Для этого в файле logging.properties (находится в ${CATALINA_HOME}/conf или если его там нет, то нужно создать этот файл и поместить в classpath, или добавить, например, в WEB-INF/) нужно установить консольный логгинг в отладку:

java.util.logging.ConsoleHandler.level = DEBUG
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

[шаг 2] Далее нужно сгенерировать ключи, это делается с помощью keytool, которая обычно входит в JDK:

%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA

По умолчанию файл ключей кладется в ${user.home} . Для того, чтобы сгенерировать ключи в заданный файл: \a\path\a\keystore, то это можно сделать так:

%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA \
-keystore \a\path\a\keystore

Keytool запросит пароль (пишут, что по умолчанию Tomcat использует changeit, но мне пришлось задавать его явно в описателе коннектора), запросит ФИО издателя ключей, отдел, компанию и т.д.
[шаг 3] Правим server.xml, который обычно находится в ${CATALINA_HOME}/conf. Нужно раскомментировать описание для SSL HTTP/1.1 Connector и добавить туда соотв. атрибуты:

<connector
port="8443"
maxthreads="150"
algorithm="SunX509"
scheme="https"
secure="true"
sslenabled="true"
keystorepass="changeit" clientauth="false"
keystorefile="${user.home}/.keystore"
sslprotocol="TLS">
</connector>

Расположение файла с ключами и пароль пришлось задавать явно. Алгоритм можно не задавать. Замечу, что для Oracle/Sun JVM алгоритм будет SunX509. Для IBM JVM значение скорее всего будет IbmX509. Как следствие, сгенерированные ключи могут быть не совместимы. Так ключи, сгенерированные с помощью Oracle/Sun JVM, у меня не сработали для IBM JVM.

Если все ок, то https://localhost:8443 должно привести к открытию страницы приветствия Tomcat. Если уже есть какие-то приложения, то ничего менять не надо. Они должны также запускаться под https по 8443 порту.

Примечание: если менять серверные настройки в eclipse, нужно убедиться, что файл настроек в рабочей области действительно синхронизирован с файлом на диске. Иначе все изменения в рабочей области никак не скажутся на работе сервера.

Подробнее можно посмотреть здесь и здесь.

2 comments:

  1. Статья оказалась полезной. Спасибо.

    ReplyDelete
  2. Правильно будет keystorePass и keystoreFile иначе не найдет

    ReplyDelete