我使用Qt文档中的示例代码创建了一个SSL服务器。然后我使用QSslSocket::connectToHostEncrypted
连接到它。
然而,服务器失败,这位于QSslSocket::errorString()
Cannot provide a certificate with no key,
error:0907B068:PEM routines:PEM_READ_BIO_PRIVATEKEY:bad password read
我使用以下代码设置证书和私钥:
serverSocket->setLocalCertificate("/home/user/Workspace/openssl/cacert.pem");
serverSocket->setPrivateKey("/home/user/Workspace/openssl/privkey.pem");
我在Ubuntu上使用此命令创建了cacert.pem
和privkey.pem
:
openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 1825
答案 0 :(得分:1)
错误是因为我没有指定私钥的密码(openssl在证书创建期间要求我提供的密码)。而不是
serverSocket->setPrivateKey("/home/user/Workspace/openssl/privkey.pem");
我现在打电话
serverSocket->setPrivateKey("/home/user/Workspace/openssl/privkey.pem", QSsl::Rsa, QSsl::Pem, "mypassword");
这解决了这个问题。