QSslSocket::startServerEncryption 失败,"PEM_READ_BIO_PRIVATEKEY:bad password read"

QSslSocket::startServerEncryption fails with "PEM_READ_BIO_PRIVATEKEY:bad password read"

本文关键字:PRIVATEKEY password read BIO bad PEM startServerEncryption 失败 QSslSocket READ      更新时间:2023-10-16

我使用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.pemprivkey.pem:

openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 1825

这个错误是因为我没有指定私钥的密码(openssl在创建证书时要求我输入的密码)。所以不用

serverSocket->setPrivateKey("/home/user/Workspace/openssl/privkey.pem");

现在调用

serverSocket->setPrivateKey("/home/user/Workspace/openssl/privkey.pem", QSsl::Rsa, QSsl::Pem, "mypassword");

,这就解决了这个问题