Я настроил взаимные tls между приложением python с использованием PyMQI, поддерживаемого IBM MQ toolkit для MacOS (9.1.5.0), и диспетчером очередей, работающим на Raspberry Pi (9.2.0.0).
Я использовал самозаверяющие сертификаты, чтобы упростить проиллюстрировать пример сквозной конфигурации TLS с MQ. Обычно это не используется в производственной среде; Ваш администратор MQ обычно предоставляет любые сертификаты, которые могут вам понадобиться, которые часто выдаются центром сертификации. В этом случае вы можете пропустить шаги по созданию сертификата ниже.
Вот шаги, которые я предпринял:
Начальный сервер и Python установка кода
Настройте сервер IBM MQ, следуя этому руководству , которое предоставляет конфигурацию разработчика по умолчанию.
В примере python код из этого руководства и поместите сообщение на DEV.QUEUE.1
без настроенного TLS.
General Config
Конфигурация диспетчера очереди
Создание хранилища ключей сервера.
cd server
runmqakm -keydb -create -db key.kdb -pw <password> -stash
ls
Проверьте, чтобы увидеть key.crl key.kdb key.rdb key.sth
.
Убедитесь, что магазин пуст.
runmqakm -cert -list -db key.kdb -stashed
No certificates were found.
Создайте сервер сертификат и поместите его в новое хранилище ключей key.kdb
runmqakm -cert -create -db key.kdb -stashed -dn "cn=qm,o=ibm,c=uk" -label ibmwebspheremq<QMName_lowerCase> -type cms
Проверьте сертификат.
runmqakm -cert -list -db key.kdb -stashed
Certificates found
* default, - personal, ! trusted, # secret key
- ibmwebspheremqqm1
'-' обозначает частный ключ и личный сертификат в этом хранилище ключей.
Извлеките publi администратора очередей c ключ.
runmqakm -cert -extract -label ibmwebspheremq<QMName_lowerCase> -db key.kdb -stashed -file QM.cert
Проверьте, чтобы увидеть сертификат файл.
ls
QM.cert key.crl key.kdb key.rdb key.sth
Проверьте сертификат.
runmqakm -cert -details -file QM.cert -stashed
Конфигурация клиента
- Перейти в каталог клиента.
cd ../client
- Создайте клиентское хранилище ключей.
runmqakm -keydb -create -db client.kdb -pw <password> -stash
- Создайте сертификат клиента и поместите его в новое хранилище ключей
client.kdb
. runmqakm -cert -create -db client.kdb -stashed -dn "cn=pymqi,o=test,c=uk" -label ibmwebspheremq<userName_lowercase> -type cms
- Извлеките клиентский ключ publi c.
runmqakm -cert -extract -label ibmwebspheremq<userName_lowercase> -db client.kdb -stashed -file Client.cert
- При необходимости проверьте сертификат, изменив предыдущие команды
runmqakm -cert -list
из предыдущих шагов сервера.
Exchange publi c ключи
Заполните хранилище ключей клиента ключом publi c администратора очередей.
runmqakm -cert -add -label ibmwebspheremq<QMName_lowerCase> -db client.kdb -stashed -file ../server/QM.cert
Проверьте сертификат.
runmqakm -cert -list -db client.kdb -stashed
Certificates found
* default, - personal, ! trusted, # secret key
! ibmwebspheremqqm1
- ibmwebspheremqapp
Символ '!' показывает, что ключ publi c администратора очередей является доверенным.
Заполните хранилище ключей администратора очередей ключом publi c клиента.
Перейдите в каталог сервера .
cd ../server
runmqakm -cert -add -label ibmwebspheremq<userName_lowercase> -db key.kdb -stashed -file ../client/Client.cert
Проверьте сертификаты.
runmqakm -cert -list -db key.kdb -stashed
Certificates found
* default, - personal, ! trusted, # secret key
! ibmwebspheremqapp
- ibmwebspheremqqm1
Настройте TLS в диспетчере очереди
Переместите файлы key.kdb
и key.sth
из каталога tlsTest/server
в каталог /var/mqm/qmgrs/ssl/QM1
файловой системы администратора очередей.
Измените канал DEV.APP.SVRCONN
, чтобы он принимал наборы шифров TLS 1.2.
runmqsc QM1
ALTER CHANNEL(DEV.APP.SVRCONN) CHLTYPE(SVRCONN) SSLCIPH(ANY_TLS12)
Refre sh подсистема безопасности администратора очередей.
REFRESH SECURITY(*) TYPE(SSL)
TLS включил приложение MQ PyMQI
Добавьте cipher spe c и метку в приложение Python и включить параметры sco.
cd.SSLCipherSpec = b'ANY_TLS12'
sco = pymqi.SCO()
#include file name but not file extension
sco.KeyRepository = b'tlsTest/client/client'
sco.CertificateLabel =b'ibmwebspheremqapp'
Измените строку qmgr.connect
, чтобы добавить sco
параметры.
qmgr.connect_with_options(queue_manager, user=b'app', password=b'<your_password>', cd=cd, sco=sco)
Test Python приложение
Альтернативная конфигурация для использования переменных среды для ссылки на метку и хранилище ключей
Измените приложение python, чтобы удалить метку и хранилище ключей.
#sco = pymqi.SCO()
#sco.KeyRepository = b'tlsTest/client/client'
#sco.CertificateLabel =b'ibmwebspheremqapp'
#qmgr.connect_with_options(queue_manager, user=b'app', password=b'<your_password>', cd=cd, sco=sco)
qmgr.connect_with_options(queue_manager, user=b'app', password=b'<your_password>', cd=cd)
Установить переменные среды.
export MQSSLKEYR=tlsTest/client/client
export MQCERTLABL=ibmwebspheremqapp
Тест Python приложение