我正在使用使用OAuth2访问API的应用程序(TDAmeritrade)。通过网络门户登录后,它将我重定向到https://localhost/?code=XXXX。我需要获取代码“ XXXX”以进一步调用该api。我正在使用Qt在本地主机上设置https服务器,但到目前为止,它在TLS握手中超时,没有明显的错误。我在Linux上使用带有自签名证书的firefox。
我的代码当前与QT中的sslechoserver.cpp示例文件非常相似,但我删除了发送。我不认为我的证书有问题,因为我的pfSense路由器具有自签名证书,可以成功启用https并使用相同的过程来设置这些新证书。下面是类设置的代码。
mWebSocketServer = new QWebSocketServer(QStringLiteral("https://localhost"),
QWebSocketServer::SecureMode, this);
QFile certFile("/home/dave/Downloads/sabre.Local.crt");
QFile keyFile("/home/dave/Downloads/sabre.Local.key");
if(!certFile.open(QIODevice::ReadOnly) || !keyFile.open(QIODevice::ReadOnly)) {
qDebug() << __FUNCTION__ << ":Unable to open Cert/Key Files";
}
QSslConfiguration sslConfig;
QSslCertificate certificate(&certFile, QSsl::Pem);
QSslKey sslKey(&keyFile, QSsl::Rsa, QSsl::Pem);
certFile.close();
keyFile.close();
sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone);
sslConfig.setLocalCertificate(certificate);
sslConfig.setPrivateKey(sslKey);
sslConfig.setProtocol(QSsl::TlsV1SslV3);
mWebSocketServer->setSslConfiguration(sslConfig);
if(mWebSocketServer->listen(QHostAddress::Any, 443)) {
qDebug() << __FUNCTION__ << ":SSL Echo Server listening on port" << 443;
connect(mWebSocketServer, &QWebSocketServer::newConnection, this,
&O2ReplyServerSSL::onNewConnection);
connect(mWebSocketServer, &QWebSocketServer::sslErrors, this,
&O2ReplyServerSSL::onSslErrors);
connect(mWebSocketServer, &QWebSocketServer::serverError, this,
&O2ReplyServerSSL::onServerError);
connect(mWebSocketServer, &QWebSocketServer::acceptError, this,
&O2ReplyServerSSL::onAccecptError);
} else {
qDebug() << __FUNCTION__ << ":Server Unable to Listen";
}
当我进入Firefox并在地址栏中输入https://localhost时,我希望输入onNewConnection方法。这是TLS握手超时的地方。我从不输入绑定到任何错误或新连接的功能。我没有收到任何文件错误或与绑定到端口443有关的错误。