Qt HTTPS请求阻止劫持数据

3 篇文章 0 订阅
1 篇文章 0 订阅

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就安分了。

参考

Ignore SSL Certificates in QT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值