Я создал сервер SSL, используя пример кода из документации Qt. Затем я подключаюсь к нему, используя 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");
Я создал cacert.pem
а также privkey.pem
используя эту команду в Ubuntu:
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");
и это решает проблему.
Других решений пока нет …