2

Qt で SSL を使用してきましたが、(デフォルトの「安全なプロトコル」ではなく) 特定のプロトコルを設定する必要があります。これはうまくいくようです:

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

QWebPageしかし、プロトコルをorQWebViewまたは何かに設定するのではなく、このようにグローバルな方法でプロトコルを設定するのは不快です。明らかな何かが欠けていますか、それともこれが本当に最善の方法ですか? SSL ソケットに設定できることはわかっていますが、QtWebKit を使用しており、個々のソケットにアクセスできません。

4

2 に答える 2

3

これを行うために私が見つけた方法は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.setProtocol(QSsl::TlsV1_0);
        notConstRequest.setSslConfiguration(conf);
        return QNetworkAccessManager::createRequest(operation, notConstRequest, outgoingData);
    }
};

QWebpage次に、使用して設定できsetNetworkAccessManagerます。

于 2012-08-29T21:49:42.407 に答える
2

これが役立つ場合があります。HttpsページはWindowsでは機能しますがLinuxでは機能しません。彼はプロトコルの設定と同じ方法(ページの下部近く)を使用します。

多くのリソースを見つけることができませんでしたが、NokiaのQtドキュメントには、QSslSocketオブジェクトにプロトコルを具体的に設定できると明示的に記載されています。関連ビット:

QSslConfigurationの設定を変更するだけでは、関連するSSL接続の設定を変更できないことに注意してください。これを実現するには、変更されたQSslConfigurationオブジェクトでsetSslConfigurationを呼び出す必要があります。次の例は、QSslSocketオブジェクトでプロトコルをTLSv1に変更する方法を示しています。

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

そうです、最善の方法はおそらくソケットオブジェクトごとに設定することですが、それが利用できない場合は、メソッドも機能します。Nokiaページ:QSslConfiguration

于 2012-08-28T16:04:30.070 に答える