logstash-input-elastic_serverless_forwarder 0.1.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ 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
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
+ 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
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-----