logstash-input-elastic_serverless_forwarder 0.1.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +2 -0
  3. data/DEVELOPER.md +1 -0
  4. data/Gemfile +11 -0
  5. data/LICENSE +202 -0
  6. data/NOTICE.TXT +1 -0
  7. data/README.md +98 -0
  8. data/docs/index.asciidoc +307 -0
  9. data/lib/logstash/inputs/elastic_serverless_forwarder.rb +172 -0
  10. data/logstash-input-elastic_serverless_forwarder.gemspec +32 -0
  11. data/spec/fixtures/certs/generate.sh +58 -0
  12. data/spec/fixtures/certs/generated/README.txt +2 -0
  13. data/spec/fixtures/certs/generated/client_from_root.crt +35 -0
  14. data/spec/fixtures/certs/generated/client_from_root.jks +0 -0
  15. data/spec/fixtures/certs/generated/client_from_root.key +51 -0
  16. data/spec/fixtures/certs/generated/client_from_root.key.pkcs8 +52 -0
  17. data/spec/fixtures/certs/generated/client_from_root.p12 +0 -0
  18. data/spec/fixtures/certs/generated/client_no_matching_subject.crt +35 -0
  19. data/spec/fixtures/certs/generated/client_no_matching_subject.key +51 -0
  20. data/spec/fixtures/certs/generated/client_no_matching_subject.p12 +0 -0
  21. data/spec/fixtures/certs/generated/client_self_signed.crt +30 -0
  22. data/spec/fixtures/certs/generated/client_self_signed.key +52 -0
  23. data/spec/fixtures/certs/generated/client_self_signed.p12 +0 -0
  24. data/spec/fixtures/certs/generated/root.crt +32 -0
  25. data/spec/fixtures/certs/generated/root.key +51 -0
  26. data/spec/fixtures/certs/generated/server_from_root.crt +36 -0
  27. data/spec/fixtures/certs/generated/server_from_root.key +51 -0
  28. data/spec/fixtures/certs/generated/server_from_root.key.pkcs8 +52 -0
  29. data/spec/fixtures/certs/generated/server_from_root.pkcs8.key +52 -0
  30. data/spec/fixtures/certs/openssl.cnf +57 -0
  31. data/spec/inputs/elastic_serverless_forwarder_spec.rb +292 -0
  32. metadata +188 -0
@@ -0,0 +1,172 @@
1
+ # encoding: utf-8
2
+ require "logstash/inputs/base"
3
+ require "logstash/namespace"
4
+
5
+ require "logstash/plugin_mixins/plugin_factory_support"
6
+
7
+ require 'logstash/inputs/http'
8
+ require 'logstash/codecs/json_lines'
9
+
10
+ class LogStash::Inputs::ElasticServerlessForwarder < LogStash::Inputs::Base
11
+ include LogStash::PluginMixins::PluginFactorySupport
12
+
13
+ config_name "elastic_serverless_forwarder"
14
+
15
+ # no-codec
16
+ config :codec, obsolete: 'The elastic_serverless_forwarder input does not have an externally-configurable codec'
17
+
18
+ # bind address
19
+ config :host, :validate => :string, :default => "0.0.0.0"
20
+ config :port, :validate => :number, :required => true
21
+
22
+ # optional http basic auth
23
+ config :auth_basic_username, :validate => :string
24
+ config :auth_basic_password, :validate => :password
25
+
26
+ # ssl-config
27
+ config :ssl, :validate => :boolean, :default => true
28
+
29
+ # ssl-identity
30
+ config :ssl_certificate, :validate => :path
31
+ config :ssl_key, :validate => :path
32
+ config :ssl_key_passphrase, :validate => :password
33
+
34
+ # ssl-trust
35
+ config :ssl_certificate_authorities, :validate => :path, :list => true
36
+ config :ssl_client_authentication, :validate => %w(none optional required), :default => 'none'
37
+ config :ssl_verification_mode, :validate => %w(certificate), :default => 'certificate'
38
+
39
+ # ssl-expert-mode
40
+ config :ssl_cipher_suites, :validate => :string, :list => true
41
+ config :ssl_supported_protocols, :validate => :string, :list => true
42
+ config :ssl_handshake_timeout, :validate => :number, :default => 10_000
43
+
44
+ # we present the ES-like ssl_certificate_authorities, but our
45
+ # internal http input plugin uses ssl_verify_mode to describe
46
+ # the same behaviour.
47
+ SSL_CLIENT_AUTHENTICATION_TO_VERIFY_MODE_MAP = {
48
+ 'none' => 'none',
49
+ 'optional' => 'peer',
50
+ 'required' => 'force_peer',
51
+ }.each_value(&:freeze).freeze # deep freeze
52
+ private_constant :SSL_CLIENT_AUTHENTICATION_TO_VERIFY_MODE_MAP
53
+
54
+
55
+ def initialize(*a)
56
+ super
57
+ @internal_http = plugin_factory.input('http').new(inner_http_input_options)
58
+ end
59
+
60
+ def register
61
+ logger.debug("registering inner HTTP input plugin")
62
+ @internal_http.register
63
+ logger.debug("registered inner HTTP input plugin")
64
+ end # def register
65
+
66
+
67
+ def run(queue)
68
+ logger.debug("starting inner HTTP input plugin")
69
+ @internal_http.run(QueueWrapper.new(queue))
70
+ logger.debug('inner HTTP plugin has exited')
71
+ rescue => e
72
+ logger.error("inner HTTP plugin has had an unrecoverable exception: #{e.message} at #{e.backtrace.first}")
73
+ raise
74
+ end
75
+
76
+ def stop
77
+ logger.debug("stopping inner HTTP input plugin")
78
+ @internal_http.stop
79
+ logger.debug('inner HTTP plugin has been stopped')
80
+ end
81
+
82
+ def close
83
+ logger.debug("closing inner HTTP input plugin")
84
+ @internal_http.close
85
+ logger.debug('inner HTTP plugin has been closed')
86
+ end
87
+
88
+ private
89
+
90
+ def inner_http_input_options
91
+ @_inner_http_input_options ||= begin
92
+ http_options = {
93
+ # directly-configurable
94
+ 'host' => @host,
95
+ 'port' => @port,
96
+
97
+ # non-configurable codec
98
+ 'codec' => plugin_factory.codec('json_lines').new(inner_json_lines_codec_options),
99
+ 'additional_codecs' => {},
100
+
101
+ # enrichment avoidance
102
+ 'ecs_compatibility' => 'disabled',
103
+ 'remote_host_target_field' => '[@metadata][void]',
104
+ 'request_headers_target_field' => '[@metadata][void]',
105
+ }
106
+
107
+ if @auth_basic_username
108
+ http_options['user'] = @auth_basic_username
109
+ http_options['password'] = @auth_basic_password || fail(LogStash::ConfigurationError, '`auth_basic_password` is REQUIRED when `auth_basic_username` is provided')
110
+ logger.warn("HTTP Basic Auth over non-secured connection") if @ssl == false
111
+ end
112
+
113
+ if @ssl == false
114
+ ignored_ssl_settings = @original_params.keys.grep('ssl_')
115
+ logger.warn("Explicit SSL-related settings are ignored because `ssl => false`: #{ignored_ssl_settings.keys}") if ignored_ssl_settings.any?
116
+ else
117
+ http_options['ssl'] = true
118
+
119
+ http_options['ssl_cipher_suites'] = @ssl_cipher_suites if @original_params.include?('ssl_cipher_suites')
120
+ http_options['ssl_supported_protocols'] = @ssl_supported_protocols if @original_params.include?('ssl_supported_protocols')
121
+ http_options['ssl_handshake_timeout'] = @ssl_handshake_timeout
122
+
123
+ http_options.merge!(ssl_identity_options)
124
+ http_options.merge!(ssl_trust_options)
125
+ end
126
+
127
+ http_options
128
+ end
129
+ end
130
+
131
+ def ssl_identity_options
132
+ identity_options = {
133
+ 'ssl_certificate' => @ssl_certificate || fail(LogStash::ConfigurationError, '`ssl_certificate` is REQUIRED when `ssl => true`'),
134
+ 'ssl_key' => @ssl_key || fail(LogStash::ConfigurationError, '`ssl_key` is REQUIRED when `ssl => true`')
135
+ }
136
+ identity_options['ssl_key_passphrase'] = @ssl_key_passphrase if @original_params.include?('ssl_key_passphrase')
137
+
138
+ identity_options
139
+ end
140
+
141
+ def ssl_trust_options
142
+ trust_options = {
143
+ 'ssl_verify_mode' => SSL_CLIENT_AUTHENTICATION_TO_VERIFY_MODE_MAP.fetch(@ssl_client_authentication)
144
+ }
145
+ if @ssl_client_authentication == 'none'
146
+ logger.warn("Explicit `ssl_certificate_authorities` is ignored because `ssl_client_authentication => #{@ssl_client_authentication}`")
147
+ else
148
+ trust_options['ssl_certificate_authorities'] = @ssl_certificate_authorities || fail(LogStash::ConfigurationError, "`ssl_certificate_authorities` is REQUIRED when `ssl_client_authentication => #{@ssl_client_authentication}`")
149
+ end
150
+
151
+ trust_options
152
+ end
153
+
154
+ def inner_json_lines_codec_options
155
+ @_inner_json_lines_codec_options ||= {
156
+ # enrichment avoidance
157
+ 'ecs_compatibility' => 'disabled',
158
+ }
159
+ end
160
+
161
+ class QueueWrapper
162
+ def initialize(wrapped_queue)
163
+ @wrapped_queue = wrapped_queue
164
+ end
165
+
166
+ def << (event)
167
+ event.remove('[@metadata][void]')
168
+ @wrapped_queue << event
169
+ end
170
+ end
171
+
172
+ end # class LogStash::Inputs::ElasticServerlessForwarder
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'logstash-input-elastic_serverless_forwarder'
5
+ s.version = '0.1.0'
6
+ s.licenses = ['Apache License (2.0)']
7
+ s.summary = "Receives events from Elastic Serverless Forwarder over HTTP or HTTPS"
8
+ s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
9
+ s.authors = ["Elastic"]
10
+ s.email = 'info@elastic.co'
11
+ s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html"
12
+ s.require_paths = ["lib", "vendor/jar-dependencies"]
13
+
14
+ # Files
15
+ s.files = Dir["lib/**/*","spec/**/*","*.gemspec","*.md","CONTRIBUTORS","Gemfile","LICENSE","NOTICE.TXT", "VERSION", "docs/**/*"]
16
+ # Tests
17
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
18
+
19
+ # Special flag to let us know this is actually a logstash plugin
20
+ s.metadata = { "logstash_plugin" => "true", "logstash_group" => "input" }
21
+
22
+ # Gem dependencies
23
+ s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99"
24
+ s.add_runtime_dependency 'logstash-mixin-ecs_compatibility_support', '~>1.2'
25
+ s.add_runtime_dependency 'logstash-mixin-plugin_factory_support'
26
+ s.add_runtime_dependency 'logstash-input-http'
27
+ s.add_runtime_dependency 'logstash-codec-json_lines'
28
+
29
+ s.add_development_dependency 'logstash-devutils'
30
+
31
+ s.platform = "java"
32
+ end
@@ -0,0 +1,58 @@
1
+ # warning: do not use the certificates produced by this tool in production.
2
+ # This is for testing purposes only
3
+ set -e
4
+
5
+ rm -rf generated
6
+ mkdir generated
7
+ cd generated
8
+
9
+ echo "GENERATED CERTIFICATES FOR TESTING ONLY." >> ./README.txt
10
+ echo "DO NOT USE THESE CERTIFICATES IN PRODUCTION" >> ./README.txt
11
+
12
+ # certificate authority
13
+ openssl genrsa -out root.key 4096
14
+ openssl req -new -x509 -days 1826 -extensions ca -key root.key -out root.crt -subj "/C=LS/ST=NA/L=Http Input/O=Logstash/CN=root" -config ../openssl.cnf
15
+
16
+ # server certificate from root
17
+ openssl genrsa -out server_from_root.key 4096
18
+ openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in server_from_root.key -out server_from_root.pkcs8.key
19
+ openssl req -new -key server_from_root.key -out server_from_root.csr -subj "/C=LS/ST=NA/L=Http Input/O=Logstash/CN=server" -config ../openssl.cnf
20
+ openssl x509 -req -extensions server_cert -extfile ../openssl.cnf -days 1096 -in server_from_root.csr -CA root.crt -CAkey root.key -set_serial 03 -out server_from_root.crt -sha256
21
+
22
+ # client certificate from root
23
+ openssl genrsa -out client_from_root.key 4096
24
+ openssl req -new -key client_from_root.key -out client_from_root.csr -subj "/C=LS/ST=NA/L=Http Input/O=Logstash/CN=client" -config ../openssl.cnf
25
+ openssl x509 -req -extensions client_cert -extfile ../openssl.cnf -days 1096 -in client_from_root.csr -CA root.crt -CAkey root.key -set_serial 04 -out client_from_root.crt -sha256
26
+
27
+ # self-signed for testing
28
+ openssl req -newkey rsa:4096 -nodes -keyout client_self_signed.key -x509 -days 365 -out client_self_signed.crt -subj "/C=LS/ST=NA/L=Http Input/O=Logstash/CN=self"
29
+ #openssl genrsa -out client_self_signed.key 4096
30
+ #openssl req -new -x509 -days 1826 -extensions client_cert -key client_self_signed.key -out client_self_signed.crt -subj "/C=LS/ST=NA/L=Http Input/O=Logstash/CN=self" -config ../openssl.cnf
31
+
32
+ ## client with invalid subject
33
+ openssl genrsa -out client_no_matching_subject.key 4096
34
+ openssl req -new -key client_no_matching_subject.key -out client_no_matching_subject.csr -subj "/C=LS/ST=NA/L=Http Input/O=Logstash/CN=client_no_matching_subject" -config ../openssl.cnf
35
+ openssl x509 -req -extensions client_cert_no_matching_subject -extfile ../openssl.cnf -days 1096 -in client_no_matching_subject.csr -CA root.crt -CAkey root.key -set_serial 04 -out client_no_matching_subject.crt
36
+
37
+ # verify :allthethings
38
+ openssl verify -CAfile root.crt server_from_root.crt
39
+ openssl verify -CAfile root.crt client_from_root.crt
40
+ openssl verify -CAfile root.crt client_no_matching_subject.crt
41
+
42
+ ! openssl verify -CAfile root.crt client_self_signed.crt > /dev/null
43
+ openssl verify -CAfile client_self_signed.crt client_self_signed.crt
44
+
45
+ # create pkcs8 versions of all keys
46
+ openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in client_from_root.key -out client_from_root.key.pkcs8
47
+ openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in server_from_root.key -out server_from_root.key.pkcs8
48
+
49
+ # create pkcs12 keystores (pass:12345678)
50
+ openssl pkcs12 -export -in client_from_root.crt -inkey client_from_root.key -out client_from_root.p12 -name "client_from_root" -passout 'pass:12345678'
51
+ openssl pkcs12 -export -in client_self_signed.crt -inkey client_self_signed.key -out client_self_signed.p12 -name "client_from_root" -passout 'pass:12345678'
52
+ openssl pkcs12 -export -in client_no_matching_subject.crt -inkey client_no_matching_subject.key -out client_no_matching_subject.p12 -name "client_no_matching_subject" -passout 'pass:12345678'
53
+
54
+ # use java keytool to convert all pkcs12 keystores to jks-format keystores (pass:12345678)
55
+ keytool -importkeystore -srckeystore client_from_root.p12 -srcstoretype pkcs12 -srcstorepass 12345678 -destkeystore client_from_root.jks -deststorepass 12345678 -alias client_from_root
56
+
57
+ # cleanup csr, we don't need them
58
+ rm -rf *.csr
@@ -0,0 +1,2 @@
1
+ GENERATED CERTIFICATES FOR TESTING ONLY.
2
+ DO NOT USE THESE CERTIFICATES IN PRODUCTION
@@ -0,0 +1,35 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIGATCCA+mgAwIBAgIBBDANBgkqhkiG9w0BAQsFADBRMQswCQYDVQQGEwJMUzEL
3
+ MAkGA1UECAwCTkExEzARBgNVBAcMCkh0dHAgSW5wdXQxETAPBgNVBAoMCExvZ3N0
4
+ YXNoMQ0wCwYDVQQDDARyb290MB4XDTIyMTExODA2MTA0OFoXDTI1MTExODA2MTA0
5
+ OFowUzELMAkGA1UEBhMCTFMxCzAJBgNVBAgMAk5BMRMwEQYDVQQHDApIdHRwIElu
6
+ cHV0MREwDwYDVQQKDAhMb2dzdGFzaDEPMA0GA1UEAwwGY2xpZW50MIICIjANBgkq
7
+ hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA49LRvGg28z/chbygtYSEHILCOqkUgPom
8
+ M1K6Zity7oPHHfepVSJjIuvyAeT/c2wSay4VL4npZWQ2/AuNdtltGb58PviuYtB/
9
+ 1S2sX8WyC2rPcq3vVk85FA0c7xLsOPA+4Hp7hHLxgBfBkIkCNFBRXQOrMBiPrBM7
10
+ RKrCKo1b254O83Hdy+kiUr6GZGXIWDPK3C3tkksKCAv++fxMQgucB9ERX4cigVAQ
11
+ +ZIBZGLrWU7Jm/LbI4+TlbFZj/3dQDflRuAhX01Kb5dktnhxrlQd/UkDcpHCv38+
12
+ 2/haBov4wmu9/93eKWfc5tqMx8SnnNPjq+ms3rq8WVQtxBUrh60cKhdEKO9nYhrX
13
+ KssHPIPXiM5V2R8yVddFygmgkEEUkxYIg9VYHFGlMCOQC5OoyXIoi08xs8h+GJbM
14
+ MdODsRF8ZhIPeCA7Va34MlySZrvXEzPavNwk3fq7NVUV4Um1lLWQPVwZ9yR9ii3y
15
+ yDa+xibvUWegs/3y04iFL9hhp4EM3u5ucQOdyQEMurxvXx9WrBi8VhMmJUN7dDq4
16
+ emWe8BITVYG6+vVkX577dgm12FGjah4HCEqJuckudP/QGa1xmgJ+AjQ5Q7xzp0VA
17
+ 5/llWSlGjzCcVms0V21wyHKGPm0p1sJ+cmcqLBCCgdFl2dnevoLXVjp18Xt6Oas9
18
+ KI343tBSn7ECAwEAAaOB4TCB3jAJBgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIF
19
+ oDAzBglghkgBhvhCAQ0EJhYkT3BlblNTTCBHZW5lcmF0ZWQgQ2xpZW50IENlcnRp
20
+ ZmljYXRlMB0GA1UdDgQWBBSsU4ZmryDNkeQXZHZ2zvYu7Xp6tTAfBgNVHSMEGDAW
21
+ gBTA8vgd/nWOBOCTxL+z67d+Am9lqjAOBgNVHQ8BAf8EBAMCBeAwHQYDVR0lBBYw
22
+ FAYIKwYBBQUHAwIGCCsGAQUFBwMEMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAA
23
+ ATANBgkqhkiG9w0BAQsFAAOCAgEAKfEdNhRpBfZgjZm8cFVLHEL+ML8zMlCubS2v
24
+ v8JL/Fg3Tlj11iCYa5XmwwHdprpDyrIChZOwsZK+1xWHgy+vGI5W93RbhCxx7o4C
25
+ DzcFkeI13qgjtdDvbzttZIHGNWSN8qaXLlc+rJBYn8uOUyQ95wXYJM+j+hH3E34c
26
+ 60Iy8AcYPcBhtiDN94eHswKxiF1EgViHVlVraaTWTU7U0VCeFTHWebQb+Hdg9Fa8
27
+ SjK1Mqcnowd4owgXEjPgbyyf6UOgBe6wScwJjyDPmh7tvDKsSeD4XibRK+Hmwinx
28
+ gtxnZtlM4472EOOENNfd7JGui6H8XxHU9dUMMDTH4YY6cakpHpAopMY5jKYqhEdH
29
+ bCNZX+EmP9XV8cfjQWOJOSck3O1FA8EL5Yekbyh8Rf60gneSu3lrvwvLE2msz00Y
30
+ vILeVMZvBXO3Ua3YitWFv9pxrgkGfpIt1U25H6Bg1pP2qSoEBSh5tCBqXbFqr1o2
31
+ QiuE0Y+bv2DT0rtKZ3Gt1G2klqZg3KpL2pM7Udf5bxm0Bxgj+XA1SycNqNsciGtK
32
+ jPFuA1IsFwNzJd0AcDtDRWK6o0GhtUwQ+JMfP06V07knWg21aTPddhiaDrgpMTFJ
33
+ hD8TJvTs8kkjz4COiv/jTippc9lw0Fy4rneZ2iAt59JaiqmoXvBP0tvj3orBBnqW
34
+ n3C9qbA=
35
+ -----END CERTIFICATE-----
@@ -0,0 +1,51 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIJKQIBAAKCAgEA49LRvGg28z/chbygtYSEHILCOqkUgPomM1K6Zity7oPHHfep
3
+ VSJjIuvyAeT/c2wSay4VL4npZWQ2/AuNdtltGb58PviuYtB/1S2sX8WyC2rPcq3v
4
+ Vk85FA0c7xLsOPA+4Hp7hHLxgBfBkIkCNFBRXQOrMBiPrBM7RKrCKo1b254O83Hd
5
+ y+kiUr6GZGXIWDPK3C3tkksKCAv++fxMQgucB9ERX4cigVAQ+ZIBZGLrWU7Jm/Lb
6
+ I4+TlbFZj/3dQDflRuAhX01Kb5dktnhxrlQd/UkDcpHCv38+2/haBov4wmu9/93e
7
+ KWfc5tqMx8SnnNPjq+ms3rq8WVQtxBUrh60cKhdEKO9nYhrXKssHPIPXiM5V2R8y
8
+ VddFygmgkEEUkxYIg9VYHFGlMCOQC5OoyXIoi08xs8h+GJbMMdODsRF8ZhIPeCA7
9
+ Va34MlySZrvXEzPavNwk3fq7NVUV4Um1lLWQPVwZ9yR9ii3yyDa+xibvUWegs/3y
10
+ 04iFL9hhp4EM3u5ucQOdyQEMurxvXx9WrBi8VhMmJUN7dDq4emWe8BITVYG6+vVk
11
+ X577dgm12FGjah4HCEqJuckudP/QGa1xmgJ+AjQ5Q7xzp0VA5/llWSlGjzCcVms0
12
+ V21wyHKGPm0p1sJ+cmcqLBCCgdFl2dnevoLXVjp18Xt6Oas9KI343tBSn7ECAwEA
13
+ AQKCAgEA2fcAHL6kHBP0OqteImw3LUPY6eCMMl2hoKa8mTVmj1XacgxZoI72xBly
14
+ /2cFE3vJH2wGbuYGO7Amfvvai2O34tKA8opf5UBPnThGW5a8Ifo9oR1SB4RiOpHV
15
+ JdI32L3ZmlD0zaJe9UtFMLA0QLK7NT9mT+yfwGTh5m9stuNph/NvoHBHYGibIwkP
16
+ cQyEIgbjRcZXLgjG/y3i827z0phi3oOimH+kfo2IwA11cYLGYjpj3uT5zcr2y1fT
17
+ NVUPkfooTKfwpco/tgXlIEKZmMz3qDVrq/hSl335OOEh2HOgOvpz3FF71Kd/DAr6
18
+ d8HpDr0WbIpzjuCfhONpqdkLPZJchwY/jvZdFbb0WtHtSsnlYR2DSuJ+SvtRZI03
19
+ 85EQmHMbqmX6pNKc1/OqgKklBlC8yhCBAINLNCl/Jl2uzTJNseD8enyOzOzKmuC+
20
+ vkz29uz7GM8NfS8pBmu7gAUxA0S22xV4vOmDwYAB4L1vz29kyAQg1EApVAufMvFJ
21
+ CJ4eEo6xJ6/UzEQt647IqTQQx6Z8axZvHRriUPwpegbJnP7lMpIp64iAQRWE6AAj
22
+ xQqauiZs/Xx/Px7eDIAbp3PldUkx+3URxlvQzxZgV2f/XTjL4U7A4l6XDC8hfRSd
23
+ XVnrVX9NNHE2OvZcshbUhlVZA657ZTUPs5LQ7xc4jmPEqB/XnVUCggEBAPm3WE+r
24
+ INDeVrRxaVoTR9+7fnJl/Nig8RaDbNLcrvcSLykrKOr0/tlvq/R4SOnTx5YXULhh
25
+ ZMPGQjyvJfvyetTdTUAlliR+ZIWt1S/dCoDitSTKUKabHsLx8N2m6NpFhTLcnbsZ
26
+ H03TghsZuH9uwW5eIZr2rqZqNh2NMJ8iOcFkaWpCFXntJGRlC1zZL7p/viMNY/af
27
+ 0haW/ujYjUPjPnKj5/whbgLEzVAglLkt5cTrSR1MWjnzuu9Ul/L0GwAB1sCNxprf
28
+ VoN5+PCfdgqCLGc/jknRRfZSmqi4yNZSuG2tTmANZ811HjfupQi1jI5H63YuZQKG
29
+ a51b+Rzsm9hnb/cCggEBAOmOcXHGOZ8Ek2gAVO2gES7uVDusZr0+NW+4j9a9NxDO
30
+ c4hHYUhHyHjYSgRIWBrdaCBz1ZtMXS7WZUELXU57o+7bQv0Vm36/eK58ecDFbTlB
31
+ HUb5wSIsts/uTKa7ame9+LCDldZN3Rg/cZ4q8YKf9T7bdiQzRjMbxwwTNuMQrKT7
32
+ mWoqmrhsW8nh0SdoEoO5rp92mgoTqcIAT/eOdKMnU4qFfQdQy2lsMyA4G8pFYHq9
33
+ CGFtldpfuWohHzoc6C18FukkKQvQGe98tUKh3PZqbGtoGmHIzVA1oDwa0lnRq5Rl
34
+ iJ6shQpUlIjbrUllWylkadig/l7DRKP5u629U/Jx05cCggEBANNTzBKv+feJEctm
35
+ 5wdppbu7ioj5sn8JxL2Ov3u7cv54jxzB/8DHUR1mGhmr6diodxGX7aH8GjBsCgYd
36
+ G4IadMTL++I7bNK5fAx9ThtRbuAf+7iE1rgIMoI8CeEqrYh6qPygI4QBALL2OfcB
37
+ T1fYvS3Pz5S7Cpae7+kWYX1qk4IMngFkp5QlklS8Bl+vFWs5TAmR/XTrT/n6EwOu
38
+ r+4x09lkyKBhEh6Zuj8DM5l7NCXwEFIRGZJNp3d/GZBr8KWS6NDPqrHKLAbcJEZO
39
+ TLEb9MPzz1C9H/4Tbfs3Vg+6tYVr0xYKgjwnz0j6VwQF0Etgpe2/2Y/Hfi8PdMR7
40
+ oHAFKYUCggEAX7GBQcCaM1FIpEAejA4dfEEiOiD1J2ypsFDKfo2gVj6Aj8HPVjIz
41
+ LXBRQ1fw4XD+DO3pA2xScbJeYjwpytJV5LPpypBj2ZbR94wAxr8ddWv8duw1+a6g
42
+ aKmWtmnruv3XO1tutRPKFvlHsCqgMYkgjtSUn1hy1tX2xDfLMVXPpvl/bkRuiEm9
43
+ ggYIEEFP9LDLn4KUsrRDxb0jBqdTmtWuIP94rtqnvVYbzIOwvzuVwDRbjq+7ynGW
44
+ IqnXhZP6fUhuiq/KMZDeT4WlLtvrEPuh2JAa3x3LIaYXNQk4Tpzd1DuVso21JPpq
45
+ sXhwk7X3mAoQZDXygxk2sojMIO+FybxhmQKCAQAiM0JHZU7S0QMUOWLC3NdzHUAX
46
+ lYHIn/zVnba6AGgd8Pw4mmdl9qKErQSDzkhF8r5TWfUxSE1FDqYEnhOP4XPgUlDW
47
+ ul9ayUxvXWSzK0nPTnHBOFF0Ek3ciUfauNnnv3lJnCJTQgqOtNFlQ4+GzyTf4eeB
48
+ dW65sszW6oKoJKnXlQoVeJRwm/J/s5i2ejFSSMfJ/tsqEvLTuC4YeFtBgq4OmnX1
49
+ BgUcRQnhuCZRhTyQh+VfmN9UFLl7O2CmlUz4KfXobbXgfMxUnWEHwSCh4Wham3vq
50
+ wrSmEtF22xHzu6oU8L2wsVTGPz0rne+7LBGHRS/5v8YLLf/XpYKzHoh9mxPP
51
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,52 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ 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
51
+ 77ssEYdFL/m/xgst/9elgrMeiH2bE88=
52
+ -----END PRIVATE KEY-----
@@ -0,0 +1,35 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIGEzCCA/ugAwIBAgIBBDANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJMUzEL
3
+ MAkGA1UECAwCTkExEzARBgNVBAcMCkh0dHAgSW5wdXQxETAPBgNVBAoMCExvZ3N0
4
+ YXNoMQ0wCwYDVQQDDARyb290MB4XDTIyMTExODA2MTA1MFoXDTI1MTExODA2MTA1
5
+ MFowZzELMAkGA1UEBhMCTFMxCzAJBgNVBAgMAk5BMRMwEQYDVQQHDApIdHRwIElu
6
+ cHV0MREwDwYDVQQKDAhMb2dzdGFzaDEjMCEGA1UEAwwaY2xpZW50X25vX21hdGNo
7
+ aW5nX3N1YmplY3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDR33lr
8
+ wqaslTGu1yAUoMQPL3UupHRmX4z4Ken+XigOiV/73hvfOHRiF4GRBhFXfMAFLzG9
9
+ ayHoiXwAOkRsPA8DSWtwKeMLjtpRjizNPWWuKp4Rkp+snrGTROczJvf44DWDrm2O
10
+ pbcuYym2B0fypEEpP9rvmnewbO8AVKF2Cs9hsy3d9XPDcpbw3/7TvU81uS1os9jS
11
+ CxxCLa26I/1t1SWf5iO+YKwS+7/MDRMTWgN1JbmY1m7KPygS3somS8uCSCVUAL3/
12
+ XFH1cLj99MmKNG4M/P05Qzzwq3ygEl3oY9iWA6jSYHsS6fkM7g7/Uo2cQ0OdS0Eh
13
+ gcAYZTZkhcfcvW+2XwUqDEYpJdmETBm4Mu/s6S9QJRb4sOdnfF8MrNPF517Kxsgv
14
+ m2GiHzu8X+74BgimtWJbJsng4uCs/s9YMVqcWoiz6/Oh12Niv3da//t77hYFipri
15
+ nIYeCNmvZe8FEkUEXZXaxVw57MQrSKXpYFR/YIywqxCkJ3iHabwGU3GN0bOIJdxD
16
+ AgGgvSmwuAb04FgpFazNhpR0pEuXnscxH2w2ekgog3QII2R8qfTfDL8BHTkn4tMS
17
+ D3DoalZRcxPbYg5ljqvfBLYmqJ6RmCjkZUrwpaTcvRUZButj4iKlBbjRIW75zVUw
18
+ WkiNNqSNvoMLZZ6Hj94Md0l0bj48k4zZh1Gc3wIDAQABo4HfMIHcMAkGA1UdEwQC
19
+ MAAwEQYJYIZIAYb4QgEBBAQDAgWgMDMGCWCGSAGG+EIBDQQmFiRPcGVuU1NMIEdl
20
+ bmVyYXRlZCBDbGllbnQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFNON6AHvURpMymy9
21
+ mbb6g1RaMS9nMB8GA1UdIwQYMBaAFMDy+B3+dY4E4JPEv7Prt34Cb2WqMA4GA1Ud
22
+ DwEB/wQEAwIF4DAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwGAYDVR0R
23
+ BBEwD4IHbm93aGVyZYcEey1DWTANBgkqhkiG9w0BAQUFAAOCAgEAmUN5xaZRBa1W
24
+ nByioq/PfMHfmRBUeKKBbJlropNbDwgA7fOg9htZAx84qkyxCSeg9tehECczkZ/G
25
+ DvNdm9ju77hJbl/Ni/GyTSM/+n1DNLak07jdnrGfrquFN59uLss3GnODi91pDgrb
26
+ 3FTUFTYteczMtuQ/H2cK36m+f3R8KbsQqsmzrZZ3tjF/QOnQUfWu+D0YiYoEruWo
27
+ 9nvDi9fTHn2ATjJ2xQyr1WaVyh1NyDeso9Fuv7bbzMcRXUOc+abzudE4vxT5vD9p
28
+ BX+i2RdDJ0UFNl5O+XzGkxR/sSN6MVyHvQXP6OCh+lznnF/kCxywsMI6dMfCT8tb
29
+ bcxCO4Dq2X7OqgLWhHT2UmPd8/IdUtrJdQR5f+o7ZGzTfIWq8VzP2FlAUIq74wnd
30
+ sVMFmVRbNK3ay0Wf1AEM4cV09YRGDNpZVZD26XbAcwHDbQvMHy/Sd1xEy3EMDh+n
31
+ QJRCYf7rcuwnXlCjJa6/kyoHL4NHFUMGzrKbK3ZVUc0OdITzG6QMr+N9xA4yeRMm
32
+ Y0TllIhZ27Iakwjz1sjD1ni6I8/kxU7lohSJS5lb8RHnPzEilXSY8KQYFmwKoA3u
33
+ RGCX0H2Qlix7ROSpObTb4xqoabLP4IecBbgdmsF6Z8U51WYP+9Oybk4JKQ9JXqv3
34
+ P5rwcLgNa2F3flh46OFCDDfET1tRU6M=
35
+ -----END CERTIFICATE-----
@@ -0,0 +1,51 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ 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
51
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,30 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFHjCCAwYCCQDkSE8sMpnvPTANBgkqhkiG9w0BAQsFADBRMQswCQYDVQQGEwJM
3
+ UzELMAkGA1UECAwCTkExEzARBgNVBAcMCkh0dHAgSW5wdXQxETAPBgNVBAoMCExv
4
+ Z3N0YXNoMQ0wCwYDVQQDDARzZWxmMB4XDTIyMTExODA2MTA0OVoXDTIzMTExODA2
5
+ MTA0OVowUTELMAkGA1UEBhMCTFMxCzAJBgNVBAgMAk5BMRMwEQYDVQQHDApIdHRw
6
+ IElucHV0MREwDwYDVQQKDAhMb2dzdGFzaDENMAsGA1UEAwwEc2VsZjCCAiIwDQYJ
7
+ KoZIhvcNAQEBBQADggIPADCCAgoCggIBANlpTaxVhJRVBopFwkHg1jzn7pt0273T
8
+ gKiAFZr4ohroMnfxmlsVhhiCsmcS+y3We1aMcOZWWp7Mp7Dhf+1p8UK6AgiRBLEW
9
+ jylBdqCOlncbta54jZRPPtU+X4cD/+HcSyASzmoEEJJqdQ8WaXgps2a5YwC9yLcL
10
+ yCDLxqgVGUTIhI2bR1BPjd/KK1VRk5EwPwvubGxgqrMQl6Ombn62sHyiaCaKa2Dh
11
+ 2596wdy7d5iaBKLAn/iQ1wdGAN0ZXFlY/FKNmOXWZo3E6JxLKSgNl/jKKDJdo6KE
12
+ aK6HJasIhyDJDtVU7180cRIQh+/iBnx3nWu6cJymelwX6EcGzqwPtWle1kHLyMMK
13
+ p7m+mZo05JOPCXcxmngvzCr5yqsoX9HZAHFEm4C+0qWKKmcXTDz+UUB1msWKU64R
14
+ 9GmOtRI8hXx9aZd9fU6cbV0hojkqohZxBKUeAfpjxoGZBV2sFlSEK9661G35ipMv
15
+ WiAZrwPNLXQqBXX8qyo19dUDdZUZ4ZFFUt/P2k8uWRoO+RycPiisU2ms/IMC/Wkg
16
+ IlzocEo8JUeFzYcMqHI7JC9YwZmI7rQhbR6N6Ntdz6vjbaRC8DLbGP1QcQDeFAwU
17
+ qb9SmzW/JGcNYXP4ugi8CFtbm5aEIiaJ/YE/IaRTpt5GhKAqbJHgG4PhdRTo9y9K
18
+ HvccsUeTl8pvAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAGAKEjJ6ZhZkD9Ex/Uf8
19
+ QQt5Ktz+jVSk4fYPHOv4DAUpb2psFRLPMmUda/23lMAxzJDYuIeiWIfjSCLWQuEP
20
+ 7p0bokGMcDxYH7uvEBF3WwoSRBgePZ+GfhTIqg7O+pzwW6CeUXtkjEHsyX8TF9ct
21
+ TAfH1t/oajIMhGE/YA9Nt8FCMvbhrxx4GjUf+JryKWQJ/Dq47TQgHT8BDGAonuAi
22
+ xoCyZNKEIY9C0eHgVwmSG74LZhJheuKl6PClLlHAEzkyNUNDEQm/y9pBtKqmB16l
23
+ rBXBJ+zSx22LoT2Hc+mBPh0p/hnyORCU/NJ8abiC48aQxMao/hZ2+VYvDIkKyUQl
24
+ ed68OqP52ntZpsqwnGoRfKh6X9SnxzpoczoKFHyQU250HS8I9rON43B3v51/9Kjd
25
+ YYwc2hgVW6BgllAmtYLUeOGYWEhZ/EXXF/ti/v9ZNaMKthcHF5F25gZdR5DX+4gb
26
+ ozZJ7JANXp9mR/I0prQcpArUFVtOatgd1D5huzfzktSBXgIVhPb1sqJ8hEkZ1u6n
27
+ 689yKqJ0jU3XClhcAunf8JafekbGh40JQrycHhTkCo4NaqHEO5bOOl0ciX30S+by
28
+ qtY3PFQ1O8uAGuD+cpbUkJtPdWzV3sTk2SG5fzDk4+yod3wENMNmkoHyOkjp0uPN
29
+ hIQyRZ/KHHatP6/mcMZSLP2W
30
+ -----END CERTIFICATE-----
@@ -0,0 +1,52 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ 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
51
+ DFGSv7HnY1VyDVo1ADyAkW85V09XAg==
52
+ -----END PRIVATE KEY-----
@@ -0,0 +1,32 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ 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
31
+ xSZuhCQLdbzR8ZCp+0zVuhRkyz8h8KAjMWChdA==
32
+ -----END CERTIFICATE-----