lib/fluent/plugin/elasticsearch_tls.rb
require 'openssl'
require 'fluent/configurable'
require 'fluent/config/error'
module Fluent::Plugin
module ElasticsearchTLS
SUPPORTED_TLS_VERSIONS = if defined?(OpenSSL::SSL::TLS1_3_VERSION)
[:TLSv1, :TLSv1_1, :TLSv1_2, :TLSv1_3].freeze
else
[:SSLv23, :TLSv1, :TLSv1_1, :TLSv1_2].freeze
end
DEFAULT_VERSION = :TLSv1_2
METHODS_MAP = begin
# When openssl supports OpenSSL::SSL::TLSXXX constants representations, we use them.
map = {
TLSv1: OpenSSL::SSL::TLS1_VERSION,
TLSv1_1: OpenSSL::SSL::TLS1_1_VERSION,
TLSv1_2: OpenSSL::SSL::TLS1_2_VERSION
}
map[:TLSv1_3] = OpenSSL::SSL::TLS1_3_VERSION if defined?(OpenSSL::SSL::TLS1_3_VERSION)
USE_TLS_MINMAX_VERSION = true
map.freeze
rescue NameError
map = {
SSLv23: :SSLv23,
TLSv1: :TLSv1,
TLSv1_1: :TLSv1_1,
TLSv1_2: :TLSv1_2,
}
USE_TLS_MINMAX_VERSION = false
end
private_constant :METHODS_MAP
module ElasticsearchTLSParams
include Fluent::Configurable
config_param :ssl_version, :enum, list: Fluent::Plugin::ElasticsearchTLS::SUPPORTED_TLS_VERSIONS, default: Fluent::Plugin::ElasticsearchTLS::DEFAULT_VERSION
config_param :ssl_min_version, :enum, list: Fluent::Plugin::ElasticsearchTLS::SUPPORTED_TLS_VERSIONS, default: nil
config_param :ssl_max_version, :enum, list: Fluent::Plugin::ElasticsearchTLS::SUPPORTED_TLS_VERSIONS, default: nil
end
def self.included(mod)
mod.include ElasticsearchTLSParams
end
def set_tls_minmax_version_config(ssl_version, ssl_max_version, ssl_min_version)
if USE_TLS_MINMAX_VERSION
case
when ssl_min_version.nil? && ssl_max_version.nil?
ssl_min_version = METHODS_MAP[:TLSv1_2]
ssl_max_version = METHODS_MAP[:TLSv1_3]
when ssl_min_version && ssl_max_version.nil?
raise Fluent::ConfigError, "When you set 'ssl_min_version', must set 'ssl_max_version' together."
when ssl_min_version.nil? && ssl_max_version
raise Fluent::ConfigError, "When you set 'ssl_max_version', must set 'ssl_min_version' together."
else
ssl_min_version = METHODS_MAP[ssl_min_version]
ssl_max_version = METHODS_MAP[ssl_max_version]
end
{max_version: ssl_max_version, min_version: ssl_min_version}
else
log.warn "'ssl_min_version' does not have any effect in this environment. Use 'ssl_version' instead." unless ssl_min_version.nil?
log.warn "'ssl_max_version' does not have any effect in this environment. Use 'ssl_version' instead." unless ssl_max_version.nil?
{version: ssl_version}
end
end
end
end