15. Настройка SSL между сервером и клиентом

По умолчанию обмен между клиентом и сервером биллинга, а также между Web-браузером клиента и сервером биллинга, производится по протоколу HTTP. В дополнение к нему вы можете настроить HTTPS-режим соединений, позволяющий безопасно подключаться к серверу биллинга из-за пределов вашей сети клиентом, либо получать безопасный доступ к статистике вашим абонентам.

Замечание

Вы можете пропустить эту главу при первичном знакомстве с биллингом

Для работы по HTTPS требуется серверный сертификат - пара private key и public key, public key обернут сертификатом. Сертификат и private key должны находится в хранилище сертификатов - .keystore.

Работа сертификатов основывается на паре асинхронных ключей. Необходимо создать их, для этого воспользуемся утилитой keytool, которая идет вместе с JRE/JDK:

keytool -keystore .keystore -alias bgbilling -genkey -keyalg RSA -dname "cn=bill.provider.ru, email=email@provider.ru,ou=Provider Billing, o=Provider, c=RU" -validity 1001

Параметр -validity указывает сколько дней будет действителен сертификат.

Утилита попросит ввести пароль для хранилища и пароль для закрытого ключа (private key).

Оба пароля должны совпадать и быть прописаны в конфиге сервера (по умолчанию биллинг пытается использовать значение 'bgbilling'):

keystore.password=bgbilling

cn - common name - имя сервера. Пользователь заходит на https://bill.provider.ru/, сервер возращает сертификат, браузер проверяет имя на совпадение - если не совпадает, то выводится предупреждение.

ou - organization unit, o - organization, c - country

После работы утилиты появится файл .keystore, в нем в алиасе bgbilling - закрытый ключ и сертификат. Закрытый ключ нельзя передавать никому.

Просмотреть хранилище можно командой:

keytool -keystore .keystore -list -rfc

Экспортировать сертификат, чтобы удаленная сторона могла добавить его в доверенные:

keytool -keystore .keystore -alias bgbilling -exportcert -file bgbilling.cer

В данный момент хранилище уже готово для работы, но текущий сертификат подписан самим собой, т.е. не подписан доверенным сертификатом - таким образом, когда клиент зайдет на https://bill.provider.ru/ - ему выведется предупреждение, например, "К сертификату нет доверия, так как он является самоподписанным." и предложат уйти с сайта, продолжить работать или добавить сертификат в доверенные и продолжить работать.

Если вы хотите, чтобы браузер сразу доверял сертификату, необходимо его подписать одним из Certification Authority (CA), например VeriSign, Inc. Для этого создаем запрос на подпись сертификата - Certificate Signing Request (CSR).

keytool -keystore .keystore -alias bgbilling -certreq -file bgbilling.csr

Созданный запрос нужно отправить CA, в ответ вы получите серфтикат, подписанный им (или цепь сертификатов).

Сначала необходимо импортировать сертификат CA в доверенные (или верхний из цепи сертификатов, например ROOT), т.к. при импорте ответа проверяется, что ответ подписан доверенным сертификатом.

keytool -keystore .keystore -alias verisign -importcert -file verisign.cer

Далее импортируем ответ, он заменит наш самоподписанный сертификат:

keytool -keystore .keystore -alias bgbilling -importcert -trustcacerts -file response.cer

Более подробную информацию о работе keytool можно получить здесь: http://java.sun.com/javase/6/docs/technotes/tools/windows/keytool.html

Скопируйте файл .keystore в каталог BGBillingServer. В файле data.properties сервера укажите:

connector.https=*:8443

и перезапустите его. Если нужно поднять биллинг на конкретном ip (интерфейсе) , то вместо "*" можно указать его, например "81.30.30.30:8443".

В результате сервер начинает слушать на 2х портах. Не стоит убирать http.port, т.к. сервер должен обращаться к самому себе за некоторыми ресурсами (XSL-файлы) по этому протоколу.

При этом клиенты для просмотра Web-статистики также могут использовать 2 вида протоколов HTTP и HTTPS. Для обращения через безопасное соединение необходимо набирать https://<IP адрес сервера биллинга>:8443/bgbilling/webexecuter.

Редактируем файл client.properties в клиенте

db.server.0.url=http://127.0.0.1:8080/bgbilling/executer 

меняем на

db.server.0.url=https://bill.provider.ru:8443/bgbilling/executer 

Руководство по интеграция существующего сертификата и приватного ключа SSL в хранилище keystore вы можете найти в WiKi.