Получение обратного вызова https с помощью Qt - PullRequest
0 голосов
/ 19 мая 2019

Я работаю с приложением (TDAmeritrade), которое использует OAuth2 для доступа к API. После входа в систему через веб-портал он перенаправляет меня на https://localhost/?code=XXXX. Мне нужно получить код «XXXX» для дальнейших вызовов API. Я использую Qt для настройки https-сервера на локальном хосте, но до сих пор он отключается при установлении связи TLS без явной ошибки. Я использую Firefox в Linux с самозаверяющими сертификатами.

Мой код в настоящее время очень похож на файл примера sslechoserver.cpp из QT, но я удалил посылки. Я не считаю, что мои сертификаты являются проблемой, так как у меня есть самозаверяющие сертификаты для моего маршрутизатора 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";
  }

Я ожидал ввести метод onNewConnection, когда зайду в firefox и введу https://localhost в адресную строку. Здесь время ожидания для рукопожатия TLS. Я никогда не вхожу в функции, которые я связал с какой-либо ошибкой или новым соединением. Я не получаю никаких файловых ошибок или ошибок, связанных с привязкой к порту 443.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...