Skip to content

Commit 92cc801

Browse files
committed
Bug 1904380 - Forwarding logs to Kafka using Chained certificates fails with error "state=error: certificate verify failed (unable to get local issuer certificate)
1 parent 92ebcb7 commit 92cc801

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

fluentd/vendored_gem_src/fluent-plugin-kafka/lib/fluent/plugin/kafka_plugin_util.rb

+7
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ def read_ssl_file(path)
4242
end
4343
end
4444

45+
END_CERTIFICATE = "\n-----END CERTIFICATE-----\n"
46+
47+
def read_ssl_ca_certs
48+
return nil if @ssl_ca_cert.nil?
49+
@ssl_ca_cert.flat_map { |fp| File.read(fp).split(END_CERTIFICATE).map {|c| c += END_CERTIFICATE} }
50+
end
51+
4552
def pickup_ssl_endpoint(node)
4653
ssl_endpoint = node['endpoints'].find {|e| e.start_with?('SSL')}
4754
raise 'no SSL endpoint found on Zookeeper' unless ssl_endpoint

fluentd/vendored_gem_src/fluent-plugin-kafka/lib/fluent/plugin/out_kafka2.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -95,17 +95,17 @@ def refresh_client(raise_error = true)
9595
begin
9696
logger = @get_kafka_client_log ? log : nil
9797
if @scram_mechanism != nil && @username != nil && @password != nil
98-
@kafka = Kafka.new(seed_brokers: @seed_brokers, client_id: @client_id, logger: logger, connect_timeout: @connect_timeout, socket_timeout: @socket_timeout, ssl_ca_cert: read_ssl_file(@ssl_ca_cert),
98+
@kafka = Kafka.new(seed_brokers: @seed_brokers, client_id: @client_id, logger: logger, connect_timeout: @connect_timeout, socket_timeout: @socket_timeout, ssl_ca_cert: read_ssl_ca_certs(),
9999
ssl_client_cert: read_ssl_file(@ssl_client_cert), ssl_client_cert_key: read_ssl_file(@ssl_client_cert_key), ssl_client_cert_chain: read_ssl_file(@ssl_client_cert_chain),
100100
ssl_ca_certs_from_system: @ssl_ca_certs_from_system, sasl_scram_username: @username, sasl_scram_password: @password,
101101
sasl_scram_mechanism: @scram_mechanism, sasl_over_ssl: @sasl_over_ssl, ssl_verify_hostname: @ssl_verify_hostname)
102102
elsif @username != nil && @password != nil
103-
@kafka = Kafka.new(seed_brokers: @seed_brokers, client_id: @client_id, logger: logger, connect_timeout: @connect_timeout, socket_timeout: @socket_timeout, ssl_ca_cert: read_ssl_file(@ssl_ca_cert),
103+
@kafka = Kafka.new(seed_brokers: @seed_brokers, client_id: @client_id, logger: logger, connect_timeout: @connect_timeout, socket_timeout: @socket_timeout, ssl_ca_cert: read_ssl_ca_certs(),
104104
ssl_client_cert: read_ssl_file(@ssl_client_cert), ssl_client_cert_key: read_ssl_file(@ssl_client_cert_key), ssl_client_cert_chain: read_ssl_file(@ssl_client_cert_chain),
105105
ssl_ca_certs_from_system: @ssl_ca_certs_from_system, sasl_plain_username: @username, sasl_plain_password: @password, sasl_over_ssl: @sasl_over_ssl,
106106
ssl_verify_hostname: @ssl_verify_hostname)
107107
else
108-
@kafka = Kafka.new(seed_brokers: @seed_brokers, client_id: @client_id, logger: logger, connect_timeout: @connect_timeout, socket_timeout: @socket_timeout, ssl_ca_cert: read_ssl_file(@ssl_ca_cert),
108+
@kafka = Kafka.new(seed_brokers: @seed_brokers, client_id: @client_id, logger: logger, connect_timeout: @connect_timeout, socket_timeout: @socket_timeout, ssl_ca_cert: read_ssl_ca_certs(),
109109
ssl_client_cert: read_ssl_file(@ssl_client_cert), ssl_client_cert_key: read_ssl_file(@ssl_client_cert_key), ssl_client_cert_chain: read_ssl_file(@ssl_client_cert_chain),
110110
ssl_ca_certs_from_system: @ssl_ca_certs_from_system, sasl_gssapi_principal: @principal, sasl_gssapi_keytab: @keytab, sasl_over_ssl: @sasl_over_ssl,
111111
ssl_verify_hostname: @ssl_verify_hostname)

0 commit comments

Comments
 (0)