raktr 0.0.2 → 0.1.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.
@@ -77,14 +77,15 @@ describe Raktr::Connection::TLS do
77
77
 
78
78
  let(:client_valid_ssl_options) do
79
79
  {
80
- ca: pems_path + '/cacert.pem',
80
+ ca: pems_path + '/ca-cert.pem',
81
81
  private_key: pems_path + '/client/key.pem',
82
+ public_key: pems_path + '/client/pub.pem',
82
83
  certificate: pems_path + '/client/cert.pem'
83
84
  }
84
85
  end
85
86
  let(:client_invalid_ssl_options) do
86
87
  {
87
- ca: pems_path + '/cacert.pem',
88
+ ca: pems_path + '/ca-cert.pem',
88
89
  private_key: pems_path + '/client/foo-key.pem',
89
90
  certificate: pems_path + '/client/foo-cert.pem'
90
91
  }
@@ -92,8 +93,9 @@ describe Raktr::Connection::TLS do
92
93
 
93
94
  let(:server_valid_ssl_options) do
94
95
  {
95
- ca: pems_path + '/cacert.pem',
96
+ ca: pems_path + '/ca-cert.pem',
96
97
  private_key: pems_path + '/server/key.pem',
98
+ public_key: pems_path + '/server/pub.pem',
97
99
  certificate: pems_path + '/server/cert.pem'
98
100
  }
99
101
  end
@@ -144,15 +146,15 @@ describe Raktr::Connection::TLS do
144
146
  it "passes #{OpenSSL::SSL::SSLError} to #on_error" do
145
147
  error = nil
146
148
 
147
- options = server_ssl_options.merge(
149
+ options = {
148
150
  on_error: proc do |e|
149
151
  error ||= e
150
152
  end
151
- )
153
+ }
152
154
 
153
155
  raktr.run_in_thread
154
156
 
155
- raktr.listen( host, port, TLSHandler, options )
157
+ raktr.listen( host, port, TLSHandler, options.merge( tls: server_ssl_options ) )
156
158
 
157
159
  client_error = nil
158
160
  begin
@@ -179,15 +181,15 @@ describe Raktr::Connection::TLS do
179
181
 
180
182
  it 'connects successfully' do
181
183
  received_data = nil
182
- options = server_ssl_options.merge(
184
+ options = {
183
185
  on_read: proc do |received|
184
186
  received_data = received
185
187
  end
186
- )
188
+ }
187
189
 
188
190
  raktr.run_in_thread
189
191
 
190
- raktr.listen( host, port, TLSHandler, options )
192
+ raktr.listen( host, port, TLSHandler, options.merge( tls: server_ssl_options ) )
191
193
 
192
194
  client.write data
193
195
 
@@ -200,16 +202,19 @@ describe Raktr::Connection::TLS do
200
202
  let(:client_ssl_options) { client_invalid_ssl_options }
201
203
 
202
204
  it "passes #{OpenSSL::SSL::SSLError} to #on_error" do
203
- error = nil
205
+ # error = nil
204
206
 
205
- options = server_ssl_options.merge(
206
- on_error: proc do |e|
207
- error ||= e
208
- end
209
- )
207
+ options = {}
210
208
 
211
209
  raktr.run_in_thread
212
- raktr.listen( host, port, TLSHandler, options )
210
+
211
+ err = nil
212
+ begin
213
+ raktr.listen( host, port, TLSHandler, options.merge( tls: server_ssl_options ) )
214
+ rescue OpenSSL::X509::CertificateError => e
215
+ err = e
216
+ end
217
+ err.should_not be_nil
213
218
 
214
219
  client_error = nil
215
220
  begin
@@ -218,11 +223,10 @@ describe Raktr::Connection::TLS do
218
223
  client_error = e
219
224
  end
220
225
 
221
- [OpenSSL::SSL::SSLError, Errno::ECONNRESET].should include client_error.class
226
+ [OpenSSL::SSL::SSLError, Errno::ECONNRESET, Errno::ECONNREFUSED].should include client_error.class
222
227
 
223
228
  raktr.wait rescue Raktr::Error::NotRunning
224
-
225
- error.should be_kind_of OpenSSL::SSL::SSLError
229
+ # error.should be_kind_of OpenSSL::SSL::SSLError
226
230
  end
227
231
  end
228
232
  end
@@ -231,17 +235,16 @@ describe Raktr::Connection::TLS do
231
235
  let(:client_ssl_options) { {} }
232
236
 
233
237
  it "passes #{OpenSSL::SSL::SSLError} to #on_error" do
234
- error = nil
235
-
236
- options = server_ssl_options.merge(
237
- on_error: proc do |e|
238
- error ||= e
239
- end
240
- )
238
+ options = {}
241
239
 
242
240
  raktr.run_in_thread
243
241
 
244
- raktr.listen( host, port, TLSHandler, options )
242
+ begin
243
+ raktr.listen( host, port, TLSHandler, options.merge( tls: server_ssl_options ) )
244
+ rescue OpenSSL::X509::CertificateError => e
245
+ err = e
246
+ end
247
+ err.should_not be_nil
245
248
 
246
249
  client_error = nil
247
250
  begin
@@ -250,11 +253,9 @@ describe Raktr::Connection::TLS do
250
253
  client_error = e
251
254
  end
252
255
 
253
- [OpenSSL::SSL::SSLError, Errno::ECONNRESET].should include client_error.class
256
+ [OpenSSL::SSL::SSLError, Errno::ECONNRESET, Errno::ECONNREFUSED].should include client_error.class
254
257
 
255
258
  raktr.wait rescue Raktr::Error::NotRunning
256
-
257
- error.should be_kind_of OpenSSL::SSL::SSLError
258
259
  end
259
260
  end
260
261
  end
@@ -322,7 +323,7 @@ describe Raktr::Connection::TLS do
322
323
  end
323
324
 
324
325
  raktr.run do
325
- connection = raktr.connect( host, port, TLSHandler, client_valid_ssl_options )
326
+ connection = raktr.connect( host, port, TLSHandler, tls: client_valid_ssl_options )
326
327
  connection.write data
327
328
  end
328
329
 
@@ -1,3 +1,5 @@
1
+ require_relative 'echo_server'
2
+
1
3
  class EchoServerTLS < EchoServer
2
4
  include TLS
3
5
 
@@ -0,0 +1,33 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFqzCCA5OgAwIBAgIUeg5zFInlWDAdyMfrPxs0uroSSn0wDQYJKoZIhvcNAQEL
3
+ BQAwZTELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5
4
+ MRcwFQYDVQQKDA5NeU9yZ2FuaXphdGlvbjELMAkGA1UECwwCSVQxETAPBgNVBAMM
5
+ CE15Um9vdENBMB4XDTI1MTAyNjA4NTA0MFoXDTM1MTAyNDA4NTA0MFowZTELMAkG
6
+ A1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5MRcwFQYDVQQK
7
+ DA5NeU9yZ2FuaXphdGlvbjELMAkGA1UECwwCSVQxETAPBgNVBAMMCE15Um9vdENB
8
+ MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuJAmawyESSWOxyUyj+cv
9
+ IsICd8cxWXaF225zyyPD3P0u6Muh5hTX5B3jwYJkStOoZfD/M0DNlgbo8I4HvT/5
10
+ YkZH0J1LoASIVCBxXbFBTfLm6clmOY8PANWFvEDlmmPJa2VqhBVMoP5EEP/frhb+
11
+ NK6tRdm5S7y9BwRItWefpZrtQNo+YHR3QL1sZra/M+ZO7tJugF0MiNT3a1peCpM4
12
+ feqKoc+ZX3+q/oRArJVwipHFWRN8+t75uPykqlpsB5npSowy/jI3XspkiBgE9kbx
13
+ 3AU1HkYnJyVFGuJGusnrPYYCqdtLkUyZ9R1nQ2sVh0te0aNavQLd6uDrZ3eKfkw3
14
+ LXa8Jl3njzslVFvqKSell7ALcrZb6BpO36EMrfMMoQo/d//FYPnQ5usEo/jAO+qG
15
+ 6pb56HN7ErpBPFM0pqUL/XNaxUX2sV7ya6zC1XM5M53buwyFsfTi6fiWMoo0dKC1
16
+ IPYSKfnVqbi1n+pVDO3gLgebE9GoRhUwuYT1BHhIIKVyP/VhBhgi5IJ6JMPPpYmN
17
+ ptRjgwzYE/DNFGfZmcIJ8Z0Ln7/1HNYDRwCq48XaH35tjqHGO6kY0THc02t3jMxs
18
+ HxYKWG+mMuBJiVLSjlLGt3+tzkwH9u4Ouv777x6Chql81GEptUCHZmwjeCDIL8iq
19
+ 1+r4qS41OEY/2rannwvBjcUCAwEAAaNTMFEwHQYDVR0OBBYEFIPCM6+Rq463cCGK
20
+ L5Gap6J8CsoHMB8GA1UdIwQYMBaAFIPCM6+Rq463cCGKL5Gap6J8CsoHMA8GA1Ud
21
+ EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBACppxMqM+/z2Y7WUr2QBjh47
22
+ 9ob4qEHJwJgBNesCuGoR/ar6jiDsqpAbIj/b/MR2BTZCfl6bU/ONgwSbzrQQISjn
23
+ 1bdyiYAD2iNBCw1UR0yrkkb3ciRi3Jmqee57/XGQ9Y/kDf1qRW+V6MlIRVMVOOfv
24
+ ku0XNy2FEqsmmnCM5CjyxmPDz8q89BC3gS89i49FfVUNUY2Ntvc9+XAg7avi8chx
25
+ KIj/3gOc1QU5H6ieufY5t4yj1xI8TCVddjE9oLPzRQ++NOpuJJNW0UU7zlLioPqQ
26
+ +BJIwuLFwPZyDpLW6u6bywmwqTvbD85MQO/lt+BOA8ZGO68VqG6z6z0siw799LFB
27
+ Iy9E7iWkqHHFzIoWk9ToWr5rrPOU0UoL0Ic33TCHS1j8d11nyFa4mB8SpqFxkkvK
28
+ AWDfrJ2oGfjJ0iArdhoEhWmyPKrRnER4SQ6wZgtiUZj/UNu2fOiTF03JvpUeQl5y
29
+ L8RChSWyfeGZwJ6XbQT9bVVK3ZUZXXiuaBifvx6sNHtlkVc/DJeSpevkp2RbbtRA
30
+ FzJaaZmhI5i3aVxH6uxOoAdTPtbKOIelKwSAZS9SHj9BfRA31imra9Zi9dP8doJ6
31
+ GAQb89xMDzu2RObphwrpucYHQjSLN7h9Z402+OKYkkj+Un6v32P+23mJCDEIn/OG
32
+ ZFY/FNY80SANdgudyvhW
33
+ -----END CERTIFICATE-----
@@ -0,0 +1,52 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ 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
51
+ bmYRMDk9DxXzGKoY62n12un58kcEoCrm
52
+ -----END PRIVATE KEY-----
@@ -1,37 +1,33 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIGazCCBFOgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBTMQswCQYDVQQGEwJHUjEY
3
- MBYGA1UEAxMPQXJhY2huaS10ZXN0LUNBMSowKAYJKoZIhvcNAQkBFhthcmFjaG5p
4
- QGFyYWNobmktc2Nhbm5lci5jb20wHhcNMTIxMTAyMTAyNDA4WhcNMjIxMDMwMTAy
5
- NDA4WjBKMQswCQYDVQQGEwJHUjEPMA0GA1UEAxMGQ2xpZW50MSowKAYJKoZIhvcN
6
- AQkBFhthcmFjaG5pQGFyYWNobmktc2Nhbm5lci5jb20wggIiMA0GCSqGSIb3DQEB
7
- AQUAA4ICDwAwggIKAoICAQDEl91flpFH2Y1b2voSsjYDEiC70ArJWrmgm/UFdtXT
8
- pCng9ACjJWuf/evBOa8SKmNFgM1NKMF7GaZghDid3npq4Pdz/C74Ci8Q3ORMPC25
9
- Cq5T8oLYr7OGRQG7cmAqq7fP7MbPikEoaV3sg9CYdCqeK5WqT4+2eWvJGZ6t3z/g
10
- A1WYoHMbhXS1MedPlJIboSUcUlvf2BEld4EzwjCAlF7IICAT37ijtlDqVZpByfii
11
- xj47wP/fx7AtHe7tog9h1MgM0ciJgvH9TT3Kc/iSHYwrhS6jcnlwju7P1YkaRjjO
12
- ODIt7HCf6ScMmK+XIJZRuI7I4zWSSUKI5vgj5BKtlyj71xHRcKX+wfUwhz92BwwE
13
- 9kakl+0L4C11aWKHsYpT8J3NFH8soFpyUPmVQTDiNDcmbxQYHuZbSdWG5+XLYrLZ
14
- MJ8am9HB7Z9uQugyZxki/AgQyT21eCJBrg83A0zd+SYezsDA/SVEZXCCrrO5/u/f
15
- 6+RGYZcWXaIk+18uai5ax0HwksN9AnIIYyH19Fkq516a231Hy37/RKn2W/vH7A/J
16
- YdleDe1wqeIApDC/jJncuO380BdzvvwbhTkp3KKjNcx0B9d917q+pguzotiVR19n
17
- /MyIZ2/EU6r+AGyt1jxFZQhbgL6ayVlMgflyCTcsfgN7kC6dW+7L5gfBt3MwoXgK
18
- lwIDAQABo4IBUTCCAU0wCQYDVR0TBAIwADARBglghkgBhvhCAQEEBAMCBLAwKwYJ
19
- YIZIAYb4QgENBB4WHFRpbnlDQSBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0O
20
- BBYEFNDF0OQgaYJqWYB9onMoDJrI6sEHMIGDBgNVHSMEfDB6gBTxU601RtmudtfS
21
- BFYh2znJpP64LKFXpFUwUzELMAkGA1UEBhMCR1IxGDAWBgNVBAMTD0FyYWNobmkt
22
- dGVzdC1DQTEqMCgGCSqGSIb3DQEJARYbYXJhY2huaUBhcmFjaG5pLXNjYW5uZXIu
23
- Y29tggkA8FjCoCiD1/UwJgYDVR0SBB8wHYEbYXJhY2huaUBhcmFjaG5pLXNjYW5u
24
- ZXIuY29tMCYGA1UdEQQfMB2BG2FyYWNobmlAYXJhY2huaS1zY2FubmVyLmNvbTAL
25
- BgNVHQ8EBAMCBaAwDQYJKoZIhvcNAQEFBQADggIBAKOrRHhird4fhaVMHyNdTqQx
26
- tMuqYWrPb+L4vir7Gu9bfNXlS/b5QBBeFbg5YwVeMx2KTdJR9u3XK9PaQQCC0+ak
27
- tDy3beasiFvoThWmzaVLnPR2OpdRbbK9oFZuK7Y7Sdj6hFapbPcS3hG1M7uWtmiF
28
- Cwd3hmXzvyOH7DToQ5wRAtS3kE2I5J9kH8OVP/pIZ/OTnfDTHOilznOMmlJ+LuFh
29
- ECgxIFv9GRAb+J+AxFWBFNgm6yv6cGjAnT2rZR2B2WyKpmHs+mIxqmNSYldublKi
30
- OBVl13M2ETH9NKRkvNjYbD4nsZGWO85zGiv0AVaZxwEfIHuXQdWfSIhxno3UQpxJ
31
- UlCZTpGJ0wvHHrHC7GQZCCdr83Zq8MgcMgCuE78qNbYIE+rf6+MOhnxgg0sJ12Yr
32
- +++VrQx5HDOoChr39rFISRpi2vFxz5QsJONoNLvH0uJoxQ5UDlOXqeq6TlJBBNUk
33
- 77IkxGfqU7XmF9uT8nmcU4hx8yhKFJOZ5ORHX+U8+yaQN8RsxQadF7OzS1MMQXkl
34
- UwIeFEQNNv0JOIkjZILIDHz++PL5Fa+5/lgAV24X68ZIQ5FkgoLoOIWgbcARlsj0
35
- 62BJLPhrIbCUI7XDos+hTmMPWkzfGoIahL1mEMshlrKK/XGIFh9l1iKnI/4ze1bH
36
- 9nvAl0/txVluZtYXlf2E
2
+ MIIFvTCCA6WgAwIBAgIUSVHZ03h5pIdF+9KGg0SnAV/zQc8wDQYJKoZIhvcNAQEL
3
+ BQAwZTELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5
4
+ MRcwFQYDVQQKDA5NeU9yZ2FuaXphdGlvbjELMAkGA1UECwwCSVQxETAPBgNVBAMM
5
+ CE15Um9vdENBMB4XDTI1MTAyNjA4NTA0MVoXDTI2MTAyNjA4NTA0MVowczELMAkG
6
+ A1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5MRcwFQYDVQQK
7
+ DA5NeU9yZ2FuaXphdGlvbjEPMA0GA1UECwwGQ2xpZW50MRswGQYDVQQDDBJjbGll
8
+ bnQuZXhhbXBsZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCe
9
+ 40zvU30I3biwGGiGHnT3s7JbobrDq4F5a1Q+YTqds0Ui13XVCSkK6jxJZN/mcNFr
10
+ 2kE4U6ZzdMoYvSw+GaavhzSluGDZlGYvDLhBRmL4XwcDMc0Rm9eNsQwFd7D9ki59
11
+ S/P2oq4BmfuEYBY6tE/pPPQufMu0XtGNqgIIR5kerx8oB+rJd/P6u/Av+wHVsvx3
12
+ jzxbIzx5adUEex5mueXvQZE++MVatBNxS1apL8/POp/lNheOz51UuEYVFKRj//ex
13
+ OEL2FjIav6IgKuOnM3WSEIlX9rOGxy/rcHTdU/dKhBtTmyOotBP37a3srEwLLX37
14
+ ccoeYVx9AXy0FUlw83ZtqLeE7vkn1lPiFCByrr7091c4ozUkcOhp/4LhswgZ532P
15
+ W8YLU2VkGZ/jsM4wAHZKs5gcAesOD85HCVnwR9cCcgGHKvTWVjr1xY3npU5dNl1d
16
+ wAxL+mifc9WU7ViySIVtq1+nYObwNZHkPLo1YRf2FY7IsR+Jr3qE03jSEsxbk7pc
17
+ LSW3c+CckvQqYq58pCUj8VahaYEplsRfQasmqXAxcRKHpD89uZ6Fw3KBHs2UQjcz
18
+ pdSvkIoabZSmxO+C0cf1Er1Sxp4YYBS6RVP0+olAYL1rL9JZ6q+opEu2V1FvHlDJ
19
+ +vV8C7IyF4AICv3q/7aYjw0d4PnnMXqHEgYLWahT+wIDAQABo1cwVTATBgNVHSUE
20
+ DDAKBggrBgEFBQcDAjAdBgNVHQ4EFgQUVWND7ywSU6njV+LBpiS1Owj9mrYwHwYD
21
+ VR0jBBgwFoAUg8Izr5GrjrdwIYovkZqnonwKygcwDQYJKoZIhvcNAQELBQADggIB
22
+ AH6YpQyUuCB7XS14ASkLeAJIk+Cx02HlsI8CtyJ6zJ+1rNaAthW9Sb0pS7z9VLun
23
+ RUnjF+uMZwDRQCGBlEVjt9Vo7CLs6rKi6eBY7wRSaNZuWYQdd+ygM4LN3jhVcBPR
24
+ mUAfp6N5AkdtWuTK71/WfsqJZRJzqPDdgRcQFlJ0QVgQa13TzSDRYGPg5VgjGqvG
25
+ cQLr6Y3GxWe1gvUFgNfFlZe5ltneGZRxHZqGNySVrJ08OTiwPMNFtYKDfrcTCiC3
26
+ qdyHaGyrCqmapIpVcDwshVeh4GA5vnLtS/IbJPBsUPYMlrjDHwAAK4lS/hRs8jX/
27
+ sJuO9oh6YFkyxdX6vKPnLdmQm2pcBX0m4TI8M52KfsJaA7MIWJaHU930rcCgGKRg
28
+ ZWJ9wf5ukPxvW2uaw2noLg48LRlM08xfHQBCNOjy6c41FY9Dk6Do13VPspAuwRUe
29
+ v56t4WmUjB3L4MoQ0AK8f2MfG2NUhICE0wkhK4ZflWp+ZJA01SoxtApOa6/lZ+8u
30
+ ZdmCY6LRldAIeksOAZUwItQTImjDH5ScQStFsoalhm5mI5Agl9/seeQ5X2drwMbW
31
+ 67J+E77rOc5Lmn3uQ7bc83latvyydxT5rKljYUEf+2ens3Z2Yjf1O6fRtEGK13l0
32
+ CM3N+T0WeVw0460B3MUSpONlsviyfjVHuOzwPuPytzzr
37
33
  -----END CERTIFICATE-----
@@ -1,51 +1,52 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIJKAIBAAKCAgEAxJfdX5aRR9mNW9r6ErI2AxIgu9AKyVq5oJv1BXbV06Qp4PQA
3
- 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
- 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
- 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
- 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
- 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
- C+AtdWlih7GKU/CdzRR/LKBaclD5lUEw4jQ3Jm8UGB7mW0nVhufly2Ky2TCfGpvR
9
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- hcww9sRlCdp+jiNXUbmJcBiU0CLVoJmjmigAje5NmKDG5oM+puhW5G2oHVHtmL5D
22
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- FmK5vYskszjotpm5vzaUAecYMSiWuQrjOKgtoUBHXSYSRxAfqih4UixeW7UbYLsI
31
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- p8ffAoIBACB933K6zsF6e+lQaZRB/lqutsYVZnlL8Rd8f4DsiLrcom/fvNzLd2V3
41
- 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
- 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
- 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
- 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
- +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
- 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
- +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
- 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
- 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
- OD6LesfpcEtvc1OckXup1WgQWdef3ESwkh+HRW+JhHCgsy7doLuJ4BfP5VA=
51
- -----END RSA PRIVATE KEY-----
1
+ -----BEGIN PRIVATE KEY-----
2
+ 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
51
+ RKX0ast9dD3Bugsvl2LDblcXCpNI
52
+ -----END PRIVATE KEY-----
@@ -0,0 +1,14 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnuNM71N9CN24sBhohh50
3
+ 97OyW6G6w6uBeWtUPmE6nbNFItd11QkpCuo8SWTf5nDRa9pBOFOmc3TKGL0sPhmm
4
+ r4c0pbhg2ZRmLwy4QUZi+F8HAzHNEZvXjbEMBXew/ZIufUvz9qKuAZn7hGAWOrRP
5
+ 6Tz0LnzLtF7RjaoCCEeZHq8fKAfqyXfz+rvwL/sB1bL8d488WyM8eWnVBHseZrnl
6
+ 70GRPvjFWrQTcUtWqS/Pzzqf5TYXjs+dVLhGFRSkY//3sThC9hYyGr+iICrjpzN1
7
+ khCJV/azhscv63B03VP3SoQbU5sjqLQT9+2t7KxMCy19+3HKHmFcfQF8tBVJcPN2
8
+ bai3hO75J9ZT4hQgcq6+9PdXOKM1JHDoaf+C4bMIGed9j1vGC1NlZBmf47DOMAB2
9
+ SrOYHAHrDg/ORwlZ8EfXAnIBhyr01lY69cWN56VOXTZdXcAMS/pon3PVlO1YskiF
10
+ batfp2Dm8DWR5Dy6NWEX9hWOyLEfia96hNN40hLMW5O6XC0lt3PgnJL0KmKufKQl
11
+ I/FWoWmBKZbEX0GrJqlwMXESh6Q/PbmehcNygR7NlEI3M6XUr5CKGm2UpsTvgtHH
12
+ 9RK9UsaeGGAUukVT9PqJQGC9ay/SWeqvqKRLtldRbx5Qyfr1fAuyMheACAr96v+2
13
+ mI8NHeD55zF6hxIGC1moU/sCAwEAAQ==
14
+ -----END PUBLIC KEY-----
@@ -0,0 +1,82 @@
1
+ #!/bin/bash
2
+
3
+ # tls-cert-generator.sh
4
+ # Generates CA, server cert, client cert with private/public keys
5
+
6
+ set -e # Exit on any error
7
+
8
+ # Configuration
9
+ CA_KEY="ca-key.pem"
10
+ CA_CERT="ca-cert.pem"
11
+ SERVER_KEY="server-key.pem"
12
+ SERVER_CSR="server.csr"
13
+ SERVER_CERT="server-cert.pem"
14
+ CLIENT_KEY="client-key.pem"
15
+ CLIENT_CSR="client.csr"
16
+ CLIENT_CERT="client-cert.pem"
17
+
18
+ CA_SUBJECT="/C=US/ST=State/L=City/O=MyOrganization/OU=IT/CN=MyRootCA"
19
+ SERVER_SUBJECT="/C=US/ST=State/L=City/O=MyOrganization/OU=Server/CN=localhost"
20
+ CLIENT_SUBJECT="/C=US/ST=State/L=City/O=MyOrganization/OU=Client/CN=client.example.com"
21
+
22
+ echo "Generating TLS Certificate Authority and Client/Server Certificates..."
23
+
24
+ # 1. Generate CA private key and self-signed certificate
25
+ echo "1. Creating CA key and certificate..."
26
+ openssl genrsa -out "$CA_KEY" 4096
27
+ chmod 600 "$CA_KEY"
28
+ openssl req -x509 -new -nodes -key "$CA_KEY" -sha256 -days 3650 -out "$CA_CERT" -subj "$CA_SUBJECT"
29
+
30
+ # 2. Generate Server key and certificate
31
+ echo "2. Creating server key and certificate..."
32
+ openssl genrsa -out "$SERVER_KEY" 4096
33
+ chmod 600 "$SERVER_KEY"
34
+ openssl req -new -key "$SERVER_KEY" -out "$SERVER_CSR" -subj "$SERVER_SUBJECT"
35
+
36
+ # Server extensions (for TLS server)
37
+ cat > server-ext.cnf << EOF
38
+ extendedKeyUsage = serverAuth
39
+ subjectAltName = DNS:localhost, IP:127.0.0.1
40
+ EOF
41
+
42
+ openssl x509 -req -in "$SERVER_CSR" -CA "$CA_CERT" -CAkey "$CA_KEY" -CAcreateserial \
43
+ -out "$SERVER_CERT" -days 365 -sha256 -extfile server-ext.cnf
44
+
45
+ # 3. Generate Client key and certificate
46
+ echo "3. Creating client key and certificate..."
47
+ openssl genrsa -out "$CLIENT_KEY" 4096
48
+ chmod 600 "$CLIENT_KEY"
49
+ openssl req -new -key "$CLIENT_KEY" -out "$CLIENT_CSR" -subj "$CLIENT_SUBJECT"
50
+
51
+ # Client extensions (for TLS client)
52
+ cat > client-ext.cnf << EOF
53
+ extendedKeyUsage = clientAuth
54
+ EOF
55
+
56
+ openssl x509 -req -in "$CLIENT_CSR" -CA "$CA_CERT" -CAkey "$CA_KEY" -CAcreateserial \
57
+ -out "$CLIENT_CERT" -days 365 -sha256 -extfile client-ext.cnf
58
+
59
+ # 4. Extract public keys
60
+ echo "4. Extracting public keys..."
61
+ openssl rsa -in "$SERVER_KEY" -pubout -out server-pubkey.pem
62
+ openssl rsa -in "$CLIENT_KEY" -pubout -out client-pubkey.pem
63
+
64
+ # 5. Cleanup temporary files
65
+ rm -f "$SERVER_CSR" "$CLIENT_CSR" server-ext.cnf client-ext.cnf ca.srl
66
+
67
+ # 6. Set proper permissions
68
+ chmod 644 *.pem
69
+ chmod 600 *key.pem
70
+
71
+ echo ""
72
+ echo "Generation complete!"
73
+ echo ""
74
+ echo "Files created:"
75
+ echo " CA: $CA_CERT, $CA_KEY"
76
+ echo " Server: $SERVER_CERT, $SERVER_KEY, server-pubkey.pem"
77
+ echo " Client: $CLIENT_CERT, $CLIENT_KEY, client-pubkey.pem"
78
+ echo ""
79
+ echo "Usage:"
80
+ echo " - For server: use $SERVER_CERT and $SERVER_KEY"
81
+ echo " - For client: use $CLIENT_CERT and $CLIENT_KEY"
82
+ echo " - Trust CA: distribute $CA_CERT to clients"
@@ -1,37 +1,34 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIGYTCCBEmgAwIBAgIBBTANBgkqhkiG9w0BAQUFADBTMQswCQYDVQQGEwJHUjEY
3
- MBYGA1UEAxMPQXJhY2huaS10ZXN0LUNBMSowKAYJKoZIhvcNAQkBFhthcmFjaG5p
4
- QGFyYWNobmktc2Nhbm5lci5jb20wHhcNMTIxMTAyMTAzMzQxWhcNMjIxMDMwMTAz
5
- MzQxWjBNMQswCQYDVQQGEwJHUjESMBAGA1UEAxMJbG9jYWxob3N0MSowKAYJKoZI
6
- hvcNAQkBFhthcmFjaG5pQGFyYWNobmktc2Nhbm5lci5jb20wggIiMA0GCSqGSIb3
7
- DQEBAQUAA4ICDwAwggIKAoICAQCz+OAzIMwVNujjweU3Zhvk0ZGYqTdJ73Jz5v7F
8
- O5JE35hTzy1kf6EgMEqmZqKeBe95fviv+7UXcqtYoyxFPB/ssSLeUMyO0fUZZMMi
9
- 8EfqtZZveB1j7f0EfzSEG7eL5tCjb/Q8tXQvM33+0QfjnwcrSOr2fPPwbEiWU1d1
10
- cP1ZdRtgvAuo3a4Sga9xtJSFRe3iSpynJsQo482rSPpIcVfm5tArq8RVlztJPvXY
11
- A76iIgNddhdOM/3fBg+a6iXqkC7X0WPRoNt7XiVniwBIP1t5/2S7JyhRsN50Crfu
12
- 9N6lZd/fij0xwr5hLzl5lXKdUI5iYZZfTpNiIXnUICswFOUHwV/2W8XADu1HHLeX
13
- a4knqnmX0h7c+bJm3UrXMiwU61tVENogjNc/vJP9fjy/Klfvgn5BXmpyTze7Xzlj
14
- JcTt0VNNKUdieLjJsVKVF42j6RH9farshcHcCzd4701WkMEsbHZYncMUYNCBqUg7
15
- 5SuIFHIZfZ4wq06i8BLRXJRHK+P+kDp/cyJyr/UqtlJwFJIgtWYOO0SMhynBK8gC
16
- w/SE8Tlx0r/yIAyutyU6F4nE4wYfR3d8SyObzf5HD0rAtHBYUdPR5qFNePpEQlHR
17
- Kepgl/pMpPZ2X6e4HYqIBrrahMI0mAns285Z/iBKpv6MyJR1npEMNa8I0eugeAGO
18
- y0IcFQIDAQABo4IBRDCCAUAwCQYDVR0TBAIwADARBglghkgBhvhCAQEEBAMCBkAw
19
- KwYJYIZIAYb4QgENBB4WHFRpbnlDQSBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYD
20
- VR0OBBYEFFQOlI4fxXxPl9UYd9MdoBsXt9ZWMIGDBgNVHSMEfDB6gBTxU601Rtmu
21
- dtfSBFYh2znJpP64LKFXpFUwUzELMAkGA1UEBhMCR1IxGDAWBgNVBAMTD0FyYWNo
22
- bmktdGVzdC1DQTEqMCgGCSqGSIb3DQEJARYbYXJhY2huaUBhcmFjaG5pLXNjYW5u
23
- ZXIuY29tggkA8FjCoCiD1/UwJgYDVR0SBB8wHYEbYXJhY2huaUBhcmFjaG5pLXNj
24
- YW5uZXIuY29tMCYGA1UdEQQfMB2BG2FyYWNobmlAYXJhY2huaS1zY2FubmVyLmNv
25
- bTANBgkqhkiG9w0BAQUFAAOCAgEAeKLkpVjOdO9r5FcZPhemKsL9AFmnbqWmSeFA
26
- Cmu7wyHwbDbgCS0tWnrq45qDbnAJxAqXQKzKS7QINxR80XMpgoaglx7qd1V5MEXK
27
- LXn4G6BJ5tAgEbLY7HnsUHQnLMK/KWCzMODweM2gtPTauChF9kIKWrBJuizfldAo
28
- ww8YOeZfPc77pEhC/vjttQOzfqcLjGvzpJJQVmd+i6JtH635hou9i0QXR//Nrf+l
29
- ymrCuh7sil/Z1bJdmrQ1yPb2fNgqwHnWHqwPSFb8heEGExKC6vNCS2A+e08HGQTR
30
- wNAQQYQRihtDC4lqNFcVdgZExXRypzbPE2l49RnDXCL/JOCisAErGd0kzBBj6SGD
31
- Z7AKH87esH1mNThWFCZJTYXFTthVpNbOpPQ78UbXz9tFbfVdbWAcOn9enNbVeZa5
32
- vbqIHQs7azy4I5NwQ2zK/+MO1egUbbCEhcUzoUgEx8NB3JeW2ziZDEzzyKqTcv0V
33
- EH+suZefvhHxI3tGg2UmFD1+SBEVNw/1jv1HsduTclI7ckGHLcFjt7hG1CFLfLZ3
34
- wEhN91GCsOrbckp8wBMsT1yiimasrVL2PKfa0ywUW0D6zRvBs5bgtGaWUPy1VX5W
35
- 3LLbhwMZyaHnjT9GGw2cW1hea8TRWapj+/On4w2tRy6KtnkLBHgM3E+0E9DFwwVZ
36
- jppXDh8=
2
+ MIIF0DCCA7igAwIBAgIUT51iLNx8FVfUZ6vTejoe95MpxFMwDQYJKoZIhvcNAQEL
3
+ BQAwZTELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5
4
+ MRcwFQYDVQQKDA5NeU9yZ2FuaXphdGlvbjELMAkGA1UECwwCSVQxETAPBgNVBAMM
5
+ CE15Um9vdENBMB4XDTI1MTAyNjA4NTA0MFoXDTI2MTAyNjA4NTA0MFowajELMAkG
6
+ A1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5MRcwFQYDVQQK
7
+ DA5NeU9yZ2FuaXphdGlvbjEPMA0GA1UECwwGU2VydmVyMRIwEAYDVQQDDAlsb2Nh
8
+ bGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwlfpD6c8gKjSJ
9
+ YsDcY21HyOH58QFEtm7EAsI8kLxLJshztfaYJRMMb8pT0iUZWGwf31UrF0od2gKT
10
+ FTi5zRHJgKohu+ACjsSy/zQyjga+kEvlsh+kiTsR6USaUOqwZ9JsdPkw3Zir3Hha
11
+ aVAsHwy2HIcBjSukNizX1ccnnRlWjj06p06AN5uPdPFvStb4BfQSz3lrMCV7oi6R
12
+ /Vw+HoXugw7lXUvoZWE2b5hXilevWPXMzA2UmvvleXvjne0NLNube5931JDgSc8E
13
+ FuXZtgLboIJxf6vmjmqYNWP47mKZpiwuU6+xScyNPsWKSxycdKQw5CS6IhDxwXgG
14
+ FPMwmt2w9DE5QIxLrUg+GnR1oQrM2cKhsnRZDDufstujBCPYPeInbyc7dG2DM8P7
15
+ bUaUn4b7N3rsySXids6qlBLt11+qLwSx+xzQ8EAeBd48oimiM3NvECKASSKS8nDB
16
+ I7CdREakrxeTyNfX62KlKw2fIYKwSGlj4ssh0GxZOBQwRQD/9dsAZoOnY81o7NLK
17
+ xxzp+O8UJRjDcdcFaOmxL2J7Hc+oXO2f/B7s2showoHsjFQDyJ8+ka8Ir//iSBgR
18
+ UIEcSHobzhoTHiSkySPP3Z7azjOZrj4X2NaS3bs0j0TPKKWGyeeECYLYQkkHT0NM
19
+ 0+I9Sp/G5bujHVVJ8Cg3dZF7aV1+tQIDAQABo3MwcTATBgNVHSUEDDAKBggrBgEF
20
+ BQcDATAaBgNVHREEEzARgglsb2NhbGhvc3SHBH8AAAEwHQYDVR0OBBYEFIegHqvP
21
+ n2rk/ECD4R8SfBHkLgkyMB8GA1UdIwQYMBaAFIPCM6+Rq463cCGKL5Gap6J8CsoH
22
+ MA0GCSqGSIb3DQEBCwUAA4ICAQBZ8gCc3hXJOcabCQwVQpkTTmlHzioVxT1Rsfzz
23
+ LxVlX4oqPyRthjfwR7S2Ohpe8gmrBeMzgoFpuYBqoKeDdA4JIpSMTJjusTApONfo
24
+ 4Il9KSrYMxKeM0CT8/jsht/RrttpK5xb1JzFViUUIlQynwVc/5RVQRQUpcbU6W/u
25
+ S+0WvPjGvOA/hun8sW8u5Aa79J//TB/qK21yJDWXMtH+ex2bXR3AnzMlj9OT/KXN
26
+ rd4OQ1FTRP/nzA6gb50La7ft7pCRBnymY3k3jtozo+E4p5xV2cvarGLCkL0+7tXH
27
+ GajAgpzLHuK68RMfJI76iJ8h8+SnhuRXyW4H4Xo6IV9ODsSiayOgMPibX9Mi7YKY
28
+ YDrwWVkKlO6jm3GJcXHom5M1iuMk2H1GQMDKnH2ThQ+hsmzkl3WuvbrM5wkQ33Jg
29
+ H/DJA7qADo4kZe2kteVQ12rJ+KcTMqOWAl1iVZB0VOPce58BC4fIcsQAQ2yzm0tS
30
+ sWR5nZjLl6oQPYElKvSuqx1+rMplMcomh8iFLnhEluPlJ6QktKo/23EttOiyB/2o
31
+ xYzUG5352Vl0IVcsAhSemlosrqi1OGZf5avMq9S/8NUmiPyPfKESuvlwJfiprEk/
32
+ J/0K0Y2x0BmW3YcQGlW5bpf4fl5Rp/z+6enp/pJSiAi/k8W5fEKt+k49rP3l4we+
33
+ TB6PiA==
37
34
  -----END CERTIFICATE-----