diff --git a/src/core/auth/qgsauthcertutils.cpp b/src/core/auth/qgsauthcertutils.cpp index 2b43d6ba592..c421aaa2487 100644 --- a/src/core/auth/qgsauthcertutils.cpp +++ b/src/core/auth/qgsauthcertutils.cpp @@ -125,8 +125,8 @@ QByteArray QgsAuthCertUtils::fileData( const QString &path ) QList QgsAuthCertUtils::certsFromFile( const QString &certspath ) { QList certs; - bool pem = certspath.endsWith( QLatin1String( ".pem" ), Qt::CaseInsensitive ); - certs = QSslCertificate::fromData( QgsAuthCertUtils::fileData( certspath ), pem ? QSsl::Pem : QSsl::Der ); + const QByteArray payload( QgsAuthCertUtils::fileData( certspath ) ); + certs = QSslCertificate::fromData( payload, sniffEncoding( payload ) ); if ( certs.isEmpty() ) { QgsDebugMsg( QString( "Parsed cert(s) EMPTY for path: %1" ).arg( certspath ) ); @@ -193,9 +193,7 @@ QSslKey QgsAuthCertUtils::keyFromFile( const QString &keypath, QByteArray keydata( QgsAuthCertUtils::fileData( keypath ) ); QSslKey clientkey; - QSsl::EncodingFormat keyEncoding( keydata.contains( QByteArrayLiteral( "-----BEGIN " ) ) ? - QSsl::Pem : - QSsl::Der ); + QSsl::EncodingFormat keyEncoding( sniffEncoding( keydata ) ); const std::vector algs { @@ -652,6 +650,13 @@ void QgsAuthCertUtils::appendDirSegment_( QStringList &dirname, } } +QSsl::EncodingFormat QgsAuthCertUtils::sniffEncoding( const QByteArray &payload ) +{ + return payload.contains( QByteArrayLiteral( "-----BEGIN " ) ) ? + QSsl::Pem : + QSsl::Der; +} + QString QgsAuthCertUtils::getCertDistinguishedName( const QSslCertificate &qcert, const QCA::Certificate &acert, bool issuer ) diff --git a/src/core/auth/qgsauthcertutils.h b/src/core/auth/qgsauthcertutils.h index 7690ccc96a1..0d0be1b3c6f 100644 --- a/src/core/auth/qgsauthcertutils.h +++ b/src/core/auth/qgsauthcertutils.h @@ -373,6 +373,8 @@ class CORE_EXPORT QgsAuthCertUtils private: static void appendDirSegment_( QStringList &dirname, const QString &segment, QString value ); + + static QSsl::EncodingFormat sniffEncoding( const QByteArray &payload ); }; #endif // QGSAUTHCERTUTILS_H