SSLManager::SSLManager(QWidget* parent) : QDialog(parent) , ui(new Ui::SSLManager) { setAttribute(Qt::WA_DeleteOnClose); ui->setupUi(this); refreshLocalList(); refreshCAList(); refreshPaths(); connect(ui->caList, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(showCaCertInfo())); connect(ui->caInfoButton, SIGNAL(clicked()), this, SLOT(showCaCertInfo())); connect(ui->deleteButton, SIGNAL(clicked()), this, SLOT(deleteCertificate())); connect(ui->localList, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(showLocalCertInfo())); connect(ui->localInfoButton, SIGNAL(clicked()), this, SLOT(showLocalCertInfo())); connect(ui->addLocalCert, SIGNAL(clicked()), this, SLOT(addLocalCertificate())); connect(ui->addPath, SIGNAL(clicked()), this, SLOT(addPath())); connect(ui->deletePath, SIGNAL(clicked()), this, SLOT(deletePath())); connect(ui->ignoreAll, SIGNAL(clicked(bool)), this, SLOT(ignoreAll(bool))); connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(close())); ui->ignoreAll->setChecked(mApp->networkManager()->isIgnoringAllWarnings()); }
void NetworkManager::sslError(QNetworkReply* reply, QList<QSslError> errors) { if (m_ignoreAllWarnings) { reply->ignoreSslErrors(errors); return; } if (reply->property("downReply").toBool()) { return; } int errorsIgnored = 0; foreach(const QSslError & error, errors) { if (m_ignoredCerts.contains(error.certificate())) { ++errorsIgnored; } } if (errorsIgnored == errors.count()) { return; } QNetworkRequest request = reply->request(); QVariant v = request.attribute((QNetworkRequest::Attribute)(QNetworkRequest::User + 100)); WebPage* webPage = static_cast<WebPage*>(v.value<void*>()); if (!webPage) { return; } QString title = tr("SSL Certificate Error!"); QString text1 = tr("The page you are trying to access has the following errors in the SSL certificate:"); QString certs; foreach(const QSslError & error, errors) { if (m_localCerts.contains(error.certificate())) { continue; } if (error.error() == QSslError::NoError) { //Weird behavior on Windows continue; } QSslCertificate cert = error.certificate(); certs.append("<ul><li>"); certs.append(tr("<b>Organization: </b>") + CertificateInfoWidget::clearCertSpecialSymbols(cert.subjectInfo(QSslCertificate::Organization))); certs.append("</li><li>"); certs.append(tr("<b>Domain Name: </b>") + CertificateInfoWidget::clearCertSpecialSymbols(cert.subjectInfo(QSslCertificate::CommonName))); certs.append("</li><li>"); certs.append(tr("<b>Expiration Date: </b>") + cert.expiryDate().toString("hh:mm:ss dddd d. MMMM yyyy")); certs.append("</li><li>"); certs.append(tr("<b>Error: </b>") + error.errorString()); certs.append("</li></ul>"); } QString text2 = tr("Would you like to make an exception for this certificate?"); QString message = QString("<b>%1</b><p>%2</p>%3<p>%4</p>").arg(title, text1, certs, text2); if (!certs.isEmpty()) { if (QMessageBox::critical(webPage->view(), tr("SSL Certificate Error!"), message, QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::No) { return; } foreach(const QSslError & error, errors) { if (!m_localCerts.contains(error.certificate())) { addLocalCertificate(error.certificate()); } } } reply->ignoreSslErrors(errors); }