poise-tls-remote-file 1.0.0

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 (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.kitchen.yml +3 -0
  4. data/.travis.yml +56 -0
  5. data/.yardopts +7 -0
  6. data/CHANGELOG.md +5 -0
  7. data/Gemfile +34 -0
  8. data/LICENSE +201 -0
  9. data/README.md +82 -0
  10. data/Rakefile +17 -0
  11. data/chef/attributes/default.rb +24 -0
  12. data/lib/poise_tls_remote_file.rb +21 -0
  13. data/lib/poise_tls_remote_file/cheftie.rb +17 -0
  14. data/lib/poise_tls_remote_file/resources.rb +26 -0
  15. data/lib/poise_tls_remote_file/resources/poise_tls_remote_file.rb +148 -0
  16. data/lib/poise_tls_remote_file/version.rb +20 -0
  17. data/poise-tls-remote-file.gemspec +41 -0
  18. data/test/cookbook/files/ca.crt +33 -0
  19. data/test/cookbook/files/ca.key +51 -0
  20. data/test/cookbook/files/client.crt +29 -0
  21. data/test/cookbook/files/client.csr +27 -0
  22. data/test/cookbook/files/client.key +51 -0
  23. data/test/cookbook/files/client.pem +80 -0
  24. data/test/cookbook/files/server.crt +30 -0
  25. data/test/cookbook/files/server.csr +27 -0
  26. data/test/cookbook/files/server.key +51 -0
  27. data/test/cookbook/metadata.rb +19 -0
  28. data/test/cookbook/recipes/default.rb +96 -0
  29. data/test/gemfiles/chef-12.10.gemfile +23 -0
  30. data/test/gemfiles/chef-12.11.gemfile +23 -0
  31. data/test/gemfiles/chef-12.12.gemfile +22 -0
  32. data/test/gemfiles/chef-12.13.gemfile +22 -0
  33. data/test/gemfiles/chef-12.14.gemfile +19 -0
  34. data/test/gemfiles/chef-12.15.gemfile +19 -0
  35. data/test/gemfiles/chef-12.16.gemfile +19 -0
  36. data/test/gemfiles/chef-12.17.gemfile +19 -0
  37. data/test/gemfiles/chef-12.18.gemfile +19 -0
  38. data/test/gemfiles/chef-12.19.gemfile +19 -0
  39. data/test/gemfiles/chef-12.5.gemfile +23 -0
  40. data/test/gemfiles/chef-12.6.gemfile +23 -0
  41. data/test/gemfiles/chef-12.7.gemfile +23 -0
  42. data/test/gemfiles/chef-12.8.gemfile +23 -0
  43. data/test/gemfiles/chef-12.9.gemfile +23 -0
  44. data/test/gemfiles/chef-12.gemfile +19 -0
  45. data/test/gemfiles/chef-13.0.gemfile +19 -0
  46. data/test/gemfiles/chef-13.gemfile +19 -0
  47. data/test/gemfiles/master.gemfile +24 -0
  48. data/test/integration/default/serverspec/default_spec.rb +30 -0
  49. data/test/spec/resources/poise_tls_remote_file_spec.rb +330 -0
  50. data/test/spec/spec_helper.rb +19 -0
  51. metadata +192 -0
@@ -0,0 +1,21 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+
18
+ module PoiseTlsRemoteFile
19
+ autoload :Resources, 'poise_tls_remote_file/resources'
20
+ autoload :VERSION, 'poise_tls_remote_file/version'
21
+ end
@@ -0,0 +1,17 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'poise_tls_remote_file/resources'
@@ -0,0 +1,26 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'poise_tls_remote_file/resources/poise_tls_remote_file'
18
+
19
+
20
+ module PoiseTlsRemoteFile
21
+ # Chef resources and providers for poise-tls-remote-file.
22
+ #
23
+ # @since 1.0.0
24
+ module Resources
25
+ end
26
+ end
@@ -0,0 +1,148 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'chef/resource/remote_file'
18
+ require 'chef/provider/remote_file'
19
+
20
+
21
+ module PoiseTlsRemoteFile
22
+ module Resources
23
+ # (see PoiseTlsRemoteFile::Resource)
24
+ # @since 1.0.0
25
+ module PoiseTlsRemoteFile
26
+ # A `tls_remote_file` resource to do something.
27
+ #
28
+ # @provides tls_remote_file
29
+ # @action run
30
+ # @example
31
+ # tls_remote_file '/path/to/file' do
32
+ # client_cert '/etc/ssl/client.crt'
33
+ # client_key '/etc/ssl/private/client.key'
34
+ # end
35
+ class Resource < Chef::Resource::RemoteFile
36
+ resource_name(:tls_remote_file)
37
+
38
+ def initialize(*args)
39
+ super
40
+ @provider = PoiseTlsRemoteFile::Provider if defined?(@provider)
41
+ end
42
+
43
+ property(:client_cert, kind_of: [String, NilClass], default: lazy { default_client_cert })
44
+ property(:client_key, kind_of: [String, NilClass], default: lazy { default_client_key })
45
+ property(:ca, kind_of: [String, Array, NilClass], default: lazy { default_ca })
46
+
47
+ def client_cert_obj
48
+ OpenSSL::X509::Certificate.new(maybe_read_file(client_cert)) if client_cert
49
+ end
50
+
51
+ def client_key_obj
52
+ if client_key
53
+ OpenSSL::PKey::RSA.new(maybe_read_file(client_key))
54
+ elsif client_cert
55
+ begin
56
+ OpenSSL::PKey::RSA.new(maybe_read_file(client_cert))
57
+ rescue OpenSSL::PKey::RSAError
58
+ # It didn't have a key in it, oh well.
59
+ nil
60
+ end
61
+ end
62
+ end
63
+
64
+ def ca_objs
65
+ Array(ca).map do |path|
66
+ OpenSSL::X509::Certificate.new(maybe_read_file(path)) if path
67
+ end
68
+ end
69
+
70
+ private
71
+
72
+ def default_client_cert
73
+ node['poise-tls-remote-file']['client_cert']
74
+ end
75
+
76
+ def default_client_key
77
+ node['poise-tls-remote-file']['client_key']
78
+ end
79
+
80
+ def default_ca
81
+ node['poise-tls-remote-file']['ca']
82
+ end
83
+
84
+ def maybe_read_file(path)
85
+ if path =~ /\A(\/|\w:)/
86
+ IO.read(path)
87
+ else
88
+ # Looks like a literal value.
89
+ path
90
+ end
91
+ end
92
+ end
93
+
94
+ # Provider for `tls_remote_file`.
95
+ #
96
+ # @see Resource
97
+ # @provides tls_remote_file
98
+ class Provider < Chef::Provider::RemoteFile
99
+ provides(:tls_remote_file)
100
+
101
+ def initialize(*args)
102
+ super
103
+ @content_class = PoiseTlsRemoteFile::Content
104
+ end
105
+ end
106
+
107
+ # Content class for `tls_remote_file`.
108
+ #
109
+ # @see Resource
110
+ class Content < Chef::Provider::RemoteFile::Content
111
+ def grab_file_from_uri(uri)
112
+ PoiseTlsRemoteFile::Fetcher.new(uri, @new_resource, @current_resource).fetch
113
+ end
114
+ end
115
+
116
+ # Fetcher class for `tls_remote_file`.
117
+ #
118
+ # @see Resource
119
+ class Fetcher < Chef::Provider::RemoteFile::HTTP
120
+ def fetch
121
+ client_cert = new_resource.client_cert_obj
122
+ client_key = new_resource.client_key_obj
123
+ ca = new_resource.ca_objs
124
+ begin
125
+ Chef::HTTP::Simple.singleton_class.send(:define_method, :new) do |*args|
126
+ super(*args).tap do |http_simple|
127
+ http_simple.singleton_class.prepend(Module.new {
128
+ define_method(:http_client) do |*inner_args|
129
+ super(*inner_args).tap do |client|
130
+ client.http_client.cert = client_cert if client_cert
131
+ client.http_client.key = client_key if client_key
132
+ ca.each {|cert| client.http_client.cert_store.add_cert(cert) if cert }
133
+ end
134
+ end
135
+ })
136
+ end
137
+ end
138
+ super
139
+ ensure
140
+ Chef::HTTP::Simple.singleton_class.send(:remove_method, :new)
141
+ end
142
+ end
143
+ end
144
+
145
+ end
146
+ end
147
+ end
148
+
@@ -0,0 +1,20 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+
18
+ module PoiseTlsRemoteFile
19
+ VERSION = '1.0.0'
20
+ end
@@ -0,0 +1,41 @@
1
+ #
2
+ # Copyright 2017, Noah Kantrowitz
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ lib = File.expand_path('../lib', __FILE__)
18
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
19
+ require 'poise_tls_remote_file/version'
20
+
21
+ Gem::Specification.new do |spec|
22
+ spec.name = 'poise-tls-remote-file'
23
+ spec.version = PoiseTlsRemoteFile::VERSION
24
+ spec.authors = ['Noah Kantrowitz']
25
+ spec.email = %w{noah@coderanger.net}
26
+ spec.description = 'A Chef cookbook for managing something.'
27
+ spec.summary = spec.description
28
+ spec.homepage = 'https://github.com/poise/poise-tls-remote-file'
29
+ spec.license = 'Apache 2.0'
30
+
31
+ spec.files = `git ls-files`.split($/)
32
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
33
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
34
+ spec.require_paths = %w{lib}
35
+
36
+ spec.add_dependency 'chef', '>= 12.5', '< 14'
37
+ spec.add_dependency 'halite', '~> 1.0'
38
+
39
+ spec.add_development_dependency 'poise-boiler', '~> 1.15'
40
+ spec.add_development_dependency 'poise-service', '~> 1.0'
41
+ end
@@ -0,0 +1,33 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFtTCCA52gAwIBAgIJAM+EuOk3iJp0MA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
3
+ BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
4
+ aWRnaXRzIFB0eSBMdGQwHhcNMTcwNDE0MDYxNjU4WhcNMTgwNDE0MDYxNjU4WjBF
5
+ MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50
6
+ ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
7
+ CgKCAgEAwSifDWUVuu3d/o3oGpPkldPB5gDm3IR8Xgm9jd5H67dV/YSLtozMq98I
8
+ gJzhGfgo2TQYfBWuBWq3ky/hi5UvNhqA5jNCTJMcMpz99NxMrCaNQcie+EkfRAg7
9
+ 1aIT5c9gqgAlCvr5gTujHmb2Spu+cZRCpeyOc754CmLCDb4F69AMh0exFwt4402h
10
+ tyqbfyEeuObyYw0kyrQXzmZscb/0vtPmBzzwHSphtzmbK5z0x6Ty/zMj1b/6Ruop
11
+ koGDiLd2DLgIiIY1KHTXDslWlgUNF6HRucgySkr+hLqiXKVwP6+33hnJuc6rbuF4
12
+ oP15DDH9UMF/4L2KeSXb+/V6VnoCNlO8ZcfL+4BTZzY/wvS+3x3G0uiOTP1ZvDfs
13
+ JPKTAJSA7r27dlQtV04+a4NxFSMMXx3IeNMQ38N93Fofa58mqkT+wI3HCoAaWf8s
14
+ +zYzNlK102kHExB3q6QV09CcxUMBrwLGsn7pTfFGX9EBewUCA6UejYSijLOcUkEO
15
+ uuk1l018rK3iykq1YOgRP0JTfp8ZXoo+KKF3tR03sasq/JyqCtGvN3+pCynrT1mq
16
+ dCv7jRmjhlC9oUhPlnToDyngq9nSxiOxSCxXjitKvqK851XRR9IWGM6ddHfa9uPl
17
+ s4nCrp+yirlp9NmZLvB998ztWnRxBIMTFBZ3YGtSRRYcAkifv2sCAwEAAaOBpzCB
18
+ pDAdBgNVHQ4EFgQUgKNVe0qhFHhPV/lA7XJWaJduexUwdQYDVR0jBG4wbIAUgKNV
19
+ e0qhFHhPV/lA7XJWaJduexWhSaRHMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpT
20
+ b21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGSCCQDP
21
+ hLjpN4iadDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4ICAQBCuJkjMxzz
22
+ ChAhFX3fiTEyhoClAZKrw7uZ4x3zgLBq+7uocgJxZeBOCnYHfeT8O3cw8D2tcx2q
23
+ jbryCN/jvH/X0i0r6pt2dnT2UCPulC1dWdcqTky0ZsuxRUrqYM4b/cBRgbkpXbrz
24
+ 8QSwi7Ss00Z1NBQnzeI+xB+TrwBj4qQrR/0VViXUdqI+wdesrGIw3eySaoAo8IwD
25
+ mZ48+EO0trE09nmgFMAzpxGwMvNFUhbGgejJYnE9U7vDVQBa15at4u1wcFfyquW3
26
+ QHrXR6S8g2hYkvERI9MNphr6TsAmvajtIrCn8oLW2cQeEjFtIMMCnHf3+8rgKoq5
27
+ ziLYeTVFAwEGgMssLon7dgWZXDTaQZ+PErWR5JEEdSN/ayqJk4KOvndSkTx6jDp4
28
+ ercQck6c7S+lCwywn1mTSnIt5OWVIll/x5A5JwlLwXxe8Ln/yaUiPCw8beIzZh2b
29
+ ziCtvY9+t/PIln6oxpn5ajNuIaDCWzu1qck4O+NdHZyOE+cmgvTItGpYYUzBHe3j
30
+ zKvqcNdjd/1v6yRUs8kDOZhpIkOuAdcRGMlnTrxuYAGDonOL/E+ZKaMUzdQSlpfz
31
+ FVtxR1hvsywUGBh1AA1XJLDG5jKTSV2gGjCycrMlJKatNymlLV5EbZzQBHq3XIxm
32
+ IUKrZzrLGb3USJU17yn1W1jtWoWx0B8EIw==
33
+ -----END CERTIFICATE-----
@@ -0,0 +1,51 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ 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
51
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,29 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIE/jCCAuYCAQEwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQVUxEzARBgNV
3
+ BAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0
4
+ ZDAeFw0xNzA0MTQwNjIwNDRaFw0xODA0MTQwNjIwNDRaMEUxCzAJBgNVBAYTAkFV
5
+ MRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRz
6
+ IFB0eSBMdGQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDb6efFQ9C4
7
+ PVyd30Ddu/97sdHbE8w/8tqIpCY05Wj5nsitL+MkoxKQ24awsaqMY6mW66AN3+ju
8
+ XMTbZWibkZM4UtOr801mJHv3o0bviRndll2+E1VNT8MpKsf6rmEX43Me81cG9jc8
9
+ YI2JcbkIUd4gnH+K9nehuoZs5tHy617DOSp2a/8+/xRUGfzQiT7fcpd2FpHBSV1C
10
+ Xgk2rT4a2uCOeE4T7fxpyVzxQlAgiAQ/Ah/OldI5/Pi/3HG3aZFjfAymM2QUfdEp
11
+ K2PdRPM3dpzgRxhSCX1+T4n44Xju+URPDCFJdYU0GXki1YfSF9IR3AKD2/RPfZfg
12
+ oS4i+mCuxn7/KvhiTsQNTr1uSYuzbFw/nmYHnfdLOkGAL5lYfq1tNo6AJLehOSW1
13
+ OnX467yMSQ+kU6gG7z+2NzMgL+VXvc6N2MPRcBHx44EiEvWWv61K8HbKOo2jjVJE
14
+ yi9vf1sfHRuTYZxhyfLG9T/Ab3o9vpxL23j6EkGeJEj1YVULlOlYMRnFetl6YBTI
15
+ a1h/p6dLknIz8KfEManH9TfZDGl12/lC3wJgV84H9Nnosi2lO4/B6wTA7iDFdVcU
16
+ S/TUuZmqGw4g0sYyCgzYRNjs/xiZozOG32piR/F9hgGkuARDLXTtaEYRTI+MotTK
17
+ kkINwawLLgua80z5xU8kyWXCRXM7RkfVfwIDAQABMA0GCSqGSIb3DQEBBQUAA4IC
18
+ AQBjXsC/5+gWuny8xmfiQW0x64D9eSmZ+hKQa4zS6F7lHkIfJEkzqnvKXX2PpmwK
19
+ xOXL2rtRjHwNLXdXvwBv3oL6dcvcrYZDlhm0FCRigMrvpPGr9YatovW8e99b6PoV
20
+ kRWrlQ9Z5CVuY69rdf/v3xgWignRY4d5a3IcVgoU1p0YDsiBaP7AyRNKdfsGImTg
21
+ GIBniqQIksL5Uhh0HRYedT1q+aPqNFFemJBaOGTQY6xM/fKdkskYitrnom4Nh75d
22
+ xOKitQHqSZ2Nwba3s8tajsa4okA6zz6zE+LsbHJAhyp0nUtEf+7XN3MxahnAEPfD
23
+ 15lg9HwsFwAN1gvwN0cPeEWKgzCTwrhFIuYYLdsmk0ChDMV/UEUKgNW4s2p6tYgY
24
+ E0sjrYjmVx+6ykisJJPUFv+sX9IUgpEXkj+xgX4agwTZPmJ3XmoTDO+2FpjRflEj
25
+ JVPsBhdQT1RrQYatLERxbXAawwB7R50CswdwDOzCDPzatO6aZPjUWsgF2TQALLyW
26
+ GLWQYoLaVlxlsHXQPnAbZNfGxtQuW4aP5tv32wfzUJCdXZOyMIb+p6td8RP63Cuc
27
+ XGiXFYX1CC81QIqupOVNQoBFS2N/CSW890pMgrBWL6AYPOR63rJP06Fl2T6fhv5z
28
+ URY68vQCALmp3//Somv9lvpY/7omDE5851RabDFAzyFTsw==
29
+ -----END CERTIFICATE-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN CERTIFICATE REQUEST-----
2
+ MIIEijCCAnICAQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUx
3
+ ITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCAiIwDQYJKoZIhvcN
4
+ AQEBBQADggIPADCCAgoCggIBANvp58VD0Lg9XJ3fQN27/3ux0dsTzD/y2oikJjTl
5
+ aPmeyK0v4ySjEpDbhrCxqoxjqZbroA3f6O5cxNtlaJuRkzhS06vzTWYke/ejRu+J
6
+ Gd2WXb4TVU1Pwykqx/quYRfjcx7zVwb2NzxgjYlxuQhR3iCcf4r2d6G6hmzm0fLr
7
+ XsM5KnZr/z7/FFQZ/NCJPt9yl3YWkcFJXUJeCTatPhra4I54ThPt/GnJXPFCUCCI
8
+ BD8CH86V0jn8+L/ccbdpkWN8DKYzZBR90SkrY91E8zd2nOBHGFIJfX5PifjheO75
9
+ RE8MIUl1hTQZeSLVh9IX0hHcAoPb9E99l+ChLiL6YK7Gfv8q+GJOxA1OvW5Ji7Ns
10
+ XD+eZged90s6QYAvmVh+rW02joAkt6E5JbU6dfjrvIxJD6RTqAbvP7Y3MyAv5Ve9
11
+ zo3Yw9FwEfHjgSIS9Za/rUrwdso6jaONUkTKL29/Wx8dG5NhnGHJ8sb1P8Bvej2+
12
+ nEvbePoSQZ4kSPVhVQuU6VgxGcV62XpgFMhrWH+np0uScjPwp8Qxqcf1N9kMaXXb
13
+ +ULfAmBXzgf02eiyLaU7j8HrBMDuIMV1VxRL9NS5maobDiDSxjIKDNhE2Oz/GJmj
14
+ M4bfamJH8X2GAaS4BEMtdO1oRhFMj4yi1MqSQg3BrAsuC5rzTPnFTyTJZcJFcztG
15
+ R9V/AgMBAAGgADANBgkqhkiG9w0BAQUFAAOCAgEAqC0rM4q7cxT5Cy/PN6mi9Sgx
16
+ CAhw76o3xVn9s2meVHacyzId46L2DdXr8briu33DN01j6XpH7rW9C7sNbFkbEVOf
17
+ 9o5kqHuOXvHYZJRvHj+xzkNw5QGExHOjlX5LwgvF5/Cw2mmlN6gMSzzdl/XMBSNr
18
+ /BGkvzFPFXxRGQ3A5siJ4rzAZt8gSuJtWYDKk0VQc9Y0+VxVbtw/9GULrvhWTwhp
19
+ IYFSjrgO4Y2AneIWPoqyNpbrxOeehpCM514ASWko7ionGkWB4IIsXsLW5z8QHIng
20
+ 6vmDopF+qU/sMvhWp4OgaU8hxlwjPLJIlA+yXo4OP5Z+WGUg3zw5/5pbSkHnlSFw
21
+ EopoAeKdm2+oJmqFjJcYTPb5+h5wQDd4D5HIQ85NGqSSHpPFXu6pq2Q3I/n0h50N
22
+ jDBOlG3R+OxRgxB6IV8h+YbIk/LFXjMkj7SZv2GCz2AEN8X2UglFw2z4SsZSzViD
23
+ wxkFaY2CYkcgA6VfmrO2lAgNm5UrEvdIBo/7GAuCqRzYWxQFWH6SwXhL7M5k9lDM
24
+ 4ZzYzTiYjguYVbyNNTpnbP48fwQEfi8wODp5VrRF8btcXqj1eMhHjWRYCmASfvfK
25
+ vABQiVduDBAlfv4Tqc2UPhtrjr0wXtZeDyRNdmuL2LWUrh+fv+8ScM7I2qsbLMdj
26
+ 0yIEcWiCZ/tGpy2q1ss=
27
+ -----END CERTIFICATE REQUEST-----
@@ -0,0 +1,51 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ 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
51
+ -----END RSA PRIVATE KEY-----