Настройка связки Trusted Java и Tomcat под Linux - Документация
Перейти к содержанию

Документация

Настройка связки Trusted Java и Tomcat под Linux

Процесс установки и настройки описывается на примере Tomcat версий 5.5.28 и 6.0.20. Также проверялась совместимость с Tomcat 7.0.42. Номер версии, присутствующий в значениях каталогов, файлов, переменных окружения, можно успешно изменять, если не сказано иного. Отличия версии 6.0.20 описаны отдельно.

Требования к составу TLS-сертификатов

Для настройки SSL/TLS-шифрования для сервера потребуется X.509-сертификат, удовлетворяющий следующим требованиям:

  • В имени владельца (т.е. в атрибуте «Субъект» / «Subject») сертификата элемент Common Name (CN) должен содержать конкретное доменное (DNS) имя сервера, на котором развертывается TLS-сервер, например, «webportal.yourcompany.ru», либо маску, например, «*.yourcompany.ru». Также, одно или несколько таких значений могут содержаться в расширении «Дополнительное имя субъекта» / «Subject Alternative Name».

  • Ключевая пара должна обеспечивать возможность шифрования данных, что определяется наличием значений вариантов использования «Шифрование ключей, Шифрование данных» / «Key Encipherment, Data Encipherment» в расширении «Использование ключа» / «Key Usage» (KU) серверного сертификата.

  • В расширении «Улучшенный ключ» / «Enhanced Key Usage» (EKU) должен содержаться объектный идентификатор 1.3.6.1.5.5.7.3.1, обозначающий вариант использования сертификата «Проверка подлинности сервера» / «Server Authentication».

Если необходимо, чтобы пользователи тоже аутентифицировались по сертификатам, то их сертификаты должны соответствовать следующим критериям:

  • В расширении «Улучшенный ключ» / «Enhanced Key Usage» (EKU) должен присутствовать объектный идентификатор 1.3.6.1.5.5.7.3.2, обозначающий вариант использования сертификата «Проверка подлинности клиента» / «Client Authentication».

  • Поддерживаются сертификаты без шифрования, то есть у которых в расширении «Использование ключа» / «Key Usage» (KU) указаны только «Цифровая подпись, Неотрекаемость» / «Digital Signature, NonRepudiation».

Установка Tomcat под Linux

С правами администратора создайте пользователя и одноименную группу tomcat, которым будет позволено запускать приложение Tomcat

groupadd tomcat
useradd -g tomcat tomcat

задайте пароль пользователю tomcat

passwd tomcat

распакуйте дистрибутив Tomcat в каталог /opt, например

tar -xf ./apache-tomcat-5.5.28.tar.gz -C /opt
присвойте соответствующие права на каталог с веб-сервером для полного доступа к его файлам настроек и логам пользователю tomcat, например:
chown -R tomcat:tomcat /opt/apache-tomcat-5.5.28

Запуск и остановка Tomcat под Linux

Войдите в систему пользователем tomcat, задайте переменные окружения CATALINA_HOME и JAVA_HOME, которые соответственно указывают на каталог установки Tomcat и JRE, например:

export CATALINA_HOME=/opt/apache-tomcat-5.5.28
export JAVA_HOME=/usr/java/jre1.6.0_17

Теперь запустите Tomcat:

$CATALINA_HOME/bin/startup.sh

Для остановки Tomcat выполните:

$CATALINA_HOME/bin/shutdown.sh

Настройка SSL в Tomcat под Linux

Настройка RSA шифрования в Tomcat под Linux

В данном разделе приводятся выдержки из документации на Tomcat со страниц http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html и http://tomcat.apache.org/tomcat-6.0-doc/ssi-howto.html. Под пользователем tomcat создайте новое хранилище ключей (certificate keystore), содержащее один самоподписанный сертификат, используя команду:

$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA

и укажите пароль для доступа к ключу, желательно, "changeit".

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

Поддержка SSL в Tomcat реализуется двумя способами: JSSE реализация, предоставляемая частью Java Runtime (начиная с версии 1.4) APR реализация, которая включена по умолчанию в версии 5.5.28 и основана на OpenSSL

Дальнейшие действия по настройке приводятся для JSSE-реализации.

Для указания использования JSSE-реализации SSL, нужно раскомментировать узел с портом 8443 и схемой https в файле $CATALINA_HOME/conf/server.xml.

Для версии 5.5.28 раскомментировать строки:

 <Connector port="8443" maxHttpHeaderSize="8192"
 maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
 enableLookups="false" disableUploadTimeout="true"
 acceptCount="100" scheme="https" secure="true"
 clientAuth="false" sslProtocol="TLS" />
и изменить первую строку на:

<Connector protocol="org.apache.coyote.http11.Http11Protocol" port="8443"
maxHttpHeaderSize="8192"

Для версии 6.0.20 достаточно только раскомментировать строки:

 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
 maxThreads="150" scheme="https" secure="true"
 clientAuth="false" sslProtocol="TLS" />

Опция «protocol» здесь уже установлена. После перезапуска Tomcat должна быть доступна страница https://servername:8443/

Настройка ГОСТ-шифрования в Tomcat под Linux

Для использования защищенного соединения по протоколу GOST TLS нужно указать тип протокола “GostTLS” в описании коннектора Tomcat. Для этого нужно в файле $CATALINA_HOME/conf/server.xml в узле с портом 8443 и схемой https заменить sslProtocol="TLS" на sslProtocol="GostTLS". Пример для версии 5.5.28:

<Connector protocol="org.apache.coyote.http11.Http11Protocol" port="8443"
maxHttpHeaderSize="8192"
 maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
 enableLookups="false" disableUploadTimeout="true"
 acceptCount="100" scheme="https" secure="true"
 clientAuth="false" sslProtocol="GostTLS" />

Пример для версии 6.0.20:

 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
 maxThreads="150" scheme="https" secure="true"
 clientAuth="false" sslProtocol="GostTLS" />

Убедитесь, что при установке TrustedJava в файле $JRE/lib/security/java.security параметру ssl.SocketFactory.provider было присвоено значение com.digt.trusted.jsse.provider.DigtSocketFactory.

Установка серверного сертификата под Linux

Чтобы стартовать GOST TLS на ГОСТ сертификатах, необходимо на стороне сервера иметь ключевой контейнер и соответствующий ему сертификат в файле в формате "Base-64 encoded X.509":

  • Сертификат должен иметь привязку к секретному ключу пользователя (т.е. установлен в хранилище "my" пользователя tomcat).

  • Сертификаты УЦ, его подписавшие, должны находиться в хранилище "root" Unix платформы

Для выполнения этих требований необходимо выполнить следующие шаги: 1. Генерация запроса на сертификат (ГОСТ 34.10-2001) для веб-сервера 2. Получение сертификата УЦ и веб-сервера 3. Установка сертификата УЦ 4. Установка сертификата веб-сервера 5. Установка системных переменных окружения Java

Перед генерацией ключевого контейнера требуется определиться с его именем и местоположением. В данном примере описывается создание ключевого контейнера с именем «tlsserver» и расположенном на жестком диске (считыватель «HDIMAGE»). Имя ключевого контейнера должно быть уникальным, поэтому предварительно рекомендуется убедиться в отсутствии контейнера с выбранным именем. Список существующих ключевых контейнеров можно посмотреть командой: /opt/cprocsp/bin/<arch>/csptestf -keyset -provtype 75 -enum_containers -verifycontext -fqcn

Для генерации запроса на сертификат необходимо выполнить под учетной записью пользователя tomcat (от имени которого запускается сервер) следующую команду: /opt/cprocsp/bin/<arch>/cryptcp -creatrqst -provtype 75 -ex -cont "\\\\.\\hdimage\\tlsserver" -dn " CN=web-portal.yourcompany.ru, O=My Company, C=RU, E=test@test.ru " -certusage "1.3.6.1.5.5.7.3.1" ~/tlssreq.csr

Параметры -cont и -dn нужно изменить в соответствии с вашими данными.

Параметр -cont должен быть уникальным для каждого нового запроса, в примере он создаст ключевой контейнер в хранилище CSP на файловой системе, если вам нужно сгенерировать ключ на токене или дискете, измените его согласно руководству по КриптоПро CSP.

В процессе формирования ключа для инициализации датчика случайных чисел Вам может потребоваться нажать поочередно несколько клавиш на клавиатуре. После генерации закрытого ключа будет предложено защитить его паролем, который в дальнейшем можно менять командой: /opt/cprocsp/bin/<arch>/csptestf -passwd -change <новый_пин_код> -provtype 75 -container <имя_контейнера>

ПОЛУЧЕНИЕ СЕРТИФИКАТОВ УЦ И ВЕБ-СЕРВЕРА

Сгенерированный файл запроса ~/tlssreq.csr следует обработать в Удостоверяющем центре. При тестировании можно использовать тестовый УЦ компании КриптоПро: http://www.cryptopro.ru/certsrv/certrqxt.asp. На данной странице в поле «Base-64-шифрованный запрос сертификата (CMC или PKCS #10 или PKCS #7)» нужно вставить содержимое файла запроса и продолжить работу, нажав на кнопку «Выдать >». Затем следует подтвердить передачу данных по незашифрованному каналу, в следующем окне обязательно выбрать «Base64-шифрование» и выполнить пункт «Загрузить сертификат». Полученный в УЦ сертификат веб-сервера сохраните на сервере в файл ~/servergost.cer.

Для получения сертификата УЦ нужно зайти на страницу http://www.cryptopro.ru/certsrv, выбрать пункт «Получить сертификат Удостоверяющего Центра или действующий список отозванных сертификатов» и продолжить работу, нажав на кнопку «Дальше >> >». В следующем окне следует выбрать «Base64-шифрование» и выполнить пункт «Загрузка сертификата ЦС». Сохраните сертификат УЦ на сервере в файл ~/caservergost.cer.

УСТАНОВКА СЕРТИФИКАТА УЦ

Сертификат корневого Удостоверяющего центра должен быть установлен в хранилище корневых ("root") сертификатов. Для установки корневого сертификата УЦ в машинное хранилище корневых сертификатов получите привилегии супер-пользователя и выполните следующую команду: /opt/cprocsp/bin/<arch>/certmgr -inst -store mRoot -file ~tomcat/caservergost.cer -cert

Если команда установки сертификата выполнилась с кодом ошибки 0x00000000, значит, сертификат УЦ успешно установлен. В случае если серверный сертификат издан промежуточным УЦ, то сертификат последнего должен быть установлен в хранилище сертификатов промежуточных УЦ ("ca"), а корневой, которым подписан промежуточный, в хранилище корневых сертификатов ("root"). Установка сертификата корневого УЦ описана выше.

Установка промежуточных сертификатов в машинное хранилище должна выполняться с привилегиями супер-пользователя командой /opt/cprocsp/bin/<arch>/certmgr -inst -store mCa -file ~tomcat/intermediategost.cer -cert

УСТАНОВКА СЕРТИФИКАТА ВЕБ-СЕРВЕРА

Для установки в хранилище my пользователя tomcat сертификата веб-сервера, полученного на предыдущем этапе (обязательно в формате "Base64"), необходимо от его имени выполнить команду /opt/cprocsp/bin/<arch>/cryptcp -instcert -provtype 75 ~/servergost.cer и в появившемся пронумерованном списке контейнеров указать номер соответствующего контейнера и пароль на данный контейнер.

В случае, если предыдущая команда завершится с ошибкой, можно попробовать установить серверный сертификат другим способом: /opt/cprocsp/bin/<arch>/certmgr -inst -store uMy -file ~/servergost.cer -cont "\\\\.\\HDIMAGE\\tlsserver"

Если одна из предыдущих команд установки сертификата выполнилась с кодом ошибки 0x00000000 или сообщением «Certificate is installed.», значит, серверный сертификат установлен в личное хранилище текущего пользователя со ссылкой на закрытый ключ. Проверить наличие установленного серверного сертификата в личном ("my") хранилище сертификатов пользователя tomcat можно, выполнив следующую команду: /opt/cprocsp/bin/<arch>/certmgr -list -store uMy -cert

В выведенном на экран списке в блоке соответствующего сертификата должна присутствовать строчка: PrivateKey Link: Yes. Container: <имя_контейнера>

УСТАНОВКА СИСТЕМНЫХ ПЕРЕМЕННЫХ ОКРУЖЕНИЯ JAVА

Скопируйте сертификат веб-сервера в каталог /opt/apache-tomcat-5.5.28/conf:

cp ~/servergost.cer /opt/apache-tomcat-5.5.28/conf

Для указания серверного сертификата и пароля к ключу соответствующего контейнера приватного ключа используются следующие параметры системного окружения Java:

com.digt.trusted.jsse.server.certFile
com.digt.trusted.jsse.server.keyPasswd

В связи с этим нужно добавить в начале файла $CATALINA_HOME/bin/startup.sh следующую строку

export JAVA_OPTS="$JAVA_OPTS -Dcom.digt.trusted.jsse.server.certFile=/opt/apache-tomcat5.5.28/conf/servergost.cer -Dcom.digt.trusted.jsse.server.keyPasswd=*******"

Замените «*» в пароле на конкретное его значение.

Для повышения удобства работы и хранения данных веб-сайт TRUSTED.RU использует файлы COOKIE. Продолжая работу с веб-сайтом, Вы даете свое согласие на работу с этими файлами.