raktr 0.0.3 → 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.
- checksums.yaml +4 -4
- data/LICENSE.md +375 -29
- data/lib/raktr/connection/tls.rb +20 -4
- data/lib/raktr/connection.rb +1 -0
- data/lib/raktr/version.rb +1 -1
- data/lib/raktr.rb +37 -3
- data/spec/raktr/connection/tls_spec.rb +32 -31
- data/spec/support/fixtures/handlers/echo_server_tls.rb +2 -0
- data/spec/support/fixtures/pems/ca-cert.pem +33 -0
- data/spec/support/fixtures/pems/ca-key.pem +52 -0
- data/spec/support/fixtures/pems/client/cert.pem +31 -35
- data/spec/support/fixtures/pems/client/key.pem +52 -51
- data/spec/support/fixtures/pems/client/pub.pem +14 -0
- data/spec/support/fixtures/pems/generate-tls-certs.sh +82 -0
- data/spec/support/fixtures/pems/server/cert.pem +32 -35
- data/spec/support/fixtures/pems/server/key.pem +52 -51
- data/spec/support/fixtures/pems/server/pub.pem +14 -0
- data/spec/support/shared/raktr.rb +14 -1
- metadata +40 -32
- data/spec/support/fixtures/pems/cacert.pem +0 -37
|
@@ -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 + '/
|
|
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 + '/
|
|
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 + '/
|
|
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 =
|
|
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 =
|
|
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 =
|
|
206
|
-
on_error: proc do |e|
|
|
207
|
-
error ||= e
|
|
208
|
-
end
|
|
209
|
-
)
|
|
207
|
+
options = {}
|
|
210
208
|
|
|
211
209
|
raktr.run_in_thread
|
|
212
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
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
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
+
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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-----
|