Qt HTTPS請求阻止劫持數據

Qt HTTPS請求阻止劫持數據

忽略證書驗證

我們開發過程中如果需要忽略證書錯誤,可以使用如下方法Ignore SSL Certificates in QT,然而這將導致https的安全功效形同虛設。
方法是在main方法裏添加

QSslConfiguration sslConf = QSslConfiguration::defaultConfiguration();
sslConf.setPeerVerifyMode(QSslSocket::VerifyNone);
QSslConfiguration::setDefaultConfiguration(sslConf);

// 禁用校驗
QSslConfiguration config ;
config.setPeerVerifyMode(QSslSocket::VerifyNone);

QNetworkRequest request(url);
request.setSslConfiguration(config);

Fiddler + Proxifier 強大組合

這個組合可以攔截到未做嚴格校驗的應用程序的ssl通信數據,具體操作可參考網絡文章。那麼如何阻擊這種劫持手段呢,下面介紹下Qt下如何防止https數據被竊聽,其實就是隻要嚴格證書校驗就能防住。

Qt HTTPS防竊聽

代碼如下:

// 啓用嚴格校驗
QSslConfiguration config ;
config.setPeerVerifyMode(QSslSocket::VerifyPeer); // QSslSocket::VerifyNone 可禁用校驗

QNetworkRequest request(url);
request.setSslConfiguration(config);

QNetworkReply* reply = networkManager->post(request, data);
connect(reply, SIGNAL(sslErrors(const QList<QSslError>)), this, SLOT(onSslError(const QList<QSslError>)));


// 這裏我們阻止自簽名和主機名不匹配的證書,其他類型暫放行
void Response::onSslError(QList<QSslError> errors)
{
    foreach (QSslError error, errors) {
        if(error.error() == QSslError::SelfSignedCertificate
                || error.error() == QSslError::HostNameMismatch) {
            return;
        }
    }

    QNetworkReply* reply = (QNetworkReply*)sender();
    reply->ignoreSslErrors();
}

這樣我們發現有相關SSL錯誤時候,禁止放行數據即可,這下Fiddler就安分了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章