2012-08-13 77 views
2

我一直在使用SSL在Qt的,在这里我需要设置一个特定的协议(而不是默认的“安全协议”)。它看起来像这样工作的:这是用QWebPage设置SSL协议的正确方法吗?

QSslConfiguration config = QSslConfiguration::defaultConfiguration(); 
config.setProtocol(QSsl::TlsV1_0); 
QSslConfiguration::setDefaultConfiguration(config); 

但它让我不舒服设置协议在这样一个全球性的方式,而不是将它设置在QWebPageQWebView什么的。我是否错过了一些明显的东西,或者这真的是最好的方法吗?我知道我可以在SSL套接字上设置它,但我使用的是QtWebKit,并且无法访问单个套接字。

回答

3

我发现这样做是为了在​​延长QNetworkAccessManager并设置协议方式:

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

然后我就可以把它用我英寸

+0

很好的解决方案,以及类似http://stackoverflow.com/questions/11303904/how-to-set-qwebviews-socket-options,这也解释了为什么我的解决方案并不为你工作。很高兴你知道了! – jaypb 2012-08-29 22:28:17

2

您可能会有所帮助:Https page works in Windows but not in Linux,他用同样的方法(靠近页面底部),你设置的协议做。

我找不到很多资源,但是诺基亚的Qt文档明确指出您可以可以专门设置QSslSocket对象上的协议。相关位:

请注意,更改QSslConfiguration中的设置不足以更改相关SSL连接中的设置。您必须在修改的QSslConfiguration对象上调用setSslConfiguration才能实现此目的。下面的例子说明如何将协议更改为使用TLSv1在QSslSocket对象:

QSslConfiguration config = sslSocket.sslConfiguration(); 
config.setProtocol(QSsl::TlsV1); 
sslSocket.setSslConfiguration(config); 

所以,是的,最好的办法可能是将其设置在每个插座对象的基础上,但是如果不是可用你的方法也可以。诺基亚页:QSslConfiguration

+0

不幸的是,这是每个插座,插座是* *的方式水平以下'QWebPage'访问。 – 2012-08-29 21:50:19