QPID C ++ Broker и QPID-CPP SSL-сертификаты

Я пытаюсь настроить SSL с QPID, и у меня возникают проблемы с выяснением, как настроить сертификаты. Я сделал базу данных сертификатов и добавил в нее самоподписанный сертификат:

mkdir ${CERT_DIR}
certutil -N -d ${CERT_DIR} -f ${CERT_PW_FILE}
certutil -S -d ${CERT_DIR} -n ${NICKNAME} -s "CN=${NICKNAME}" -t "CT,," -x -f ${CERT_PW_FILE} -z /usr/bin/certutil

Затем я запустил брокер QPID C ++, передав ему ${CERT_DIR}, ${NICKNAME} и ${CERT_PW_FILE}, Журнал брокера говорит мне, что прослушиватель SSL работает на моем выбранном порту.

Однако я не уверен, какое имя каталога / сертификата я должен дать в качестве переменных среды при запуске клиента QPID-CPP C ++? Я попытался передать каталог как ${CERT_DIR} и название сертификата как ${NICKNAME} но это не похоже на работу; журнал QPID печатает сообщение:

**[System] error Error reading socket: SSL peer cannot verify your certificate [-12271].**

Как правильно настроить сервер и сертификат клиента для использования с QPID? Он говорит, что это должно быть сделано с помощью certutil,

Спасибо

0

Решение

Это работает с QPID Proton 0.23.0 для API и QPID CPP 1.38.0 для C ++ Broker.

Текст включен в курсив для тех, кто хочет аутентификацию клиента.

Я понял, как это сделать с помощью самозаверяющих сертификатов:

  1. Создать базу данных сертификатов: certutil -N -d [db-directory],
  2. Создать сертификат CA: certutil -S -s "CN=[ca-name]" -n [ca-name] -x -t "CTu,CTu,CTu" -1 -2 -5 -k rsa -d [db-directory],
  3. Создать сертификат сервера: certutil -S -s "CN=[server-cert-name]" -n [server-cert-name] -c "[ca-name]" -t "u,u,u" -m [unique-serial-no] -d [db-directory],
  4. Аналогично, сгенерируйте клиентский сертификат: certutil -S -s "CN=[client-cert-name]" -n [client-cert-name] -c "[ca-name]" -t "u,u,u" -m [unique-serial-no] -d [db-directory],

Это создает базу данных сертификатов с необходимыми сертификатами. Сохраните пароль, использованный для создания базы данных сертификатов, в файле [password-file], QPID C ++ Broker может быть запущен следующим образом:

[path-to-qpidd] --ssl-cert-password-file [password-file] --ssl-cert-db [db-directory] --ssl-cert-name [server-cert-name]

Если вам также требуется аутентификация клиента, установите флажок --ssl-require-client-authentication,

Чтобы использовать клиент QPID Proton C ++ для подключения через SSL, мы должны экспортировать наш сертификат сервера в виде файла .pem и наш сертификат клиента в виде файла cert.pem и key.pem:

  1. Экспортируйте наши серверные и клиентские сертификаты в виде файлов .p12: pk12util -o [client/server].p12 -d [db-directory] -n [client-cert-name/server-cert-name],
  2. Экспортируйте сертификат сервера в виде файла .pem: openssl pkcs12 -in server.p12 -out server.pem -nodes,
  3. Экспортируйте сертификат клиента в виде сертификата и файла ключа .pem:
    • Сертификат: openssl pkcs12 -in client.p12 -clcerts -nokeys -out clientcert.pem,
    • Ключ: openssl pkcs12 -in client.p12 -nocerts -out clientkey.pem,

Эти файлы затем могут быть переданы в QPID Proton C ++ API, который затем сможет создать SSL-соединение с брокером QPID.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]