一.添加openssl庫
configure相關命令:
-no-openssl ........ Do not compile support for OpenSSL.
-openssl ........... Enable run-time OpenSSL support.
-openssl-linked .... Enabled linked OpenSSL support.
這里采用動態編譯
./configure -openssl
如果采用靜態編譯
OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked
二.QWebView添加ssl處理
1.添加網絡管理;
1 this->page()->setNetworkAccessManager(networkAccessManager);
2.繼承QNetworkAccessManager,重寫sslErrors()函數;
代碼參考arora瀏覽器:
1 void myQNetworkAccessManager::sslErrors(QNetworkReply *reply, const QList<QSslError> &error) 2 { 3 QSettings settings; 4 QList<QSslCertificate> ca_merge = QSslCertificate::fromData(settings.value(QLatin1String("CaCertificates")).toByteArray()); 5 6 QList<QSslCertificate> ca_new; 7 QStringList errorStrings; 8 for (int i = 0; i < error.count(); ++i) { 9 if (ca_merge.contains(error.at(i).certificate())) 10 continue; 11 errorStrings += error.at(i).errorString(); 12 if (!error.at(i).certificate().isNull()) { 13 ca_new.append(error.at(i).certificate()); 14 } 15 } 16 if (errorStrings.isEmpty()) { 17 reply->ignoreSslErrors(); 18 return; 19 } 20 21 QString errors = errorStrings.join(QLatin1String("</li><li>")); 22 if (true) { 23 if (ca_new.count() > 0) { 24 QStringList certinfos; 25 if (true) { 26 ca_merge += ca_new; 27 28 QSslConfiguration sslCfg = QSslConfiguration::defaultConfiguration(); 29 QList<QSslCertificate> ca_list = sslCfg.caCertificates(); 30 ca_list += ca_new; 31 sslCfg.setCaCertificates(ca_list); 32 sslCfg.setProtocol(QSsl::AnyProtocol); 33 QSslConfiguration::setDefaultConfiguration(sslCfg); 34 reply->setSslConfiguration(sslCfg); 35 36 QByteArray pems; 37 for (int i = 0; i < ca_merge.count(); ++i) 38 pems += ca_merge.at(i).toPem() + '\n'; 39 settings.setValue(QLatin1String("CaCertificates"), pems); 40 } 41 } 42 reply->ignoreSslErrors(); 43 } 44 }
3.sslErrors()中可以用QNetworkReply::ignoreSslErrors()忽略掉所有錯誤,但是這樣不安全;
還可以選擇為網頁注冊一個新的SSL認證(通過QSslConfiguration::setCaCertificates())。
參考資料:
1.http://www.qtcentre.org/threads/14398-Use-of-QWebView-to-browse-quot-https-quot-secure-sites
2.http://code.google.com/p/arora/