Настройка связки 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
задайте пароль пользователю tomcat
распакуйте дистрибутив Tomcat в каталог /opt, например
присвойте соответствующие права на каталог с веб-сервером для полного доступа к его файлам настроек и логам пользователю tomcat, например:Запуск и остановка Tomcat под Linux¶
Войдите в систему пользователем tomcat, задайте переменные окружения CATALINA_HOME и JAVA_HOME, которые соответственно указывают на каталог установки Tomcat и JRE, например:
Теперь запустите Tomcat:
Для остановки Tomcat выполните:
Настройка 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), содержащее один самоподписанный сертификат, используя команду:
и укажите пароль для доступа к ключу, желательно, "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" />
Для версии 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:
Для указания серверного сертификата и пароля к ключу соответствующего контейнера приватного ключа используются следующие параметры системного окружения Java:
В связи с этим нужно добавить в начале файла $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=*******"
Замените «*» в пароле на конкретное его значение.