From 5300c7de4d6babe5e4bc283079946c89e969f91c Mon Sep 17 00:00:00 2001 From: cspenceiv Date: Tue, 6 Oct 2015 13:59:41 -0700 Subject: [PATCH] Add chained certificate support This update does not make any changes to input. It merely parses and properly loads chained certificates from the file pointed to by ssl_certificate. --- lib/lumberjack/server.rb | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/lib/lumberjack/server.rb b/lib/lumberjack/server.rb index dba0d7b..88c0360 100644 --- a/lib/lumberjack/server.rb +++ b/lib/lumberjack/server.rb @@ -50,9 +50,31 @@ def initialize(options={}) if @options[:ssl] # load SSL certificate - @ssl = OpenSSL::SSL::SSLContext.new - @ssl.cert = OpenSSL::X509::Certificate.new(File.read(@options[:ssl_certificate])) - @ssl.key = OpenSSL::PKey::RSA.new(File.read(@options[:ssl_key]), + ssl = OpenSSL::SSL::SSLContext.new + raw_cert = File.read(@options[:ssl_certificate]) + ssl.cert = OpenSSL::X509::Certificate.new(raw_cert) + + # Parse chain certificates from @ssl_cert + certPosition = [0] + while certPosition[-1] + certPosition.push(raw_cert.index("-----B", certPosition[-1] + 1)) + end + + # Gather chain from certificate + if certPosition.length > 2 + ssl.extra_chain_cert = Array.new + for i in 1..(certPosition.length - 2) + if certPosition[i+1] + certEnd = certPosition[i+1] - 1 + else + certEnd = raw_cert.length - 1 + end + certLink = OpenSSL::X509::Certificate.new(raw_cert[certPosition[i]..certEnd]) + ssl.extra_chain_cert.push(certLink) + end + end + + ssl.key = OpenSSL::PKey::RSA.new(File.read(@options[:ssl_key]), @options[:ssl_key_passphrase]) end end # def initialize