mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-16 00:03:12 -04:00
[auth] Add certificate chain validation routine
This commit is contained in:
parent
e20e0764c9
commit
368b0df24e
@ -275,6 +275,15 @@ Get short strings describing an SSL error
|
||||
%End
|
||||
|
||||
|
||||
static QList<QSslError> validateCertChain( const QList<QSslCertificate> &certificateChain, const QString &hostName = QString(), bool addRootCa = false ) ;
|
||||
%Docstring
|
||||
validateCertChain validates the given ``certificateChain``
|
||||
\param certificateChain list of certificates to be checked, with leaf first and with optional root CA last
|
||||
\param addRootCa if true the CA will be added to the trusted CAs for this validation check
|
||||
:return: list of QSslError, if the list is empty then the cert chain is valid
|
||||
:rtype: list of QSslError
|
||||
%End
|
||||
|
||||
};
|
||||
|
||||
/************************************************************************
|
||||
|
@ -1018,3 +1018,25 @@ QList<QPair<QSslError::SslError, QString> > QgsAuthCertUtils::sslErrorEnumString
|
||||
QgsAuthCertUtils::sslErrorEnumString( QSslError::CertificateBlacklisted ) );
|
||||
return errenums;
|
||||
}
|
||||
|
||||
QList<QSslError> QgsAuthCertUtils::validateCertChain( const QList<QSslCertificate> &certificateChain, const QString &hostName, bool addRootCa )
|
||||
{
|
||||
QList<QSslError> results;
|
||||
// Merge in the root CA if present and asked for
|
||||
if ( addRootCa && certificateChain.count() > 1 && certificateChain.last().isSelfSigned() )
|
||||
{
|
||||
static QMutex sMutex;
|
||||
QMutexLocker lock( &sMutex );
|
||||
QSslConfiguration oldSslConfig( QSslConfiguration::defaultConfiguration() );
|
||||
QSslConfiguration sslConfig( oldSslConfig );
|
||||
sslConfig.setCaCertificates( casMerge( sslConfig.caCertificates(), QList<QSslCertificate>() << certificateChain.last() ) );
|
||||
QSslConfiguration::setDefaultConfiguration( sslConfig );
|
||||
results = QSslCertificate::verify( certificateChain, hostName );
|
||||
QSslConfiguration::setDefaultConfiguration( oldSslConfig );
|
||||
}
|
||||
else
|
||||
{
|
||||
results = QSslCertificate::verify( certificateChain, hostName );
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
@ -296,6 +296,14 @@ class CORE_EXPORT QgsAuthCertUtils
|
||||
*/
|
||||
static QList<QPair<QSslError::SslError, QString> > sslErrorEnumStrings() SIP_SKIP;
|
||||
|
||||
/**
|
||||
* \brief validateCertChain validates the given \a certificateChain
|
||||
* \param certificateChain list of certificates to be checked, with leaf first and with optional root CA last
|
||||
* \param addRootCa if true the CA will be added to the trusted CAs for this validation check
|
||||
* \return list of QSslError, if the list is empty then the cert chain is valid
|
||||
*/
|
||||
static QList<QSslError> validateCertChain( const QList<QSslCertificate> &certificateChain, const QString &hostName = QString(), bool addRootCa = false ) ;
|
||||
|
||||
private:
|
||||
static void appendDirSegment_( QStringList &dirname, const QString &segment, QString value );
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user