Qt5如何使用客户端证书连接https服务器?

时间:2013-12-31 07:52:41

标签: qt certificate qtwebkit qwebview

我正在打开QWebView并加载https://xxx.xx.xx,这需要客户端传递p12证书。 所有浏览器都显示客户端证书列表并要求选择一个以供使用。 QWebView不处理这种情况。 也许有办法告诉QWebView处理这种情况?

1 个答案:

答案 0 :(得分:0)

此处未演示允许用户从列表中选择证书,但是一旦您拥有了要用于此的证书,就可以使用以下内容。

第一种方法:这是全局设置,我相信QWebView应该使用它

QSslConfiguration config = QSslConfiguration::defaultConfiguration();
config.setLocalCertificate(yourCert);
config.setPrivateKey(yourKey);
QSslConfiguration::setDefaultConfiguration(config);

第二种方法:仅在使用WebKit浏览器而非WebEngine浏览器时才可能

扩展QNetworkAccessManager并在createRequest中设置协议:

class NetworkAccessManager : public QNetworkAccessManager
{
    Q_OBJECT
public:
    explicit NetworkAccessManager(QObject *parent = 0);

protected:
    virtual QNetworkReply * createRequest(Operation operation, const QNetworkRequest & request, QIODevice * outgoingData = 0) {
        // I have no idea why request is const, but I need to change it
        QNetworkRequest notConstRequest = request;
        QSslConfiguration conf = notConstRequest.sslConfiguration();
        conf.setLocalCertificate(yourCert);
        conf.setPrivateKey(yourKey);
        notConstRequest.setSslConfiguration(conf);
        return QNetworkAccessManager::createRequest(operation, notConstRequest, outgoingData);
    }
};

然后设置setNetworkAccessManager

(以上方法是以下SO帖子中提供的信息的修改版本,应该解决这个问题。)

Is this the right way to set the SSL protocol with QWebPage?