使用Qt

时间:2019-05-19 19:45:29

标签: c++ qt ssl oauth-2.0

我正在使用使用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有关的错误。

0 个答案:

没有答案