in libminifi/src/controllers/SSLContextService.cpp [512:595]
void SSLContextServiceImpl::verifyCertificateExpiration() {
auto verify = [&] (const std::filesystem::path& cert_file, const utils::tls::X509_unique_ptr& cert) {
if (auto end_date = utils::tls::getCertificateExpiration(cert)) {
std::string end_date_str = utils::timeutils::getTimeStr(*end_date);
if (end_date.value() < std::chrono::system_clock::now()) {
logger_->log_error("Certificate in '{}' expired at {}", cert_file, end_date_str);
} else if (auto diff = end_date.value() - std::chrono::system_clock::now(); diff < std::chrono::weeks{2}) {
logger_->log_warn("Certificate in '{}' will expire at {}", cert_file, end_date_str);
} else {
logger_->log_debug("Certificate in '{}' will expire at {}", cert_file, end_date_str);
}
} else {
logger_->log_error("Could not determine expiration date for certificate in '{}'", cert_file);
}
};
if (!IsNullOrEmpty(certificate_)) {
if (isFileTypeP12(certificate_)) {
auto error = utils::tls::processP12Certificate(certificate_, passphrase_, {
.cert_cb = [&](auto cert) -> std::error_code {
verify(certificate_, cert);
return {};
},
.chain_cert_cb = [&](auto cert) -> std::error_code {
verify(certificate_, cert);
return {};
},
.priv_key_cb = {}
});
if (error) {
logger_->log_error("{}", error.value());
}
} else {
auto error = utils::tls::processPEMCertificate(certificate_, passphrase_, {
.cert_cb = [&](auto cert) -> std::error_code {
verify(certificate_, cert);
return {};
},
.chain_cert_cb = [&](auto cert) -> std::error_code {
verify(certificate_, cert);
return {};
},
.priv_key_cb = {}
});
if (error) {
logger_->log_error("{}", error.value());
}
}
}
if (!IsNullOrEmpty(ca_certificate_)) {
auto error = utils::tls::processPEMCertificate(ca_certificate_, std::nullopt, {
.cert_cb = [&](auto cert) -> std::error_code {
verify(ca_certificate_, cert);
return {};
},
.chain_cert_cb = [&](auto cert) -> std::error_code {
verify(ca_certificate_, cert);
return {};
},
.priv_key_cb = {}
});
if (error) {
logger_->log_error("{}", error.message());
}
}
#ifdef WIN32
if (use_system_cert_store_ && IsNullOrEmpty(certificate_)) {
findClientCertificate([&] (auto cert, auto /*priv_key*/) -> bool {
auto cert_name = getCertName(cert);
verify(cert_name, cert);
return false; // keep on iterating, check all
});
}
if (use_system_cert_store_ && IsNullOrEmpty(ca_certificate_)) {
findServerCertificate([&] (auto cert) -> bool {
auto cert_name = getCertName(cert);
verify(cert_name, cert);
return false; // keep on iterating, check all
});
}
#endif
}