QSslCertificate: migrate to QRegularExpression
This is part of the migration of qtbase from QRexExp to QRegularExpression. If support for regular expression is disabled, fixed string can still be used. [ChangeLog][QtCore][QSslCertificate] Add overload of fromPath that does not make use of QRegExp and deprecate the QRegExp variant. Task-number: QTBUG-72587 Change-Id: I507d8941cc7d70166da0948375dc421fe5e7d967 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>bb10
parent
73d1476fb1
commit
49f143e19c
|
|
@ -55,3 +55,11 @@ for (const QSslCertificate &cert : certs) {
|
|||
qDebug() << cert.issuerInfo(QSslCertificate::Organization);
|
||||
}
|
||||
//! [0]
|
||||
|
||||
//! [1]
|
||||
const auto certs = QSslCertificate::fromPath("C:/ssl/certificate.*.pem",
|
||||
QSsl::Pem, QSslCertificate::Wildcard);
|
||||
for (const QSslCertificate &cert : certs) {
|
||||
qDebug() << cert.issuerInfo(QSslCertificate::Organization);
|
||||
}
|
||||
//! [1]
|
||||
|
|
|
|||
|
|
@ -124,7 +124,9 @@
|
|||
#if QT_CONFIG(schannel)
|
||||
#include "qsslsocket_schannel_p.h"
|
||||
#endif
|
||||
|
||||
#if QT_CONFIG(regularexpression)
|
||||
#include "qregularexpression.h"
|
||||
#endif
|
||||
#include "qssl_p.h"
|
||||
#include "qsslcertificate.h"
|
||||
#include "qsslcertificate_p.h"
|
||||
|
|
@ -462,7 +464,10 @@ QByteArray QSslCertificate::digest(QCryptographicHash::Algorithm algorithm) cons
|
|||
\since 5.0
|
||||
*/
|
||||
|
||||
#if QT_DEPRECATED_SINCE(5,15)
|
||||
/*!
|
||||
\obsolete
|
||||
|
||||
Searches all files in the \a path for certificates encoded in the
|
||||
specified \a format and returns them in a list. \a path must be a file
|
||||
or a pattern matching one or more files, as specified by \a syntax.
|
||||
|
|
@ -537,6 +542,106 @@ QList<QSslCertificate> QSslCertificate::fromPath(const QString &path,
|
|||
}
|
||||
return certs;
|
||||
}
|
||||
#endif // QT_DEPRECATED_SINCE(5,15)
|
||||
|
||||
/*!
|
||||
\since 5.15
|
||||
|
||||
Searches all files in the \a path for certificates encoded in the
|
||||
specified \a format and returns them in a list. \a path must be a file
|
||||
or a pattern matching one or more files, as specified by \a syntax.
|
||||
|
||||
Example:
|
||||
|
||||
\snippet code/src_network_ssl_qsslcertificate.cpp 1
|
||||
|
||||
\sa fromData()
|
||||
*/
|
||||
QList<QSslCertificate> QSslCertificate::fromPath(const QString &path,
|
||||
QSsl::EncodingFormat format,
|
||||
PatternSyntax syntax)
|
||||
{
|
||||
// $, (,), *, +, ., ?, [, ,], ^, {, | and }.
|
||||
|
||||
// make sure to use the same path separators on Windows and Unix like systems.
|
||||
QString sourcePath = QDir::fromNativeSeparators(path);
|
||||
|
||||
// Find the path without the filename
|
||||
QString pathPrefix = sourcePath.left(sourcePath.lastIndexOf(QLatin1Char('/')));
|
||||
|
||||
// Check if the path contains any special chars
|
||||
int pos = -1;
|
||||
|
||||
#if QT_CONFIG(regularexpression)
|
||||
if (syntax == Wildcard)
|
||||
pos = pathPrefix.indexOf(QRegularExpression(QLatin1String("[*?[]")));
|
||||
else if (syntax == RegExp)
|
||||
pos = sourcePath.indexOf(QRegularExpression(QLatin1String("[\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\}\\|]")));
|
||||
#else
|
||||
if (syntax == Wildcard || syntax == RegExp)
|
||||
qWarning("Regular expression support is disabled in this build. Only fixed string can be searched");
|
||||
return QList<QSslCertificate>();
|
||||
#endif
|
||||
|
||||
if (pos != -1) {
|
||||
// there was a special char in the path so cut of the part containing that char.
|
||||
pathPrefix = pathPrefix.left(pos);
|
||||
const int lastIndexOfSlash = pathPrefix.lastIndexOf(QLatin1Char('/'));
|
||||
if (lastIndexOfSlash != -1)
|
||||
pathPrefix = pathPrefix.left(lastIndexOfSlash);
|
||||
else
|
||||
pathPrefix.clear();
|
||||
} else {
|
||||
// Check if the path is a file.
|
||||
if (QFileInfo(sourcePath).isFile()) {
|
||||
QFile file(sourcePath);
|
||||
QIODevice::OpenMode openMode = QIODevice::ReadOnly;
|
||||
if (format == QSsl::Pem)
|
||||
openMode |= QIODevice::Text;
|
||||
if (file.open(openMode))
|
||||
return QSslCertificate::fromData(file.readAll(), format);
|
||||
return QList<QSslCertificate>();
|
||||
}
|
||||
}
|
||||
|
||||
// Special case - if the prefix ends up being nothing, use "." instead.
|
||||
int startIndex = 0;
|
||||
if (pathPrefix.isEmpty()) {
|
||||
pathPrefix = QLatin1String(".");
|
||||
startIndex = 2;
|
||||
}
|
||||
|
||||
// The path can be a file or directory.
|
||||
QList<QSslCertificate> certs;
|
||||
|
||||
#if QT_CONFIG(regularexpression)
|
||||
if (syntax == Wildcard)
|
||||
sourcePath = QRegularExpression::wildcardToRegularExpression(sourcePath);
|
||||
|
||||
QRegularExpression pattern(QRegularExpression::anchoredPattern(sourcePath));
|
||||
#endif
|
||||
|
||||
QDirIterator it(pathPrefix, QDir::Files, QDirIterator::FollowSymlinks | QDirIterator::Subdirectories);
|
||||
while (it.hasNext()) {
|
||||
QString filePath = startIndex == 0 ? it.next() : it.next().mid(startIndex);
|
||||
|
||||
#if QT_CONFIG(regularexpression)
|
||||
if (!pattern.match(filePath).hasMatch())
|
||||
continue;
|
||||
#else
|
||||
if (sourcePath != filePath)
|
||||
continue;
|
||||
#endif
|
||||
|
||||
QFile file(filePath);
|
||||
QIODevice::OpenMode openMode = QIODevice::ReadOnly;
|
||||
if (format == QSsl::Pem)
|
||||
openMode |= QIODevice::Text;
|
||||
if (file.open(openMode))
|
||||
certs += QSslCertificate::fromData(file.readAll(), format);
|
||||
}
|
||||
return certs;
|
||||
}
|
||||
|
||||
/*!
|
||||
Searches for and parses all certificates in \a device that are
|
||||
|
|
|
|||
|
|
@ -84,6 +84,13 @@ public:
|
|||
EmailAddress
|
||||
};
|
||||
|
||||
enum PatternSyntax {
|
||||
RegExp,
|
||||
Wildcard,
|
||||
FixedString
|
||||
};
|
||||
|
||||
|
||||
explicit QSslCertificate(QIODevice *device, QSsl::EncodingFormat format = QSsl::Pem);
|
||||
explicit QSslCertificate(const QByteArray &data = QByteArray(), QSsl::EncodingFormat format = QSsl::Pem);
|
||||
QSslCertificate(const QSslCertificate &other);
|
||||
|
|
@ -139,9 +146,20 @@ public:
|
|||
QByteArray toDer() const;
|
||||
QString toText() const;
|
||||
|
||||
static QList<QSslCertificate> fromPath(
|
||||
#if QT_DEPRECATED_SINCE(5,15)
|
||||
QT_DEPRECATED_X("Use the overload not using QRegExp") static QList<QSslCertificate> fromPath(
|
||||
const QString &path, QSsl::EncodingFormat format = QSsl::Pem,
|
||||
QRegExp::PatternSyntax syntax = QRegExp::FixedString);
|
||||
|
||||
static QList<QSslCertificate> fromPath(
|
||||
const QString &path, QSsl::EncodingFormat format,
|
||||
PatternSyntax syntax);
|
||||
#else
|
||||
static QList<QSslCertificate> fromPath(
|
||||
const QString &path, QSsl::EncodingFormat format = QSsl::Pem,
|
||||
PatternSyntax syntax = FixedString);
|
||||
#endif
|
||||
|
||||
static QList<QSslCertificate> fromDevice(
|
||||
QIODevice *device, QSsl::EncodingFormat format = QSsl::Pem);
|
||||
static QList<QSslCertificate> fromData(
|
||||
|
|
|
|||
|
|
@ -86,6 +86,8 @@ private slots:
|
|||
void fromDevice();
|
||||
void fromPath_data();
|
||||
void fromPath();
|
||||
void fromPath_qregularexpression_data();
|
||||
void fromPath_qregularexpression();
|
||||
void certInfo();
|
||||
void certInfoQByteArray();
|
||||
void task256066toPem();
|
||||
|
|
@ -434,7 +436,7 @@ void tst_QSslCertificate::subjectAlternativeNames()
|
|||
void tst_QSslCertificate::utf8SubjectNames()
|
||||
{
|
||||
QSslCertificate cert = QSslCertificate::fromPath(testDataDir + "certificates/cert-ss-san-utf8.pem", QSsl::Pem,
|
||||
QRegExp::FixedString).first();
|
||||
QSslCertificate::FixedString).first();
|
||||
QVERIFY(!cert.isNull());
|
||||
|
||||
// O is "Heavy Metal Records" with heavy use of "decorations" like accents, umlauts etc.,
|
||||
|
|
@ -625,6 +627,88 @@ void tst_QSslCertificate::fromPath()
|
|||
numCerts);
|
||||
}
|
||||
|
||||
void tst_QSslCertificate::fromPath_qregularexpression_data()
|
||||
{
|
||||
QTest::addColumn<QString>("path");
|
||||
QTest::addColumn<int>("syntax");
|
||||
QTest::addColumn<bool>("pemencoding");
|
||||
QTest::addColumn<int>("numCerts");
|
||||
|
||||
QTest::newRow("empty fixed pem") << QString() << int(QSslCertificate::FixedString) << true << 0;
|
||||
QTest::newRow("empty fixed der") << QString() << int(QSslCertificate::FixedString) << false << 0;
|
||||
QTest::newRow("empty regexp pem") << QString() << int(QSslCertificate::RegExp) << true << 0;
|
||||
QTest::newRow("empty regexp der") << QString() << int(QSslCertificate::RegExp) << false << 0;
|
||||
QTest::newRow("empty wildcard pem") << QString() << int(QSslCertificate::Wildcard) << true << 0;
|
||||
QTest::newRow("empty wildcard der") << QString() << int(QSslCertificate::Wildcard) << false << 0;
|
||||
QTest::newRow("\"certificates\" fixed pem") << (testDataDir + "certificates") << int(QSslCertificate::FixedString) << true << 0;
|
||||
QTest::newRow("\"certificates\" fixed der") << (testDataDir + "certificates") << int(QSslCertificate::FixedString) << false << 0;
|
||||
QTest::newRow("\"certificates\" regexp pem") << (testDataDir + "certificates") << int(QSslCertificate::RegExp) << true << 0;
|
||||
QTest::newRow("\"certificates\" regexp der") << (testDataDir + "certificates") << int(QSslCertificate::RegExp) << false << 0;
|
||||
QTest::newRow("\"certificates\" wildcard pem") << (testDataDir + "certificates") << int(QSslCertificate::Wildcard) << true << 0;
|
||||
QTest::newRow("\"certificates\" wildcard der") << (testDataDir + "certificates") << int(QSslCertificate::Wildcard) << false << 0;
|
||||
QTest::newRow("\"certificates/cert.pem\" fixed pem") << (testDataDir + "certificates/cert.pem") << int(QSslCertificate::FixedString) << true << 1;
|
||||
QTest::newRow("\"certificates/cert.pem\" fixed der") << (testDataDir + "certificates/cert.pem") << int(QSslCertificate::FixedString) << false << 0;
|
||||
QTest::newRow("\"certificates/cert.pem\" regexp pem") << (testDataDir + "certificates/cert.pem") << int(QSslCertificate::RegExp) << true << 1;
|
||||
QTest::newRow("\"certificates/cert.pem\" regexp der") << (testDataDir + "certificates/cert.pem") << int(QSslCertificate::RegExp) << false << 0;
|
||||
QTest::newRow("\"certificates/cert.pem\" wildcard pem") << (testDataDir + "certificates/cert.pem") << int(QSslCertificate::Wildcard) << true << 1;
|
||||
QTest::newRow("\"certificates/cert.pem\" wildcard der") << (testDataDir + "certificates/cert.pem") << int(QSslCertificate::Wildcard) << false << 0;
|
||||
QTest::newRow("\"certificates/*\" fixed pem") << (testDataDir + "certificates/*") << int(QSslCertificate::FixedString) << true << 0;
|
||||
QTest::newRow("\"certificates/*\" fixed der") << (testDataDir + "certificates/*") << int(QSslCertificate::FixedString) << false << 0;
|
||||
QTest::newRow("\"certificates/*\" regexp pem") << (testDataDir + "certificates/*") << int(QSslCertificate::RegExp) << true << 0;
|
||||
QTest::newRow("\"certificates/*\" regexp der") << (testDataDir + "certificates/*") << int(QSslCertificate::RegExp) << false << 0;
|
||||
QTest::newRow("\"certificates/*\" wildcard pem") << (testDataDir + "certificates/*") << int(QSslCertificate::Wildcard) << true << 7;
|
||||
QTest::newRow("\"certificates/ca*\" wildcard pem") << (testDataDir + "certificates/ca*") << int(QSslCertificate::Wildcard) << true << 1;
|
||||
QTest::newRow("\"certificates/cert*\" wildcard pem") << (testDataDir + "certificates/cert*") << int(QSslCertificate::Wildcard) << true << 4;
|
||||
QTest::newRow("\"certificates/cert-[sure]*\" wildcard pem") << (testDataDir + "certificates/cert-[sure]*") << int(QSslCertificate::Wildcard) << true << 3;
|
||||
QTest::newRow("\"certificates/cert-[not]*\" wildcard pem") << (testDataDir + "certificates/cert-[not]*") << int(QSslCertificate::Wildcard) << true << 0;
|
||||
QTest::newRow("\"certificates/*\" wildcard der") << (testDataDir + "certificates/*") << int(QSslCertificate::Wildcard) << false << 2;
|
||||
QTest::newRow("\"c*/c*.pem\" fixed pem") << (testDataDir + "c*/c*.pem") << int(QSslCertificate::FixedString) << true << 0;
|
||||
QTest::newRow("\"c*/c*.pem\" fixed der") << (testDataDir + "c*/c*.pem") << int(QSslCertificate::FixedString) << false << 0;
|
||||
QTest::newRow("\"c*/c*.pem\" regexp pem") << (testDataDir + "c*/c*.pem") << int(QSslCertificate::RegExp) << true << 0;
|
||||
QTest::newRow("\"c*/c*.pem\" regexp der") << (testDataDir + "c*/c*.pem") << int(QSslCertificate::RegExp) << false << 0;
|
||||
QTest::newRow("\"c*/c*.pem\" wildcard pem") << (testDataDir + "c*/c*.pem") << int(QSslCertificate::Wildcard) << true << 5;
|
||||
QTest::newRow("\"c*/c*.pem\" wildcard der") << (testDataDir + "c*/c*.pem") << int(QSslCertificate::Wildcard) << false << 0;
|
||||
QTest::newRow("\"d*/c*.pem\" fixed pem") << (testDataDir + "d*/c*.pem") << int(QSslCertificate::FixedString) << true << 0;
|
||||
QTest::newRow("\"d*/c*.pem\" fixed der") << (testDataDir + "d*/c*.pem") << int(QSslCertificate::FixedString) << false << 0;
|
||||
QTest::newRow("\"d*/c*.pem\" regexp pem") << (testDataDir + "d*/c*.pem") << int(QSslCertificate::RegExp) << true << 0;
|
||||
QTest::newRow("\"d*/c*.pem\" regexp der") << (testDataDir + "d*/c*.pem") << int(QSslCertificate::RegExp) << false << 0;
|
||||
QTest::newRow("\"d*/c*.pem\" wildcard pem") << (testDataDir + "d*/c*.pem") << int(QSslCertificate::Wildcard) << true << 0;
|
||||
QTest::newRow("\"d*/c*.pem\" wildcard der") << (testDataDir + "d*/c*.pem") << int(QSslCertificate::Wildcard) << false << 0;
|
||||
QTest::newRow("\"c.*/c.*.pem\" fixed pem") << (testDataDir + "c.*/c.*.pem") << int(QSslCertificate::FixedString) << true << 0;
|
||||
QTest::newRow("\"c.*/c.*.pem\" fixed der") << (testDataDir + "c.*/c.*.pem") << int(QSslCertificate::FixedString) << false << 0;
|
||||
QTest::newRow("\"c.*/c.*.pem\" regexp pem") << (testDataDir + "c.*/c.*.pem") << int(QSslCertificate::RegExp) << true << 5;
|
||||
QTest::newRow("\"c.*/c.*.pem\" regexp der") << (testDataDir + "c.*/c.*.pem") << int(QSslCertificate::RegExp) << false << 0;
|
||||
QTest::newRow("\"c.*/c.*.pem\" wildcard pem") << (testDataDir + "c.*/c.*.pem") << int(QSslCertificate::Wildcard) << true << 0;
|
||||
QTest::newRow("\"c.*/c.*.pem\" wildcard der") << (testDataDir + "c.*/c.*.pem") << int(QSslCertificate::Wildcard) << false << 0;
|
||||
QTest::newRow("\"d.*/c.*.pem\" fixed pem") << (testDataDir + "d.*/c.*.pem") << int(QSslCertificate::FixedString) << true << 0;
|
||||
QTest::newRow("\"d.*/c.*.pem\" fixed der") << (testDataDir + "d.*/c.*.pem") << int(QSslCertificate::FixedString) << false << 0;
|
||||
QTest::newRow("\"d.*/c.*.pem\" regexp pem") << (testDataDir + "d.*/c.*.pem") << int(QSslCertificate::RegExp) << true << 0;
|
||||
QTest::newRow("\"d.*/c.*.pem\" regexp der") << (testDataDir + "d.*/c.*.pem") << int(QSslCertificate::RegExp) << false << 0;
|
||||
QTest::newRow("\"d.*/c.*.pem\" wildcard pem") << (testDataDir + "d.*/c.*.pem") << int(QSslCertificate::Wildcard) << true << 0;
|
||||
QTest::newRow("\"d.*/c.*.pem\" wildcard der") << (testDataDir + "d.*/c.*.pem") << int(QSslCertificate::Wildcard) << false << 0;
|
||||
#ifdef Q_OS_LINUX
|
||||
QTest::newRow("absolute path wildcard pem") << (testDataDir + "certificates/*.pem") << int(QSslCertificate::Wildcard) << true << 7;
|
||||
#endif
|
||||
|
||||
QTest::newRow("trailing-whitespace") << (testDataDir + "more-certificates/trailing-whitespace.pem") << int(QSslCertificate::FixedString) << true << 1;
|
||||
QTest::newRow("no-ending-newline") << (testDataDir + "more-certificates/no-ending-newline.pem") << int(QSslCertificate::FixedString) << true << 1;
|
||||
QTest::newRow("malformed-just-begin") << (testDataDir + "more-certificates/malformed-just-begin.pem") << int(QSslCertificate::FixedString) << true << 0;
|
||||
QTest::newRow("malformed-just-begin-no-newline") << (testDataDir + "more-certificates/malformed-just-begin-no-newline.pem") << int(QSslCertificate::FixedString) << true << 0;
|
||||
}
|
||||
|
||||
void tst_QSslCertificate::fromPath_qregularexpression()
|
||||
{
|
||||
QFETCH(QString, path);
|
||||
QFETCH(int, syntax);
|
||||
QFETCH(bool, pemencoding);
|
||||
QFETCH(int, numCerts);
|
||||
|
||||
QCOMPARE(QSslCertificate::fromPath(path,
|
||||
pemencoding ? QSsl::Pem : QSsl::Der,
|
||||
QSslCertificate::PatternSyntax(syntax)).size(),
|
||||
numCerts);
|
||||
}
|
||||
|
||||
void tst_QSslCertificate::certInfo()
|
||||
{
|
||||
// MD5 Fingerprint=B6:CF:57:34:DA:A9:73:21:82:F7:CF:4D:3D:85:31:88
|
||||
|
|
@ -711,7 +795,7 @@ void tst_QSslCertificate::certInfo()
|
|||
"55:ba:e7:fb:95:5d:91";
|
||||
|
||||
QSslCertificate cert = QSslCertificate::fromPath(testDataDir + "certificates/cert.pem", QSsl::Pem,
|
||||
QRegExp::FixedString).first();
|
||||
QSslCertificate::FixedString).first();
|
||||
QVERIFY(!cert.isNull());
|
||||
|
||||
QCOMPARE(cert.issuerInfo(QSslCertificate::Organization)[0], QString("CryptSoft Pty Ltd"));
|
||||
|
|
@ -768,7 +852,7 @@ void tst_QSslCertificate::certInfo()
|
|||
void tst_QSslCertificate::certInfoQByteArray()
|
||||
{
|
||||
QSslCertificate cert = QSslCertificate::fromPath(testDataDir + "certificates/cert.pem", QSsl::Pem,
|
||||
QRegExp::FixedString).first();
|
||||
QSslCertificate::FixedString).first();
|
||||
QVERIFY(!cert.isNull());
|
||||
|
||||
// in this test, check the bytearray variants before the enum variants to see if
|
||||
|
|
@ -820,7 +904,7 @@ void tst_QSslCertificate::nulInCN()
|
|||
QSKIP("Generic QSslCertificatePrivate fails this test");
|
||||
#endif
|
||||
QList<QSslCertificate> certList =
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/badguy-nul-cn.crt");
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/badguy-nul-cn.crt", QSsl::Pem, QSslCertificate::FixedString);
|
||||
QCOMPARE(certList.size(), 1);
|
||||
|
||||
const QSslCertificate &cert = certList.at(0);
|
||||
|
|
@ -839,7 +923,7 @@ void tst_QSslCertificate::nulInSan()
|
|||
QSKIP("Generic QSslCertificatePrivate fails this test");
|
||||
#endif
|
||||
QList<QSslCertificate> certList =
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/badguy-nul-san.crt");
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/badguy-nul-san.crt", QSsl::Pem, QSslCertificate::FixedString);
|
||||
QCOMPARE(certList.size(), 1);
|
||||
|
||||
const QSslCertificate &cert = certList.at(0);
|
||||
|
|
@ -859,7 +943,7 @@ void tst_QSslCertificate::nulInSan()
|
|||
void tst_QSslCertificate::largeSerialNumber()
|
||||
{
|
||||
QList<QSslCertificate> certList =
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/cert-large-serial-number.pem");
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/cert-large-serial-number.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
|
||||
QCOMPARE(certList.size(), 1);
|
||||
|
||||
|
|
@ -871,7 +955,7 @@ void tst_QSslCertificate::largeSerialNumber()
|
|||
void tst_QSslCertificate::largeExpirationDate() // QTBUG-12489
|
||||
{
|
||||
QList<QSslCertificate> certList =
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/cert-large-expiration-date.pem");
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/cert-large-expiration-date.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
|
||||
QCOMPARE(certList.size(), 1);
|
||||
|
||||
|
|
@ -884,7 +968,7 @@ void tst_QSslCertificate::largeExpirationDate() // QTBUG-12489
|
|||
|
||||
void tst_QSslCertificate::blacklistedCertificates()
|
||||
{
|
||||
QList<QSslCertificate> blacklistedCerts = QSslCertificate::fromPath(testDataDir + "more-certificates/blacklisted*.pem", QSsl::Pem, QRegExp::Wildcard);
|
||||
QList<QSslCertificate> blacklistedCerts = QSslCertificate::fromPath(testDataDir + "more-certificates/blacklisted*.pem", QSsl::Pem, QSslCertificate::Wildcard);
|
||||
QVERIFY(blacklistedCerts.count() > 0);
|
||||
for (int a = 0; a < blacklistedCerts.count(); a++) {
|
||||
QVERIFY(blacklistedCerts.at(a).isBlacklisted());
|
||||
|
|
@ -893,15 +977,15 @@ void tst_QSslCertificate::blacklistedCertificates()
|
|||
|
||||
void tst_QSslCertificate::selfsignedCertificates()
|
||||
{
|
||||
QVERIFY(QSslCertificate::fromPath(testDataDir + "certificates/cert-ss.pem").first().isSelfSigned());
|
||||
QVERIFY(!QSslCertificate::fromPath(testDataDir + "certificates/cert.pem").first().isSelfSigned());
|
||||
QVERIFY(QSslCertificate::fromPath(testDataDir + "certificates/cert-ss.pem", QSsl::Pem, QSslCertificate::FixedString).first().isSelfSigned());
|
||||
QVERIFY(!QSslCertificate::fromPath(testDataDir + "certificates/cert.pem", QSsl::Pem, QSslCertificate::FixedString).first().isSelfSigned());
|
||||
QVERIFY(!QSslCertificate().isSelfSigned());
|
||||
}
|
||||
|
||||
void tst_QSslCertificate::toText()
|
||||
{
|
||||
QList<QSslCertificate> certList =
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/cert-large-expiration-date.pem");
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/cert-large-expiration-date.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
|
||||
QCOMPARE(certList.size(), 1);
|
||||
const QSslCertificate &cert = certList.at(0);
|
||||
|
|
@ -943,7 +1027,7 @@ void tst_QSslCertificate::toText()
|
|||
void tst_QSslCertificate::multipleCommonNames()
|
||||
{
|
||||
QList<QSslCertificate> certList =
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/test-cn-two-cns-cert.pem");
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/test-cn-two-cns-cert.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
QVERIFY(certList.count() > 0);
|
||||
|
||||
QStringList commonNames = certList[0].subjectInfo(QSslCertificate::CommonName);
|
||||
|
|
@ -954,14 +1038,14 @@ void tst_QSslCertificate::multipleCommonNames()
|
|||
void tst_QSslCertificate::subjectAndIssuerAttributes()
|
||||
{
|
||||
QList<QSslCertificate> certList =
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/test-cn-with-drink-cert.pem");
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/test-cn-with-drink-cert.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
QVERIFY(certList.count() > 0);
|
||||
|
||||
QList<QByteArray> attributes = certList[0].subjectInfoAttributes();
|
||||
QVERIFY(attributes.contains(QByteArray("favouriteDrink")));
|
||||
attributes.clear();
|
||||
|
||||
certList = QSslCertificate::fromPath(testDataDir + "more-certificates/natwest-banking.pem");
|
||||
certList = QSslCertificate::fromPath(testDataDir + "more-certificates/natwest-banking.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
QVERIFY(certList.count() > 0);
|
||||
|
||||
QByteArray shortName("1.3.6.1.4.1.311.60.2.1.3");
|
||||
|
|
@ -996,17 +1080,17 @@ void tst_QSslCertificate::verify()
|
|||
errors.clear();
|
||||
|
||||
// Verify a valid cert signed by a CA
|
||||
QList<QSslCertificate> caCerts = QSslCertificate::fromPath(testDataDir + "verify-certs/cacert.pem");
|
||||
QList<QSslCertificate> caCerts = QSslCertificate::fromPath(testDataDir + "verify-certs/cacert.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
QSslSocket::addDefaultCaCertificate(caCerts.first());
|
||||
|
||||
toVerify = QSslCertificate::fromPath(testDataDir + "verify-certs/test-ocsp-good-cert.pem");
|
||||
toVerify = QSslCertificate::fromPath(testDataDir + "verify-certs/test-ocsp-good-cert.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
|
||||
errors = QSslCertificate::verify(toVerify);
|
||||
VERIFY_VERBOSE(errors.count() == 0);
|
||||
errors.clear();
|
||||
|
||||
// Test a blacklisted certificate
|
||||
toVerify = QSslCertificate::fromPath(testDataDir + "verify-certs/test-addons-mozilla-org-cert.pem");
|
||||
toVerify = QSslCertificate::fromPath(testDataDir + "verify-certs/test-addons-mozilla-org-cert.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
errors = QSslCertificate::verify(toVerify);
|
||||
bool foundBlack = false;
|
||||
foreach (const QSslError &error, errors) {
|
||||
|
|
@ -1019,7 +1103,7 @@ void tst_QSslCertificate::verify()
|
|||
errors.clear();
|
||||
|
||||
// This one is expired and untrusted
|
||||
toVerify = QSslCertificate::fromPath(testDataDir + "more-certificates/cert-large-serial-number.pem");
|
||||
toVerify = QSslCertificate::fromPath(testDataDir + "more-certificates/cert-large-serial-number.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
errors = QSslCertificate::verify(toVerify);
|
||||
VERIFY_VERBOSE(errors.contains(QSslError(QSslError::SelfSignedCertificate, toVerify[0])));
|
||||
VERIFY_VERBOSE(errors.contains(QSslError(QSslError::CertificateExpired, toVerify[0])));
|
||||
|
|
@ -1027,15 +1111,15 @@ void tst_QSslCertificate::verify()
|
|||
toVerify.clear();
|
||||
|
||||
// This one is signed by a valid cert, but the signer is not a valid CA
|
||||
toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-intermediate-not-ca-cert.pem").first();
|
||||
toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-ocsp-good-cert.pem").first();
|
||||
toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-intermediate-not-ca-cert.pem", QSsl::Pem, QSslCertificate::FixedString).first();
|
||||
toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-ocsp-good-cert.pem", QSsl::Pem, QSslCertificate::FixedString).first();
|
||||
errors = QSslCertificate::verify(toVerify);
|
||||
VERIFY_VERBOSE(errors.contains(QSslError(QSslError::InvalidCaCertificate, toVerify[1])));
|
||||
toVerify.clear();
|
||||
|
||||
// This one is signed by a valid cert, and the signer is a valid CA
|
||||
toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-intermediate-is-ca-cert.pem").first();
|
||||
toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-intermediate-ca-cert.pem").first();
|
||||
toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-intermediate-is-ca-cert.pem", QSsl::Pem, QSslCertificate::FixedString).first();
|
||||
toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-intermediate-ca-cert.pem", QSsl::Pem, QSslCertificate::FixedString).first();
|
||||
errors = QSslCertificate::verify(toVerify);
|
||||
VERIFY_VERBOSE(errors.count() == 0);
|
||||
|
||||
|
|
@ -1065,7 +1149,7 @@ QString tst_QSslCertificate::toString(const QList<QSslError>& errors)
|
|||
void tst_QSslCertificate::extensions()
|
||||
{
|
||||
QList<QSslCertificate> certList =
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/natwest-banking.pem");
|
||||
QSslCertificate::fromPath(testDataDir + "more-certificates/natwest-banking.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
QVERIFY(certList.count() > 0);
|
||||
|
||||
QSslCertificate cert = certList[0];
|
||||
|
|
@ -1163,7 +1247,7 @@ void tst_QSslCertificate::extensions()
|
|||
void tst_QSslCertificate::extensionsCritical()
|
||||
{
|
||||
QList<QSslCertificate> certList =
|
||||
QSslCertificate::fromPath(testDataDir + "verify-certs/test-addons-mozilla-org-cert.pem");
|
||||
QSslCertificate::fromPath(testDataDir + "verify-certs/test-addons-mozilla-org-cert.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
QVERIFY(certList.count() > 0);
|
||||
|
||||
QSslCertificate cert = certList[0];
|
||||
|
|
@ -1284,12 +1368,12 @@ void tst_QSslCertificate::version_data()
|
|||
QTest::newRow("null certificate") << QSslCertificate() << QByteArray();
|
||||
|
||||
QList<QSslCertificate> certs;
|
||||
certs << QSslCertificate::fromPath(testDataDir + "verify-certs/test-ocsp-good-cert.pem");
|
||||
certs << QSslCertificate::fromPath(testDataDir + "verify-certs/test-ocsp-good-cert.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
|
||||
QTest::newRow("v3 certificate") << certs.first() << QByteArrayLiteral("3");
|
||||
|
||||
certs.clear();
|
||||
certs << QSslCertificate::fromPath(testDataDir + "certificates/cert.pem");
|
||||
certs << QSslCertificate::fromPath(testDataDir + "certificates/cert.pem", QSsl::Pem, QSslCertificate::FixedString);
|
||||
QTest::newRow("v1 certificate") << certs.first() << QByteArrayLiteral("1");
|
||||
}
|
||||
|
||||
|
|
@ -1326,7 +1410,7 @@ void tst_QSslCertificate::pkcs12()
|
|||
QVERIFY(ok);
|
||||
f.close();
|
||||
|
||||
QList<QSslCertificate> leafCert = QSslCertificate::fromPath(testDataDir + QLatin1String("pkcs12/leaf.crt"));
|
||||
QList<QSslCertificate> leafCert = QSslCertificate::fromPath(testDataDir + QLatin1String("pkcs12/leaf.crt"), QSsl::Pem, QSslCertificate::FixedString);
|
||||
QVERIFY(!leafCert.isEmpty());
|
||||
|
||||
QCOMPARE(cert, leafCert.first());
|
||||
|
|
@ -1341,7 +1425,7 @@ void tst_QSslCertificate::pkcs12()
|
|||
QVERIFY(!leafKey.isNull());
|
||||
QCOMPARE(key, leafKey);
|
||||
|
||||
QList<QSslCertificate> caCert = QSslCertificate::fromPath(testDataDir + QLatin1String("pkcs12/inter.crt"));
|
||||
QList<QSslCertificate> caCert = QSslCertificate::fromPath(testDataDir + QLatin1String("pkcs12/inter.crt"), QSsl::Pem, QSslCertificate::FixedString);
|
||||
QVERIFY(!caCert.isEmpty());
|
||||
|
||||
QVERIFY(!caCerts.isEmpty());
|
||||
|
|
|
|||
Loading…
Reference in New Issue