Pymqi - Подключение к IBM mq с помощью SSL - PullRequest
2 голосов
/ 05 августа 2020

Я могу подключиться к IBM mq через Pymqi, используя установленный клиент MQ v9 на моем Linux компьютере. Требуется подключение через SSL. Как мне создать репозиторий ключей для двустороннего TLS (mTLS)?

1 Ответ

4 голосов
/ 11 августа 2020

Я настроил взаимные 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

  • Создал несколько рабочих каталогов на моем клиенте Ma c.
    mkdir tlsTest
    cd tlsTest
    mkdir client
    mkdir server
    

Конфигурация диспетчера очереди

  • Создание хранилища ключей сервера.

    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 приложение

...