QPID C++ 代理和 QPID-CPP SSL 证书
QPID C++ Broker and QPID-CPP SSL Certificates
我正在尝试使用 QPID 设置 SSL,但我在弄清楚如何设置证书时遇到了问题。我已经制作了一个证书数据库并向其中添加了一个自签名证书,如下所示:
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++ Broker,将 ${CERT_DIR}
、${NICKNAME}
和 ${CERT_PW_FILE}
传递给它。代理日志告诉我 SSL 侦听器在我选择的端口上 运行。
但是,我不确定在启动 QPID-CPP C++ 客户端时我应该给什么 directory/certificate 名称作为环境变量?我尝试将目录作为 ${CERT_DIR}
传递,将证书名称作为 ${NICKNAME}
传递,但这似乎不起作用; QPID 日志打印消息:
**[System] error Error reading socket: SSL peer cannot verify your certificate [-12271].**
设置用于 QPID 的服务器和客户端证书的正确步骤是什么?它说必须使用 certutil
.
来完成
谢谢
这适用于 API 的 QPID Proton 0.23.0 和 C++ Broker 的 QPID CPP 1.38.0。
文本包含在 斜体 是给需要客户端认证的人。
我想出了如何使用自签名证书:
- 生成证书数据库:
certutil -N -d [db-directory]
.
- 生成 CA 证书:
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]
如果你还需要客户端认证,传递flag --ssl-require-client-authentication
.
为了使用 QPID Proton C++ 客户端通过 SSL 连接,我们必须将我们的服务器证书导出为 .pem 文件 并将我们的客户端证书导出为 cert.pem 和 key.pem 文件:
- 将我们的服务器和客户端证书导出为 .p12 文件:
pk12util -o [client/server].p12 -d [db-directory] -n [client-cert-name/server-cert-name]
。
- 将服务器证书导出为 .pem 文件:
openssl pkcs12 -in server.p12 -out server.pem -nodes
。
- 将客户端证书导出为证书和密钥 .pem 文件:
- 证书:
openssl pkcs12 -in client.p12 -clcerts -nokeys -out clientcert.pem
.
- 键:
openssl pkcs12 -in client.p12 -nocerts -out clientkey.pem
.
然后可以将这些文件传递给 QPID Proton C++ API,后者将能够实例化与 QPID 代理的 SSL 连接。
我正在尝试使用 QPID 设置 SSL,但我在弄清楚如何设置证书时遇到了问题。我已经制作了一个证书数据库并向其中添加了一个自签名证书,如下所示:
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++ Broker,将 ${CERT_DIR}
、${NICKNAME}
和 ${CERT_PW_FILE}
传递给它。代理日志告诉我 SSL 侦听器在我选择的端口上 运行。
但是,我不确定在启动 QPID-CPP C++ 客户端时我应该给什么 directory/certificate 名称作为环境变量?我尝试将目录作为 ${CERT_DIR}
传递,将证书名称作为 ${NICKNAME}
传递,但这似乎不起作用; QPID 日志打印消息:
**[System] error Error reading socket: SSL peer cannot verify your certificate [-12271].**
设置用于 QPID 的服务器和客户端证书的正确步骤是什么?它说必须使用 certutil
.
谢谢
这适用于 API 的 QPID Proton 0.23.0 和 C++ Broker 的 QPID CPP 1.38.0。
文本包含在 斜体 是给需要客户端认证的人。
我想出了如何使用自签名证书:
- 生成证书数据库:
certutil -N -d [db-directory]
. - 生成 CA 证书:
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]
如果你还需要客户端认证,传递flag --ssl-require-client-authentication
.
为了使用 QPID Proton C++ 客户端通过 SSL 连接,我们必须将我们的服务器证书导出为 .pem 文件 并将我们的客户端证书导出为 cert.pem 和 key.pem 文件:
- 将我们的服务器和客户端证书导出为 .p12 文件:
pk12util -o [client/server].p12 -d [db-directory] -n [client-cert-name/server-cert-name]
。 - 将服务器证书导出为 .pem 文件:
openssl pkcs12 -in server.p12 -out server.pem -nodes
。 - 将客户端证书导出为证书和密钥 .pem 文件:
- 证书:
openssl pkcs12 -in client.p12 -clcerts -nokeys -out clientcert.pem
. - 键:
openssl pkcs12 -in client.p12 -nocerts -out clientkey.pem
.
- 证书:
然后可以将这些文件传递给 QPID Proton C++ API,后者将能够实例化与 QPID 代理的 SSL 连接。