Qt 这是使用QWebPage设置SSL协议的正确方法吗?
我一直在Qt中使用SSL,在Qt中我需要设置一个特定的协议(而不是默认的“安全协议”)。看起来这是可行的:Qt 这是使用QWebPage设置SSL协议的正确方法吗?,qt,ssl,qtwebkit,Qt,Ssl,Qtwebkit,我一直在Qt中使用SSL,在Qt中我需要设置一个特定的协议(而不是默认的“安全协议”)。看起来这是可行的: QSslConfiguration config = QSslConfiguration::defaultConfiguration(); config.setProtocol(QSsl::TlsV1_0); QSslConfiguration::setDefaultConfiguration(config); 但是,像这样以全局方式设置协议,而不是在QWebPage或QWebView或
QSslConfiguration config = QSslConfiguration::defaultConfiguration();
config.setProtocol(QSsl::TlsV1_0);
QSslConfiguration::setDefaultConfiguration(config);
但是,像这样以全局方式设置协议,而不是在
QWebPage
或QWebView
或其他地方设置协议,这让我感到不舒服。我是否遗漏了一些明显的东西,或者这真的是最好的方法?我知道我可以在SSL套接字上设置它,但我使用的是QtWebKit,无法访问各个套接字。您可能会发现这很有用:,他使用与您设置协议相同的方法(在页面底部附近)
我找不到太多的资源,但是诺基亚的Qt文档明确指出,您可以专门在QSslSocket对象上设置协议。相关位:
请注意,更改QSslConfiguration中的设置不足以更改相关SSL连接中的设置。您必须在修改的QSslConfiguration对象上调用setSslConfiguration才能实现这一点。以下示例说明了如何在QSslSocket对象中将协议更改为TLSv1:
因此,是的,最好的方法可能是在每个套接字对象的基础上设置它,但是如果不可用,您的方法也可以工作。诺基亚网页:我发现这样做的方法是扩展
QNetworkAccessManager
并在以下位置设置协议:
然后我可以使用在我的
QWebpage
中设置它。不幸的是,这是每个套接字,套接字远低于QWebpage
可以访问的级别。很好的解决方案,类似于,这也解释了为什么我的解决方案不适用于您。不管怎样,很高兴你找到了答案!
QSslConfiguration config = sslSocket.sslConfiguration();
config.setProtocol(QSsl::TlsV1);
sslSocket.setSslConfiguration(config);
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.setProtocol(QSsl::TlsV1_0);
notConstRequest.setSslConfiguration(conf);
return QNetworkAccessManager::createRequest(operation, notConstRequest, outgoingData);
}
};