qt - 这是使用 QWebPage 设置 SSL 协议(protocol)的正确方法吗?

标签 qt ssl qtwebkit

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

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

但是以这样的全局方式设置协议(protocol)让我感到不舒服,而不是在QWebPageQWebView或其他东西上设置它。我是否遗漏了一些明显的东西,或者这真的是最好的方法吗?我知道我可以在 SSL 套接字上设置它,但我使用的是 QtWebKit,并且无权访问各个套接字。

最佳答案

我发现做到这一点的方法是扩展QNetworkAccessManager并在 createRequest 中设置协议(protocol):

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

然后我可以使用 setNetworkAccessManager 在我的 QWebpage 中设置它.

关于qt - 这是使用 QWebPage 设置 SSL 协议(protocol)的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11941630/

相关文章:

PHP - SSL 证书错误 : unable to get local issuer certificate

python - Pycharm 中的 PyQT 智能感知/签名?

qt - PyQt:keyPressEvent 和 keyReleaseEvent - 按住不反弹

c++ - 具有共享 OpenGL 上下文的 QOpenGLWidget?

youtube - 在QtWebKit PyqQ5中启用HTML5

c++ - 抑制 SSL 错误

django - 使用 pyqt webkit 将 Django 应用程序转换为桌面应用程序

c++ - 从 Mac 为 WIndows、Linux 交叉编译 C++/QT

ssl - HTTP 客户端错误 : asn1: structure error: base 128 integer too large

ssl - 多个 Parse 应用程序是否支持相同的通配符 SSL?