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