Я пытаюсь настроить 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
,
Спасибо
Это работает с QPID Proton 0.23.0 для API и QPID CPP 1.38.0 для C ++ Broker.
Текст включен в курсив для тех, кто хочет аутентификацию клиента.
Я понял, как это сделать с помощью самозаверяющих сертификатов:
certutil -N -d [db-directory]
,certutil -S -s "CN=[ca-name]" -n [ca-name] -x -t "CTu,CTu,CTu" -1 -2 -5 -k rsa -d [db-directory]
,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]
,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:
pk12util -o [client/server].p12 -d [db-directory] -n [client-cert-name/server-cert-name]
,openssl pkcs12 -in server.p12 -out server.pem -nodes
,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.
Других решений пока нет …