Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 这是使用QWebPage设置SSL协议的正确方法吗?_Qt_Ssl_Qtwebkit - Fatal编程技术网

Qt 这是使用QWebPage设置SSL协议的正确方法吗?

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或

我一直在Qt中使用SSL,在Qt中我需要设置一个特定的协议(而不是默认的“安全协议”)。看起来这是可行的:

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);
    }
};