Repository: nifi-minifi-cpp Updated Branches: refs/heads/master 2efac2da5 -> 0c31102da
MINIFI-389 Added support for one-way TLS to SSLContextService This closes #132. Signed-off-by: Marc Parisi <phroc...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/commit/0c31102d Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/0c31102d Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/0c31102d Branch: refs/heads/master Commit: 0c31102da9227d32659e2ed861fd9eec36fd1467 Parents: 2efac2d Author: Andrew I. Christianson <a...@andyic.org> Authored: Fri Aug 25 16:24:12 2017 -0400 Committer: Marc Parisi <phroc...@apache.org> Committed: Wed Aug 30 11:04:49 2017 -0400 ---------------------------------------------------------------------- .../include/controllers/SSLContextService.h | 39 ++++++++++++-------- libminifi/src/controllers/SSLContextService.cpp | 37 +++++++++++-------- 2 files changed, 44 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/0c31102d/libminifi/include/controllers/SSLContextService.h ---------------------------------------------------------------------- diff --git a/libminifi/include/controllers/SSLContextService.h b/libminifi/include/controllers/SSLContextService.h index 9093d5f..c48d30f 100644 --- a/libminifi/include/controllers/SSLContextService.h +++ b/libminifi/include/controllers/SSLContextService.h @@ -100,27 +100,34 @@ class SSLContextService : public core::controller::ControllerService { } bool configure_ssl_context(SSL_CTX *ctx) { - if (SSL_CTX_use_certificate_file(ctx, certificate.c_str(), SSL_FILETYPE_PEM) <= 0) { - logger_->log_error("Could not create load certificate, error : %s", std::strerror(errno)); - return false; - } - if (!IsNullOrEmpty(passphrase_)) { - SSL_CTX_set_default_passwd_cb_userdata(ctx, &passphrase_); - SSL_CTX_set_default_passwd_cb(ctx, pemPassWordCb); + if (!IsNullOrEmpty(certificate)) { + if (SSL_CTX_use_certificate_file(ctx, certificate.c_str(), SSL_FILETYPE_PEM) <= 0) { + logger_->log_error("Could not create load certificate, error : %s", std::strerror(errno)); + return false; + } + if (!IsNullOrEmpty(passphrase_)) { + SSL_CTX_set_default_passwd_cb_userdata(ctx, &passphrase_); + SSL_CTX_set_default_passwd_cb(ctx, pemPassWordCb); + } } - int retp = SSL_CTX_use_PrivateKey_file(ctx, private_key_.c_str(), SSL_FILETYPE_PEM); - if (retp != 1) { - logger_->log_error("Could not create load private key,%i on %s error : %s", retp, private_key_, std::strerror(errno)); - return false; + if (!IsNullOrEmpty(private_key_)) { + int retp = SSL_CTX_use_PrivateKey_file(ctx, private_key_.c_str(), SSL_FILETYPE_PEM); + if (retp != 1) { + logger_->log_error("Could not create load private key,%i on %s error : %s", retp, private_key_, + std::strerror(errno)); + return false; + } + + if (!SSL_CTX_check_private_key(ctx)) { + logger_->log_error("Private key does not match the public certificate, error : %s", std::strerror(errno)); + return false; + } } - if (!SSL_CTX_check_private_key(ctx)) { - logger_->log_error("Private key does not match the public certificate, error : %s", std::strerror(errno)); - return false; - } + SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, nullptr); + int retp = SSL_CTX_load_verify_locations(ctx, ca_certificate_.c_str(), 0); - retp = SSL_CTX_load_verify_locations(ctx, ca_certificate_.c_str(), 0); if (retp == 0) { logger_->log_error("Can not load CA certificate, Exiting, error : %s", std::strerror(errno)); return false; http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/0c31102d/libminifi/src/controllers/SSLContextService.cpp ---------------------------------------------------------------------- diff --git a/libminifi/src/controllers/SSLContextService.cpp b/libminifi/src/controllers/SSLContextService.cpp index 73c9e35..95ccbb0 100644 --- a/libminifi/src/controllers/SSLContextService.cpp +++ b/libminifi/src/controllers/SSLContextService.cpp @@ -51,27 +51,32 @@ std::unique_ptr<SSLContext> SSLContextService::createSSLContext() { method = TLSv1_2_client_method(); SSL_CTX *ctx = SSL_CTX_new(method); - if (SSL_CTX_use_certificate_file(ctx, certificate.c_str(), SSL_FILETYPE_PEM) <= 0) { - logger_->log_error("Could not create load certificate, error : %s", std::strerror(errno)); - return nullptr; - } - if (!IsNullOrEmpty(passphrase_)) { - SSL_CTX_set_default_passwd_cb_userdata(ctx, &passphrase_); - SSL_CTX_set_default_passwd_cb(ctx, pemPassWordCb); + if (!IsNullOrEmpty(certificate)) { + if (SSL_CTX_use_certificate_file(ctx, certificate.c_str(), SSL_FILETYPE_PEM) <= 0) { + logger_->log_error("Could not create load certificate, error : %s", std::strerror(errno)); + return nullptr; + } + if (!IsNullOrEmpty(passphrase_)) { + SSL_CTX_set_default_passwd_cb_userdata(ctx, &passphrase_); + SSL_CTX_set_default_passwd_cb(ctx, pemPassWordCb); + } } - int retp = SSL_CTX_use_PrivateKey_file(ctx, private_key_.c_str(), SSL_FILETYPE_PEM); - if (retp != 1) { - logger_->log_error("Could not create load private key,%i on %s error : %s", retp, private_key_, std::strerror(errno)); - return nullptr; - } + if (!IsNullOrEmpty(private_key_)) { + int retp = SSL_CTX_use_PrivateKey_file(ctx, private_key_.c_str(), SSL_FILETYPE_PEM); + if (retp != 1) { + logger_->log_error("Could not create load private key,%i on %s error : %s", retp, private_key_, + std::strerror(errno)); + return nullptr; + } - if (!SSL_CTX_check_private_key(ctx)) { - logger_->log_error("Private key does not match the public certificate, error : %s", std::strerror(errno)); - return nullptr; + if (!SSL_CTX_check_private_key(ctx)) { + logger_->log_error("Private key does not match the public certificate, error : %s", std::strerror(errno)); + return nullptr; + } } - retp = SSL_CTX_load_verify_locations(ctx, ca_certificate_.c_str(), 0); + int retp = SSL_CTX_load_verify_locations(ctx, ca_certificate_.c_str(), 0); if (retp == 0) { logger_->log_error("Can not load CA certificate, Exiting, error : %s", std::strerror(errno)); }