четверг, 22 июля 2010 г.

Сквозная аутенфикация при помощи JA-SIG CAS. Часть третья - настройка SSL в Tomcat 6.

В предыдущих частях (1, 2), посвященных системе сквозной аутенфикации, описывались начальные шаги по развертыванию системы сборки CAS-сервера и реализации обработчика аутенфикации. На данном этапе у нас должна быть сборка CAS-сервера, готовая к развертыванию на рабочем сервере. Это не представляет труда за одним небольшим нюансом. Протокол CAS требует работы через SSL. Таким образом, появляется необходимость настройки SSL для веб-контейнера. Наиболее популярным веб-контейнером является Apache Tomcat. На момент написания данной статьи, актуальной являлась версия 6.0.28. Данная статья покажет один из способов настройки поддержки SSL для Tomcat.

Настройка tomcat сводится фактически к 3 основным действиям:
  1. Генерация сертификата;
  2. Включение SSL коннектора tomcat;
  3. Импорт сертификата в клиентские системы.
Итак, попорядку.
Прежде всего необходимо сгенерировать самоподписанный (self-signed) SSL сертификат. Сделать это можно при помощи утилиты keytool, входящей в состав sun-jdk.
#${JAVA_HOME}/bin/keytool -genkey -alias cas.example.com \
-keyalg RSA -keystore /tmp/.keystore

Утилита потребует от Вас заполнения ряда атрибутов для сертификата, а также попросит определить пароль для файла-хранилища сертификата. В качестве параметра alias для утилиты, я использовал доменное имя, где будет располагаться CAS-сервер. Результатом работы утилиты будет файл-хранилище сертификата (/tmp/.keystore). Данный файл нам пригодится на втором этапе настройки SSL для tomcat. Его необходимо перенести в общедоступное место, например, в /etc/tomcat-cert. Я разместил .keystore в ${CATALINA_HOME}/conf.  Но тут ограничений никаких нет.
Далее наша работа будет сосредоточена вокруг редактирования файла конфигурации сервера tomcat - server.xml (${CATALINA_HOME}/conf/server.xml).  Все, что нам необходимо, это всего лишь раскоментировать ssl-connector и объяснить ему где находится хранилище сертификата.
Необходимо найти строку, содержащу:
<Connector port="8443"...>
раскоментировать данный блок и привести его к следующему виду:
<Connector clientAuth="false" keystoreFile="/opt/tomcat/conf/.keystore"
              keystorePass="password" maxThreads="150" 
              port="8443" scheme="https" secure="true" 
              sslEnabled="true" sslProtocol="TLS"/>
Данный блок дополнен параметрами keystoreFile и keystorePass, определяющих наше хранилище.
Данных настроек достаточно, для того, чтобы после перезапуска tomcat, довольствоваться защищенным соединением через порт 8443.
Я предпочитаю конфигурацию, когда каждое веб-приложение работает в рамках собственного поддомена. Для этого можно создать в ${CATALINA_HOME} директорию appBases, и для каждого веб-приложения в данной директории иметь поддиректорию. Так war-архив CAS-сервера, можно разместить в директории ${CATALINA_HOME}/appBases/cas/ROOT.war.
В server.xml необходимо будет добавить запись для данного приложения:
<Host name="cas.example.com" appBase="appBases/cas" 
         unpackWARs="true" autoDeploy="true" 
         xmlValidation="false" xmlNamespaceAware="false">
    <Context path="/ROOT" reloadable="true">
</Host>
После рестарта tomcat (при условии корректной настройки dns) можно обратиться к cas.example.com, как https://cas.example.com:8443 и убедиться в работоспособности сервера аутенфикации.
Итак, мы получаем полностью работоспособный сервер сквозной аутенфикации. Следующим крупным шагом станет интеграция системы CAS в конечные клиенты. Правда и тут не обходится без нюансов. Так как мы используем самоподписанный сертификат, для того, чтобы предотвратить возникновение исключений со стороны нашего java-софта при работе с CAS, необходимо импортировать сертификат в jre-клиентов. Импорт сертификата можно произвести все той же утилитой keytool. Одним из допустимых форматов импорта сертификата является DER.
Для его получения достаточно воспользоваться firefox. Перейти на защищенную страницу (https://cas.example.com:8443),  открыть информацию о странице, вкладку защита, просмотреть сертификат, подробности, экспортировать. Далее остается выбрать "сертификат X.509 в формате DER", и сохранить. В моем случае получился файл cas.example.com.der.
Импорт сертификата в jre производится магическим заклинанием:
#${JAVA_HOME}/bin/keytool -import -keystore \
 ${JRE_HOME}/lib/security/cacerts -file cas.example.com.der -alias cas.example.com
Магию следует применять на каждом хосте, где планируется использование клиента CAS-сервера.
Сдедующая часть будет посвящена именно созданию клиента в среде spring framework.

Комментариев нет: