Bgbilling, настройка сертификатов платежной системы

Подвернулась тут задача по прикручиванию ssl сертификатов платежной системы qiwi к биллинговой системе bgbilling. Я довольно редко занимаюсь конечными пользовательскими приложениями, но тут хороший клиент попросил.
Bgbilling - это биллинговая система, написанная на java и предназначенная для автоматизации рабрты операторов связи.

Суть была в следующем, машина на FreeBSD, установлена java и биллинг. Вышел срог действия SSL сертификатов, в том числе и сертификата для приема платежей через терминалы qiwi. Нужно было все это вернуть в рабочее состояние. Задача усложнилась тем, что настраивали все это хозяйство 3 года назад, кто настраивал, неизвестно, где и какие пароли стоят ( хранилище ключей, основной ключ платежной системы ) , история тоже умалчивала.

установка и настройка сертификатов платежной системы

Серверная часть биллинга у нас установлена в папку /usr/local/bgbilling/server, для "что-бы ничего не сломать", создаем там папку test, в ней и будем пока работать:

root@billing: # mkdir /usr/local/bgbilling/server/test
root@billing: # cd /usr/local/bgbilling/server/test

Создаем хранилище ключей, файл .keystore, с добавлением в него основного сертификата сервера. Для работы с хранилищем ключей использкется утилита keytool из поставки java:

root@billing: # keytool -keystore .keystore -alias bgbilling -genkey -keyalg RSA -dname "cn=domain.com, email=admin@domain.com,ou=BGBilling, o=BGBilling, c=RU" -validity 1200

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

Теперь нужно экспортировать из хранилища сертификат сервера, будет запрошен пароль на хранилище, у нас это bgbilling:

root@billing: # keytool -keystore .keystore -alias bgbilling -exportcert -file bgbilling.cer

В текущей папке получаем файл сертификата bgbilling.cer

На всякий пожарный, конвертируем полученный ssl сертификат в pem формат:

root@billing: # openssl x509 -inform der -in bgbilling.cer -out bgbilling.pem

В текущей папке появился файл bgbilling.pem.

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

root@billing: #  keytool -keystore .keystore -list
Enter keystore password:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

bgbilling, Apr 19, 2013, PrivateKeyEntry,
Certificate fingerprint (MD5): 45:49:F4:CB:57:C2:CD:5D:E1:FE:35:76:0D:DE:F6:72

видим что там сейчас одна запись

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

root@billing: # openssl genrsa -des3 -out mps.key 1024
Generating RSA private key, 1024 bit long modulus
......................................++++++
.................++++++
e is 65537 (0x10001)
Enter pass phrase for mps.key: # устанавливаем пароль
Verifying - Enter pass phrase for mps.key: # подтверждение пароля

в папке появится файл ключа mps.key.

Теперь собственно создаем сертификат на основе, только что сгенерированного, ключа:

root@billing: # openssl req -new -x509 -days 1001 -key mps.key -out mps.pem
Enter pass phrase for mps.key: # вводим пароль приватного ключа
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:.
Locality Name (eg, city) []:Mordor
Organization Name (eg, company) [Internet Widgits Pty Ltd]:provider
Organizational Unit Name (eg, section) []:provider
Common Name (eg, YOUR name) []:domain.com
Email Address []:support@domain.com

в текущей папке наблюдаем файл сертификата mps.pem.

Теперь добавляем этот сертификат в наше хранилище ключей:

root@billing: # keytool -keystore .keystore -alias mps -importcert -file mps.pem
Enter keystore password: # вводим пароль от хранилища
Owner: EMAILADDRESS=support@domain.com, CN=domain.com, O=provider, L=Mordor, C=RU
Issuer: EMAILADDRESS=support@domain.com, CN=domain.com, O=provider, L=Mordor, C=RU
Serial number: 896dfb8e257f8f26
Valid from: Fri Apr 19 13:01:59 MSD 2013 until: Fri Jan 15 12:01:59 MSK 2016
Certificate fingerprints:
         MD5:  93:81:A6:E4:34:F3:C8:91:38:E7:64:F8:4B:4A:A8:2B
         SHA1: 3A:AF:04:58:AC:EF:F9:F7:D9:26:E8:6F:4D:BC:E9:72:52:4A:B0:D1
         Signature algorithm name: SHA1withRSA
         Version: 3

Extensions:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 4B E6 8E 3C 91 26 F7 FB   44 43 A5 32 2B F7 C7 57  K..<.&..DC.2+..W
0010: 8F 1B C9 36                                        ...6
]
]

#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

#3: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 4B E6 8E 3C 91 26 F7 FB   44 43 A5 32 2B F7 C7 57  K..<.&..DC.2+..W
0010: 8F 1B C9 36                                        ...6
]

[EMAILADDRESS=support@domain.com, CN=domain.com, O=provider, L=Mordor, C=RU]
SerialNumber: [    896dfb8e 257f8f26]
]

Trust this certificate? [no]:  yes # соглашаемся
Certificate was added to keystore

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

root@billing: # keytool -keystore .keystore -list
Enter keystore password:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 2 entries

bgbilling, Apr 19, 2013, PrivateKeyEntry,
Certificate fingerprint (MD5): 45:49:F4:CB:57:C2:CD:5D:E1:FE:35:76:0D:DE:F6:72
mps, Apr 19, 2013, trustedCertEntry,
Certificate fingerprint (MD5): 93:81:A6:E4:34:F3:C8:91:38:E7:64:F8:4B:4A:A8:2B

Теперь перейдем к сертификату платежной системы. QIWI прислали нам на подпись запрос сертификата в виде файла osmp.csr, его и подписываем ранее сгенерированным ключом:

root@billing: # openssl x509 -req -in osmp.csr -CA mps.pem -CAkey mps.key -out osmp.pem -days 1001 -CAcreateserial -CAserial mps.seq
Signature ok
subject=/C=RU/ST=Msk/L=Msk/O=OSMP/OU=rfp/CN=OSMP/emailAddress=rfp@osmp.ru
Getting CA Private Key
Enter pass phrase for mps.key: # Вводим пароль приватного ключа

на выходе получаем ssl сертификат в виде файла osmp.pem. Его нужно будет отправить в платежную систему QIWI, откуда мы получали файл запроса osmp.csr.

Обратите внимание, отправить необходимо только этот файл, никаких других ключей, сертификатов и прочего, отправлять не нужно.

Так-же добавляем этот сертификат в хранилище

root@billing: # keytool -keystore .keystore -alias osmp -importcert -file osmp.pem
Enter keystore password: # Пароль от хранилища
Certificate was added to keystore

проверим содержимое .keystore:

root@billing: # keytool -keystore .keystore -list
Enter keystore password: # Пароль от хранилища

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 3 entries

bgbilling, Apr 19, 2013, PrivateKeyEntry,
Certificate fingerprint (MD5): 45:49:F4:CB:57:C2:CD:5D:E1:FE:35:76:0D:DE:F6:72
mps, Apr 19, 2013, trustedCertEntry,
Certificate fingerprint (MD5): 93:81:A6:E4:34:F3:C8:91:38:E7:64:F8:4B:4A:A8:2B
osmp, Apr 19, 2013, trustedCertEntry,
Certificate fingerprint (MD5): 83:6E:67:25:42:F3:C2:85:CE:FA:D4:4C:80:F1:76:D6

Видим что там появилась еще одна запись.

Теперь извлекаем публичный ключ из сертификата платежной системы, файл osmp.pem:

root@billing: # openssl x509 -inform pem -in osmp.pem -pubkey

Нас интересует только часть, находящаяся между метками BEGIN PUBLIC KEY и END PUBLIC KEY. Ее нужно скопировать в настройки платежной системы в клиентском приложении биллинга, без пробелов, переносов строк, одной строкой. Выглядеть это будет примерно так:

mps.1.cert.pem=MIGfMA0GCSqG...............qg3HSBRymgelGGLQIDAQAB

В корневой папке биллинга лежит старое хранилище ключей, файл /usr/local/bgbilling/server/.keystore. Переименовываем его на всякий случай, например в /usr/local/bgbilling/server/.keystore-backup и кладем на его место получившийся у нас .keystore.

Собственно на этом все, платежи от киви должны проходить нормально.

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
Регистр имеет значение
  oooooooooooo   .ooooo.     o8o    .o8          oooooooo  oooo  
d'""""""d888' 888' `Y88. `"' "888 dP""""""" `888
.888P 888 888 oooo 888oooo. d88888b. 888
d888' `Vbood888 `888 d88' `88b `Y88b 888
.888P 888' 888 888 888 ]88 888
d888' .P .88P' 888 888 888 o. .88P 888
.8888888888P .oP' o888o `Y8bod8P' `8bd88P' o888o


Введите код, изображенный в стиле ASCII-арт.