Настройка SSL между сервером и клиентом
По умолчанию обмен между клиентом и сервером биллинга, а также между Web-браузером клиента и сервером биллинга, производится по протоколу HTTP. В дополнение к нему вы можете настроить HTTPS-режим соединений, позволяющий безопасно подключаться к серверу биллинга из-за пределов вашей сети клиентом, либо получать безопасный доступ к статистике вашим абонентам.
Вы можете пропустить эту главу при первичном знакомстве с биллингом |
Для работы по HTTPS требуется серверный сертификат - пара private key и public key, public key обернут сертификатом. Сертификат и private key должны находится в хранилище сертификатов - .keystore.
Работа сертификатов основывается на паре асинхронных ключей. Необходимо создать их, для этого воспользуемся утилитой keytool, которая идет вместе с JRE/JDK:
keytool -keystore .keystore -alias abilling -genkey -keyalg RSA -dname "cn=bill.provider.ru, email=email@provider.ru,ou=Provider Billing, o=Provider, c=RU" -validity 1001
Параметр -validity указывает сколько дней будет действителен сертификат.
Утилита попросит ввести пароль для хранилища и пароль для закрытого ключа (private key).
Оба пароля должны совпадать и быть прописаны в конфиге сервера (по умолчанию биллинг пытается использовать значение 'abilling'):
keystore.password=abilling
cn - common name - имя сервера. Пользователь заходит на https://bill.provider.ru/, сервер возращает сертификат, браузер проверяет имя на совпадение - если не совпадает, то выводится предупреждение.
ou - organization unit, o - organization, c - country
После работы утилиты появится файл .keystore, в нем в алиасе abilling - закрытый ключ и сертификат. Закрытый ключ нельзя передавать никому.
Просмотреть хранилище можно командой:
keytool -keystore .keystore -list -rfc
Экспортировать сертификат, чтобы удаленная сторона могла добавить его в доверенные:
keytool -keystore .keystore -alias abilling -exportcert -file abilling.cer
В данный момент хранилище уже готово для работы, но текущий сертификат подписан самим собой, т.е. не подписан доверенным сертификатом - таким образом, когда клиент зайдет на https://bill.provider.ru/ - ему выведется предупреждение, например, "К сертификату нет доверия, так как он является самоподписанным." и предложат уйти с сайта, продолжить работать или добавить сертификат в доверенные и продолжить работать.
Если вы хотите, чтобы браузер сразу доверял сертификату, необходимо его подписать одним из Certification Authority (CA), например VeriSign, Inc. Для этого создаем запрос на подпись сертификата - Certificate Signing Request (CSR).
keytool -keystore .keystore -alias abilling -certreq -file abilling.csr
Созданный запрос нужно отправить CA, в ответ вы получите серфтикат, подписанный им (или цепь сертификатов).
Сначала необходимо импортировать сертификат CA в доверенные (или верхний из цепи сертификатов, например ROOT), т.к. при импорте ответа проверяется, что ответ подписан доверенным сертификатом.
keytool -keystore .keystore -alias verisign -importcert -file verisign.cer
Далее импортируем ответ, он заменит наш самоподписанный сертификат:
keytool -keystore .keystore -alias abilling -importcert -trustcacerts -file response.cer
Более подробную информацию о работе keytool можно получить здесь: http://java.sun.com/javase/6/docs/technotes/tools/windows/keytool.html
Скопируйте файл .keystore в каталог BillingServer. В файле data.properties сервера укажите:
connector.https=*:8443
Далее перезапустите его. Если нужно поднять биллинг на конкретном ip (интерфейсе) , то вместо "*" можно указать его, например "81.30.30.30:8443".
В результате сервер начинает слушать на 2х портах. Не стоит убирать http.port, т.к. сервер должен обращаться к самому себе за некоторыми ресурсами (XSL-файлы) по этому протоколу.
При этом клиенты для просмотра Web-статистики также могут использовать 2 вида протоколов HTTP и HTTPS. Для обращения через безопасное соединение необходимо набирать https://<IP адрес сервера биллинга>:8443/abilling/webexecuter.
Редактируем файл client.properties в клиенте
db.server.0.url=http://127.0.0.1:8080/abilling/executer
меняем на
db.server.0.url=https://bill.provider.ru:8443/abilling/executer
Руководство по интеграция существующего сертификата и приватного ключа SSL в хранилище keystore вы можете найти здесь.