letscert 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/letscert/io_plugin.rb +9 -9
- data/lib/letscert.rb +1 -1
- data/spec/cert.der +0 -0
- data/spec/cert.pem +32 -0
- data/spec/chain.pem +27 -0
- data/spec/fullchain.pem +59 -0
- data/spec/io_plugin_spec.rb +284 -1
- data/spec/key.der +0 -0
- data/spec/key.pem +15 -0
- metadata +8 -8
- data/bin/letscert~ +0 -4
- data/lib/letscert.rb~ +0 -6
- data/spec/io_plugin_spec.rb~ +0 -16
- data/spec/loggable_spec.rb~ +0 -1
- data/spec/spec_helper.rb~ +0 -1
- data/tasks/gem.rake~ +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc09ae0885a6a70be1512b3819c07899cd84ecab
|
4
|
+
data.tar.gz: 124c5daa4aab3d985d86a1d0fada0c65db0269a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf9e90399b2277647f72939d7669a0d562add40b1cd3a4a89346d215fe09e7a97bf0eed125342c30bed63096c92945f932276df3d82dc532a83221238cfba0e5
|
7
|
+
data.tar.gz: ce17392296e10b1d45fff709662ec3de25c53f658b28140a895706b65fe8f0f44959a87cc418d33155246af98afe36639623a503f54a77dc015d00462e1b65ff
|
data/lib/letscert/io_plugin.rb
CHANGED
@@ -188,11 +188,7 @@ module LetsCert
|
|
188
188
|
class OpenSSLIOPlugin < IOPlugin
|
189
189
|
|
190
190
|
# @private Regular expression to discriminate PEM
|
191
|
-
PEM_RE = /
|
192
|
-
^-----BEGIN ((?:[\x21-\x2c\x2e-\x7e](?:[- ]?[\x21-\x2c\x2e-\x7e])*)?)\s*-----$
|
193
|
-
.*?
|
194
|
-
^-----END \1-----\s*
|
195
|
-
/x
|
191
|
+
PEM_RE = /^-----BEGIN CERTIFICATE-----\n.*?\n-----END CERTIFICATE-----\n/m
|
196
192
|
|
197
193
|
# @param [String] name filename
|
198
194
|
# @param [:pem,:der] type
|
@@ -242,10 +238,12 @@ module LetsCert
|
|
242
238
|
# @param [String] data
|
243
239
|
# @yield [String] pem
|
244
240
|
def split_pems(data)
|
245
|
-
|
241
|
+
my_data = data
|
242
|
+
m = my_data.match(PEM_RE)
|
246
243
|
while (m) do
|
247
244
|
yield m[0]
|
248
|
-
|
245
|
+
my_data = my_data[m.end(0)..-1]
|
246
|
+
m = my_data.match(PEM_RE)
|
249
247
|
end
|
250
248
|
end
|
251
249
|
|
@@ -323,9 +321,11 @@ module LetsCert
|
|
323
321
|
def load
|
324
322
|
data = super
|
325
323
|
if data[:chain].nil? or data[:chain].empty?
|
326
|
-
cert
|
324
|
+
cert = nil
|
325
|
+
chain = []
|
327
326
|
else
|
328
|
-
cert
|
327
|
+
cert = data[:chain].shift
|
328
|
+
chain = data[:chain]
|
329
329
|
end
|
330
330
|
|
331
331
|
{ account_key: data[:account_key], key: data[:key], cert: cert, chain: chain }
|
data/lib/letscert.rb
CHANGED
data/spec/cert.der
ADDED
Binary file
|
data/spec/cert.pem
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIFmzCCBIOgAwIBAgISAVjEgN3oIZzLvwTkSOVu08NlMA0GCSqGSIb3DQEBCwUA
|
3
|
+
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
|
4
|
+
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTAeFw0xNjAyMTExNzQyMDBaFw0x
|
5
|
+
NjA1MTExNzQyMDBaMBIxEDAOBgNVBAMTB2xkNzcuZXUwggGiMA0GCSqGSIb3DQEB
|
6
|
+
AQUAA4IBjwAwggGKAoIBgQDPpsQCigwsWHwBhKGiXb8IDDVdV2q36tIsyP2WQmZy
|
7
|
+
G4JpasPpmVxuK2qPsYjEQRt+9VsKwOvuq1hNpQCJLtHXEweg8d4Px83WVQbcrdP5
|
8
|
+
U3hJgPbFFI6UXyx5BtsctDdYLxxi91tKn8g7nZgEGw1/NcSXkXQ6Q1/O5zwt2CME
|
9
|
+
/xGTASI74kR2nXhIU8ZPth52R99UpIYquy2n0cNyadgFuhNq+jWZ8ks+ZYY/b1s4
|
10
|
+
YL6cCx9SIAvDonrZGGG01ilZJWCxjgXxwXN5o78/22vyHcoBuwiK+6vPTKZ/+zvK
|
11
|
+
MjDXES7sM791mjgh7c+NL57SCw4D4zYq7ABmx7tCip5BGTT9n/BdoKxBK8vaU9tA
|
12
|
+
Qe3OYYXcdXN3g9up249U/+H9Hy/fu2/BYe7CDIkEU/1kQosYYKpSJv1WAU12gb77
|
13
|
+
k7u1DnR+5vP/EwA+/rLb9MvEuj8mA9oKnLVq6zOaY/LXxcVVXEJEktoDV+Y27VuU
|
14
|
+
yB5J1n7OL2SXzycj693Sk/sCAwEAAaOCAjEwggItMA4GA1UdDwEB/wQEAwIFoDAd
|
15
|
+
BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNV
|
16
|
+
HQ4EFgQUtxSm/clLMtOKm+p5seP4OsvYSFEwHwYDVR0jBBgwFoAUqEpqYwR93brm
|
17
|
+
0Tm3pkVl7/Oo7KEwcAYIKwYBBQUHAQEEZDBiMC8GCCsGAQUFBzABhiNodHRwOi8v
|
18
|
+
b2NzcC5pbnQteDEubGV0c2VuY3J5cHQub3JnLzAvBggrBgEFBQcwAoYjaHR0cDov
|
19
|
+
L2NlcnQuaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wOwYDVR0RBDQwMoIHbGQ3Ny5l
|
20
|
+
dYIMaW1hcC5sZDc3LmV1ggxzbXRwLmxkNzcuZXWCC3d3dy5sZDc3LmV1MIH+BgNV
|
21
|
+
HSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcC
|
22
|
+
ARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGb
|
23
|
+
VGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5
|
24
|
+
aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0
|
25
|
+
aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcv
|
26
|
+
cmVwb3NpdG9yeS8wDQYJKoZIhvcNAQELBQADggEBAEUjrcJKy04CiIGMuJwdHUQ7
|
27
|
+
25YywkoVxo7K8GnLs1uf5XREJgil2GPD6uL//U2V8FzreP/eDQFluNJSYE3F9F1b
|
28
|
+
f2X3TOSnJnRllFputgWMiIL8BzAbrR5UgEhrsSWS0AxK5Zh3GNTFa3pjQWu6swIl
|
29
|
+
eDAj2iJHCOuL2t33vk8G2bYdFOih0EL6WwWjrwsu4lNmjxDqKe3VOM0HJE/DBbWw
|
30
|
+
sqhZv1UOZZl8hJ6iID/hL7Tco6r1LcH5Fsyq8Yd/qbd4+kErWEvz/CeGsMDHFgYn
|
31
|
+
oefVSYJ7mA/lJTWdydeUTkdQ04H8s/pjtI8SKpMmVTQa+xdqsH2YMBEv8dspMzk=
|
32
|
+
-----END CERTIFICATE-----
|
data/spec/chain.pem
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIEqDCCA5CgAwIBAgIRAJgT9HUT5XULQ+dDHpceRL0wDQYJKoZIhvcNAQELBQAw
|
3
|
+
PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
|
4
|
+
Ew5EU1QgUm9vdCBDQSBYMzAeFw0xNTEwMTkyMjMzMzZaFw0yMDEwMTkyMjMzMzZa
|
5
|
+
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
|
6
|
+
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTCCASIwDQYJKoZIhvcNAQEBBQAD
|
7
|
+
ggEPADCCAQoCggEBAJzTDPBa5S5Ht3JdN4OzaGMw6tc1Jhkl4b2+NfFwki+3uEtB
|
8
|
+
BaupnjUIWOyxKsRohwuj43Xk5vOnYnG6eYFgH9eRmp/z0HhncchpDpWRz/7mmelg
|
9
|
+
PEjMfspNdxIknUcbWuu57B43ABycrHunBerOSuu9QeU2mLnL/W08lmjfIypCkAyG
|
10
|
+
dGfIf6WauFJhFBM/ZemCh8vb+g5W9oaJ84U/l4avsNwa72sNlRZ9xCugZbKZBDZ1
|
11
|
+
gGusSvMbkEl4L6KWTyogJSkExnTA0DHNjzE4lRa6qDO4Q/GxH8Mwf6J5MRM9LTb4
|
12
|
+
4/zyM2q5OTHFr8SNDR1kFjOq+oQpttQLwNh9w5MCAwEAAaOCAZIwggGOMBIGA1Ud
|
13
|
+
EwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMH8GCCsGAQUFBwEBBHMwcTAy
|
14
|
+
BggrBgEFBQcwAYYmaHR0cDovL2lzcmcudHJ1c3RpZC5vY3NwLmlkZW50cnVzdC5j
|
15
|
+
b20wOwYIKwYBBQUHMAKGL2h0dHA6Ly9hcHBzLmlkZW50cnVzdC5jb20vcm9vdHMv
|
16
|
+
ZHN0cm9vdGNheDMucDdjMB8GA1UdIwQYMBaAFMSnsaR7LHH62+FLkHX/xBVghYkQ
|
17
|
+
MFQGA1UdIARNMEswCAYGZ4EMAQIBMD8GCysGAQQBgt8TAQEBMDAwLgYIKwYBBQUH
|
18
|
+
AgEWImh0dHA6Ly9jcHMucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcwPAYDVR0fBDUw
|
19
|
+
MzAxoC+gLYYraHR0cDovL2NybC5pZGVudHJ1c3QuY29tL0RTVFJPT1RDQVgzQ1JM
|
20
|
+
LmNybDATBgNVHR4EDDAKoQgwBoIELm1pbDAdBgNVHQ4EFgQUqEpqYwR93brm0Tm3
|
21
|
+
pkVl7/Oo7KEwDQYJKoZIhvcNAQELBQADggEBANHIIkus7+MJiZZQsY14cCoBG1hd
|
22
|
+
v0J20/FyWo5ppnfjL78S2k4s2GLRJ7iD9ZDKErndvbNFGcsW+9kKK/TnY21hp4Dd
|
23
|
+
ITv8S9ZYQ7oaoqs7HwhEMY9sibED4aXw09xrJZTC9zK1uIfW6t5dHQjuOWv+HHoW
|
24
|
+
ZnupyxpsEUlEaFb+/SCI4KCSBdAsYxAcsHYI5xxEI4LutHp6s3OT2FuO90WfdsIk
|
25
|
+
6q78OMSdn875bNjdBYAqxUp2/LEIHfDBkLoQz0hFJmwAbYahqKaLn73PAAm1X2kj
|
26
|
+
f1w8DdnkabOLGeOVcj9LQ+s67vBykx4anTjURkbqZslUEUsn2k5xeua2zUk=
|
27
|
+
-----END CERTIFICATE-----
|
data/spec/fullchain.pem
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIFmzCCBIOgAwIBAgISAVjEgN3oIZzLvwTkSOVu08NlMA0GCSqGSIb3DQEBCwUA
|
3
|
+
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
|
4
|
+
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTAeFw0xNjAyMTExNzQyMDBaFw0x
|
5
|
+
NjA1MTExNzQyMDBaMBIxEDAOBgNVBAMTB2xkNzcuZXUwggGiMA0GCSqGSIb3DQEB
|
6
|
+
AQUAA4IBjwAwggGKAoIBgQDPpsQCigwsWHwBhKGiXb8IDDVdV2q36tIsyP2WQmZy
|
7
|
+
G4JpasPpmVxuK2qPsYjEQRt+9VsKwOvuq1hNpQCJLtHXEweg8d4Px83WVQbcrdP5
|
8
|
+
U3hJgPbFFI6UXyx5BtsctDdYLxxi91tKn8g7nZgEGw1/NcSXkXQ6Q1/O5zwt2CME
|
9
|
+
/xGTASI74kR2nXhIU8ZPth52R99UpIYquy2n0cNyadgFuhNq+jWZ8ks+ZYY/b1s4
|
10
|
+
YL6cCx9SIAvDonrZGGG01ilZJWCxjgXxwXN5o78/22vyHcoBuwiK+6vPTKZ/+zvK
|
11
|
+
MjDXES7sM791mjgh7c+NL57SCw4D4zYq7ABmx7tCip5BGTT9n/BdoKxBK8vaU9tA
|
12
|
+
Qe3OYYXcdXN3g9up249U/+H9Hy/fu2/BYe7CDIkEU/1kQosYYKpSJv1WAU12gb77
|
13
|
+
k7u1DnR+5vP/EwA+/rLb9MvEuj8mA9oKnLVq6zOaY/LXxcVVXEJEktoDV+Y27VuU
|
14
|
+
yB5J1n7OL2SXzycj693Sk/sCAwEAAaOCAjEwggItMA4GA1UdDwEB/wQEAwIFoDAd
|
15
|
+
BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNV
|
16
|
+
HQ4EFgQUtxSm/clLMtOKm+p5seP4OsvYSFEwHwYDVR0jBBgwFoAUqEpqYwR93brm
|
17
|
+
0Tm3pkVl7/Oo7KEwcAYIKwYBBQUHAQEEZDBiMC8GCCsGAQUFBzABhiNodHRwOi8v
|
18
|
+
b2NzcC5pbnQteDEubGV0c2VuY3J5cHQub3JnLzAvBggrBgEFBQcwAoYjaHR0cDov
|
19
|
+
L2NlcnQuaW50LXgxLmxldHNlbmNyeXB0Lm9yZy8wOwYDVR0RBDQwMoIHbGQ3Ny5l
|
20
|
+
dYIMaW1hcC5sZDc3LmV1ggxzbXRwLmxkNzcuZXWCC3d3dy5sZDc3LmV1MIH+BgNV
|
21
|
+
HSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggrBgEFBQcC
|
22
|
+
ARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwICMIGeDIGb
|
23
|
+
VGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBieSBSZWx5
|
24
|
+
aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDZXJ0
|
25
|
+
aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlwdC5vcmcv
|
26
|
+
cmVwb3NpdG9yeS8wDQYJKoZIhvcNAQELBQADggEBAEUjrcJKy04CiIGMuJwdHUQ7
|
27
|
+
25YywkoVxo7K8GnLs1uf5XREJgil2GPD6uL//U2V8FzreP/eDQFluNJSYE3F9F1b
|
28
|
+
f2X3TOSnJnRllFputgWMiIL8BzAbrR5UgEhrsSWS0AxK5Zh3GNTFa3pjQWu6swIl
|
29
|
+
eDAj2iJHCOuL2t33vk8G2bYdFOih0EL6WwWjrwsu4lNmjxDqKe3VOM0HJE/DBbWw
|
30
|
+
sqhZv1UOZZl8hJ6iID/hL7Tco6r1LcH5Fsyq8Yd/qbd4+kErWEvz/CeGsMDHFgYn
|
31
|
+
oefVSYJ7mA/lJTWdydeUTkdQ04H8s/pjtI8SKpMmVTQa+xdqsH2YMBEv8dspMzk=
|
32
|
+
-----END CERTIFICATE-----
|
33
|
+
-----BEGIN CERTIFICATE-----
|
34
|
+
MIIEqDCCA5CgAwIBAgIRAJgT9HUT5XULQ+dDHpceRL0wDQYJKoZIhvcNAQELBQAw
|
35
|
+
PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
|
36
|
+
Ew5EU1QgUm9vdCBDQSBYMzAeFw0xNTEwMTkyMjMzMzZaFw0yMDEwMTkyMjMzMzZa
|
37
|
+
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
|
38
|
+
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTCCASIwDQYJKoZIhvcNAQEBBQAD
|
39
|
+
ggEPADCCAQoCggEBAJzTDPBa5S5Ht3JdN4OzaGMw6tc1Jhkl4b2+NfFwki+3uEtB
|
40
|
+
BaupnjUIWOyxKsRohwuj43Xk5vOnYnG6eYFgH9eRmp/z0HhncchpDpWRz/7mmelg
|
41
|
+
PEjMfspNdxIknUcbWuu57B43ABycrHunBerOSuu9QeU2mLnL/W08lmjfIypCkAyG
|
42
|
+
dGfIf6WauFJhFBM/ZemCh8vb+g5W9oaJ84U/l4avsNwa72sNlRZ9xCugZbKZBDZ1
|
43
|
+
gGusSvMbkEl4L6KWTyogJSkExnTA0DHNjzE4lRa6qDO4Q/GxH8Mwf6J5MRM9LTb4
|
44
|
+
4/zyM2q5OTHFr8SNDR1kFjOq+oQpttQLwNh9w5MCAwEAAaOCAZIwggGOMBIGA1Ud
|
45
|
+
EwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMH8GCCsGAQUFBwEBBHMwcTAy
|
46
|
+
BggrBgEFBQcwAYYmaHR0cDovL2lzcmcudHJ1c3RpZC5vY3NwLmlkZW50cnVzdC5j
|
47
|
+
b20wOwYIKwYBBQUHMAKGL2h0dHA6Ly9hcHBzLmlkZW50cnVzdC5jb20vcm9vdHMv
|
48
|
+
ZHN0cm9vdGNheDMucDdjMB8GA1UdIwQYMBaAFMSnsaR7LHH62+FLkHX/xBVghYkQ
|
49
|
+
MFQGA1UdIARNMEswCAYGZ4EMAQIBMD8GCysGAQQBgt8TAQEBMDAwLgYIKwYBBQUH
|
50
|
+
AgEWImh0dHA6Ly9jcHMucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcwPAYDVR0fBDUw
|
51
|
+
MzAxoC+gLYYraHR0cDovL2NybC5pZGVudHJ1c3QuY29tL0RTVFJPT1RDQVgzQ1JM
|
52
|
+
LmNybDATBgNVHR4EDDAKoQgwBoIELm1pbDAdBgNVHQ4EFgQUqEpqYwR93brm0Tm3
|
53
|
+
pkVl7/Oo7KEwDQYJKoZIhvcNAQELBQADggEBANHIIkus7+MJiZZQsY14cCoBG1hd
|
54
|
+
v0J20/FyWo5ppnfjL78S2k4s2GLRJ7iD9ZDKErndvbNFGcsW+9kKK/TnY21hp4Dd
|
55
|
+
ITv8S9ZYQ7oaoqs7HwhEMY9sibED4aXw09xrJZTC9zK1uIfW6t5dHQjuOWv+HHoW
|
56
|
+
ZnupyxpsEUlEaFb+/SCI4KCSBdAsYxAcsHYI5xxEI4LutHp6s3OT2FuO90WfdsIk
|
57
|
+
6q78OMSdn875bNjdBYAqxUp2/LEIHfDBkLoQz0hFJmwAbYahqKaLn73PAAm1X2kj
|
58
|
+
f1w8DdnkabOLGeOVcj9LQ+s67vBykx4anTjURkbqZslUEUsn2k5xeua2zUk=
|
59
|
+
-----END CERTIFICATE-----
|
data/spec/io_plugin_spec.rb
CHANGED
@@ -61,7 +61,6 @@ module LetsCert
|
|
61
61
|
describe AccountKey do
|
62
62
|
|
63
63
|
before(:all) { IOPlugin.logger = Logger.new('/dev/null') }
|
64
|
-
|
65
64
|
let(:ak) { IOPlugin.registered['account_key.json'] }
|
66
65
|
|
67
66
|
it 'persist account_key' do
|
@@ -101,4 +100,288 @@ module LetsCert
|
|
101
100
|
|
102
101
|
end
|
103
102
|
|
103
|
+
describe KeyFile do
|
104
|
+
|
105
|
+
let(:keypem) { IOPlugin.registered['key.pem'] }
|
106
|
+
let(:keyder) { IOPlugin.registered['key.der'] }
|
107
|
+
|
108
|
+
it 'persist key' do
|
109
|
+
expect(keypem.persisted[:key]).to be(true)
|
110
|
+
expect(keyder.persisted[:key]).to be(true)
|
111
|
+
end
|
112
|
+
|
113
|
+
it '#load private key from key.pem file' do
|
114
|
+
pwd = FileUtils.pwd
|
115
|
+
FileUtils.cd File.dirname(__FILE__)
|
116
|
+
|
117
|
+
begin
|
118
|
+
data = keypem.load
|
119
|
+
expect(data[:key]).to be_a(OpenSSL::PKey::RSA)
|
120
|
+
expect(data[:key].params['d']).to eq(OpenSSL::BN.new(0x573C8C0EADCBA5E571CD57FAB4D9FE6AC9DC5F9ADF8FEC48667D836B6A0EA9E1240D2A5861258A7E6E5EA1052AFAD71176A49E90BA80F43C44F2BD415161C1E71AA37E7C2BE5C7C18CF964A5A7100C801F558C7B7825D082FEF79A76963786D8CDFE1058F7F178869A09F5377F51DD45EA05B428F41F09C9F29D37BB539512C5))
|
121
|
+
rescue Exception
|
122
|
+
raise
|
123
|
+
ensure
|
124
|
+
FileUtils.cd pwd
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
it '#save private key to key.pem file' do
|
129
|
+
data = { key: OpenSSL::PKey::RSA.new(512) }
|
130
|
+
keypem.save data
|
131
|
+
begin
|
132
|
+
expect(File.exist? 'key.pem').to be(true)
|
133
|
+
|
134
|
+
data2 = keypem.load
|
135
|
+
expect(data2[:key].params['d'].to_i).to eq(data[:key].params['d'].to_i)
|
136
|
+
rescue Exception
|
137
|
+
raise
|
138
|
+
ensure
|
139
|
+
File.unlink 'key.pem'
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
it '#load private key from key.der file' do
|
144
|
+
pwd = FileUtils.pwd
|
145
|
+
FileUtils.cd File.dirname(__FILE__)
|
146
|
+
|
147
|
+
begin
|
148
|
+
data = keyder.load
|
149
|
+
expect(data[:key]).to be_a(OpenSSL::PKey::RSA)
|
150
|
+
expect(data[:key].params['d']).to eq(OpenSSL::BN.new(0x648C2A57083D12CA32A89538DD1AD7BAC5C522E682F0AFD9C834BB44CC536A57880F24D9D8987A0FC2CEF5C8F7A9BA70223E3C3E06229C815955FCE06F198175))
|
151
|
+
rescue Exception
|
152
|
+
raise
|
153
|
+
ensure
|
154
|
+
FileUtils.cd pwd
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
it '#save private key to key.der file' do
|
159
|
+
data = { key: OpenSSL::PKey::RSA.new(512) }
|
160
|
+
keyder.save data
|
161
|
+
begin
|
162
|
+
expect(File.exist? 'key.der').to be(true)
|
163
|
+
|
164
|
+
data2 = keyder.load
|
165
|
+
expect(data2[:key].params['d'].to_i).to eq(data[:key].params['d'].to_i)
|
166
|
+
rescue Exception
|
167
|
+
raise
|
168
|
+
ensure
|
169
|
+
File.unlink 'key.der'
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
describe ChainFile do
|
175
|
+
let(:chain) { IOPlugin.registered['chain.pem'] }
|
176
|
+
|
177
|
+
it 'persist chain' do
|
178
|
+
expect(chain.persisted[:chain]).to be(true)
|
179
|
+
end
|
180
|
+
|
181
|
+
it '#load chain from chain.pem file' do
|
182
|
+
pwd = FileUtils.pwd
|
183
|
+
FileUtils.cd File.dirname(__FILE__)
|
184
|
+
|
185
|
+
begin
|
186
|
+
data = chain.load
|
187
|
+
expect(data[:cert]).to be_nil
|
188
|
+
expect(data[:chain]).to_not be_nil
|
189
|
+
expect(data[:chain]).to be_a(Array)
|
190
|
+
expect(data[:chain].first).to be_a(OpenSSL::X509::Certificate)
|
191
|
+
rescue Exception
|
192
|
+
raise
|
193
|
+
ensure
|
194
|
+
FileUtils.cd pwd
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
it '#save chain to chain.pem file' do
|
199
|
+
pwd = FileUtils.pwd
|
200
|
+
FileUtils.cd File.dirname(__FILE__)
|
201
|
+
|
202
|
+
begin
|
203
|
+
data = chain.load
|
204
|
+
expect(data[:cert]).to be_nil
|
205
|
+
expect(data[:chain]).to_not be_nil
|
206
|
+
rescue Exception
|
207
|
+
raise
|
208
|
+
ensure
|
209
|
+
FileUtils.cd pwd
|
210
|
+
end
|
211
|
+
|
212
|
+
chain.save data
|
213
|
+
|
214
|
+
begin
|
215
|
+
expect(File.exist? 'chain.pem').to be(true)
|
216
|
+
|
217
|
+
data2 = chain.load
|
218
|
+
data2[:chain].each_with_index do |cert, i|
|
219
|
+
expect(cert.to_pem).to eq(data[:chain][i].to_pem)
|
220
|
+
end
|
221
|
+
rescue Exception
|
222
|
+
raise
|
223
|
+
ensure
|
224
|
+
File.unlink 'chain.pem'
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|
229
|
+
|
230
|
+
describe FullChainFile do
|
231
|
+
let(:fullchain) { IOPlugin.registered['fullchain.pem'] }
|
232
|
+
|
233
|
+
it 'persist chain' do
|
234
|
+
expect(fullchain.persisted[:chain]).to be(true)
|
235
|
+
end
|
236
|
+
|
237
|
+
it 'persist cert' do
|
238
|
+
expect(fullchain.persisted[:cert]).to be(true)
|
239
|
+
end
|
240
|
+
|
241
|
+
it '#load cert and chain from fullchain.pem file' do
|
242
|
+
pwd = FileUtils.pwd
|
243
|
+
FileUtils.cd File.dirname(__FILE__)
|
244
|
+
|
245
|
+
begin
|
246
|
+
data = fullchain.load
|
247
|
+
expect(data[:cert]).to_not be_nil
|
248
|
+
expect(data[:cert]).to be_a(OpenSSL::X509::Certificate)
|
249
|
+
expect(data[:chain]).to_not be_nil
|
250
|
+
expect(data[:chain]).to be_a(Array)
|
251
|
+
expect(data[:chain].first).to be_a(OpenSSL::X509::Certificate)
|
252
|
+
rescue Exception
|
253
|
+
raise
|
254
|
+
ensure
|
255
|
+
FileUtils.cd pwd
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
it '#save cert and chain to fullchain.pem file' do
|
260
|
+
pwd = FileUtils.pwd
|
261
|
+
FileUtils.cd File.dirname(__FILE__)
|
262
|
+
|
263
|
+
begin
|
264
|
+
data = fullchain.load
|
265
|
+
expect(data[:cert]).to_not be_nil
|
266
|
+
expect(data[:chain]).to_not be_nil
|
267
|
+
rescue Exception
|
268
|
+
raise
|
269
|
+
ensure
|
270
|
+
FileUtils.cd pwd
|
271
|
+
end
|
272
|
+
|
273
|
+
fullchain.save data
|
274
|
+
|
275
|
+
begin
|
276
|
+
expect(File.exist? 'fullchain.pem').to be(true)
|
277
|
+
|
278
|
+
data2 = fullchain.load
|
279
|
+
expect(data2[:cert].to_pem).to eq(data[:cert].to_pem)
|
280
|
+
data2[:chain].each_with_index do |cert, i|
|
281
|
+
expect(cert.to_pem).to eq(data[:chain][i].to_pem)
|
282
|
+
end
|
283
|
+
rescue Exception
|
284
|
+
raise
|
285
|
+
ensure
|
286
|
+
File.unlink 'fullchain.pem'
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
end
|
291
|
+
|
292
|
+
describe CertFile do
|
293
|
+
|
294
|
+
let(:certpem) { IOPlugin.registered['cert.pem'] }
|
295
|
+
let(:certder) { IOPlugin.registered['cert.der'] }
|
296
|
+
|
297
|
+
it 'persist cert' do
|
298
|
+
expect(certpem.persisted[:cert]).to be(true)
|
299
|
+
expect(certder.persisted[:cert]).to be(true)
|
300
|
+
end
|
301
|
+
|
302
|
+
it '#load cert from cert.pem' do
|
303
|
+
pwd = FileUtils.pwd
|
304
|
+
FileUtils.cd File.dirname(__FILE__)
|
305
|
+
|
306
|
+
begin
|
307
|
+
data = certpem.load
|
308
|
+
expect(data[:cert]).to_not be_nil
|
309
|
+
expect(data[:cert]).to be_a(OpenSSL::X509::Certificate)
|
310
|
+
rescue Exception
|
311
|
+
raise
|
312
|
+
ensure
|
313
|
+
FileUtils.cd pwd
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
it '#load cert from cert.der' do
|
318
|
+
pwd = FileUtils.pwd
|
319
|
+
FileUtils.cd File.dirname(__FILE__)
|
320
|
+
|
321
|
+
begin
|
322
|
+
data = certder.load
|
323
|
+
expect(data[:cert]).to_not be_nil
|
324
|
+
expect(data[:cert]).to be_a(OpenSSL::X509::Certificate)
|
325
|
+
rescue Exception
|
326
|
+
raise
|
327
|
+
ensure
|
328
|
+
FileUtils.cd pwd
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
it '#save cert to cert.pem' do
|
333
|
+
pwd = FileUtils.pwd
|
334
|
+
FileUtils.cd File.dirname(__FILE__)
|
335
|
+
|
336
|
+
begin
|
337
|
+
data = certpem.load
|
338
|
+
expect(data[:cert]).to_not be_nil
|
339
|
+
rescue Exception
|
340
|
+
raise
|
341
|
+
ensure
|
342
|
+
FileUtils.cd pwd
|
343
|
+
end
|
344
|
+
|
345
|
+
certpem.save data
|
346
|
+
|
347
|
+
begin
|
348
|
+
expect(File.exist? 'cert.pem').to be(true)
|
349
|
+
|
350
|
+
data2 = certpem.load
|
351
|
+
expect(data2[:cert].to_pem).to eq(data[:cert].to_pem)
|
352
|
+
rescue Exception
|
353
|
+
raise
|
354
|
+
ensure
|
355
|
+
File.unlink 'cert.pem'
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
it '#save cert to cert.der' do
|
360
|
+
pwd = FileUtils.pwd
|
361
|
+
FileUtils.cd File.dirname(__FILE__)
|
362
|
+
|
363
|
+
begin
|
364
|
+
data = certder.load
|
365
|
+
expect(data[:cert]).to_not be_nil
|
366
|
+
rescue Exception
|
367
|
+
raise
|
368
|
+
ensure
|
369
|
+
FileUtils.cd pwd
|
370
|
+
end
|
371
|
+
|
372
|
+
certder.save data
|
373
|
+
|
374
|
+
begin
|
375
|
+
expect(File.exist? 'cert.der').to be(true)
|
376
|
+
|
377
|
+
data2 = certder.load
|
378
|
+
expect(data2[:cert].to_pem).to eq(data[:cert].to_pem)
|
379
|
+
rescue Exception
|
380
|
+
raise
|
381
|
+
ensure
|
382
|
+
File.unlink 'cert.der'
|
383
|
+
end
|
384
|
+
end
|
385
|
+
end
|
386
|
+
|
104
387
|
end
|
data/spec/key.der
ADDED
Binary file
|
data/spec/key.pem
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIICXQIBAAKBgQCcUtDEgi7FE8IO5NINg6qNmxm4XBw24GYMCfPz+InzGu1naMoQ
|
3
|
+
Up83B9qlNJpNKj7MnaRFePWnEgS9JbUxEYPoUB6zRDnabgzABsy4Tcrg6F3LXsHG
|
4
|
+
T72QZfU/fInLr+Ib4qE+oJ8jpQY6zRb1/SMXEcPFF5zSLzT3IEYNrAgUoQIDAQAB
|
5
|
+
AoGAVzyMDq3LpeVxzVf6tNn+asncX5rfj+xIZn2Da2oOqeEkDSpYYSWKfm5eoQUq
|
6
|
+
+tcRdqSekLqA9DxE8r1BUWHB5xqjfnwr5cfBjPlkpacQDIAfVYx7eCXQgv73mnaW
|
7
|
+
N4bYzf4QWPfxeIaaCfU3f1HdReoFtCj0HwnJ8p03u1OVEsUCQQDQIUQZN9KyTv6B
|
8
|
+
EBc50RNjeUxz13Ivjn8lWX95yf2VFfFRbS9hwOzsDl3jNtWqEtoePZsqdjwHlbMI
|
9
|
+
ovfls/rTAkEAwEcs2u2+07EflbLkbmEF/5zJQXdslKd8Cx6Xp/jtyO09sPj9Jjnb
|
10
|
+
h6pWXRLHgn8JsojX6ALPpqOGpryKBgXiOwJBAMMwT4Mu/SRIPRqhEocgcwR5P5/s
|
11
|
+
T6QWCVvnwUtgibcFqxloQmV03zzKhHaQeHVV1MVDlX+O/uFGHW9eFwqPbg0CQQCA
|
12
|
+
aojgpsw+IhvQJSw/M/mHoDUhzhrspXdJDeOHwc891ITRP1oDP70IvJD1lGc/Fo1p
|
13
|
+
ec+JGueIicqSbXVZVHClAkBW8wwSK/QBG9eAkWH9i2WCJb3okYsmRoSwDAYIsnMO
|
14
|
+
GOn1TJ8b7rorKE6S3G1v+jQSXFx6Pc+HU+weS7Ux8UIV
|
15
|
+
-----END RSA PRIVATE KEY-----
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: letscert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvain Daubert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: acme-client
|
@@ -65,23 +65,23 @@ files:
|
|
65
65
|
- README.md
|
66
66
|
- Rakefile
|
67
67
|
- bin/letscert
|
68
|
-
- bin/letscert~
|
69
68
|
- lib/letscert.rb
|
70
|
-
- lib/letscert.rb~
|
71
69
|
- lib/letscert/certificate.rb
|
72
70
|
- lib/letscert/io_plugin.rb
|
73
71
|
- lib/letscert/loggable.rb
|
74
72
|
- lib/letscert/runner.rb
|
75
73
|
- spec/account_key.json
|
74
|
+
- spec/cert.der
|
75
|
+
- spec/cert.pem
|
76
|
+
- spec/chain.pem
|
77
|
+
- spec/fullchain.pem
|
76
78
|
- spec/io_plugin_spec.rb
|
77
|
-
- spec/
|
79
|
+
- spec/key.der
|
80
|
+
- spec/key.pem
|
78
81
|
- spec/loggable_spec.rb
|
79
|
-
- spec/loggable_spec.rb~
|
80
82
|
- spec/spec_helper.rb
|
81
|
-
- spec/spec_helper.rb~
|
82
83
|
- spec/test.json
|
83
84
|
- tasks/gem.rake
|
84
|
-
- tasks/gem.rake~
|
85
85
|
- tasks/spec.rake
|
86
86
|
- tasks/yard.rake
|
87
87
|
homepage: https://github.com/sdaubert/letscert
|
data/bin/letscert~
DELETED
data/lib/letscert.rb~
DELETED
data/spec/io_plugin_spec.rb~
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require_relative 'spec_helper'
|
2
|
-
|
3
|
-
module LetsCert
|
4
|
-
|
5
|
-
describe IOPlugin do
|
6
|
-
|
7
|
-
it '.empty_data always returns the same hash' do
|
8
|
-
hsh = IOPlugin.empty_data
|
9
|
-
|
10
|
-
expect(hsh.keys.size).to eq(4)
|
11
|
-
expect(hsh.keys).to include(:account_key)
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
data/spec/loggable_spec.rb~
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require_relative 'spec_helper'
|
data/spec/spec_helper.rb~
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
data/tasks/gem.rake~
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'rubygems/package_task'
|
2
|
-
require_relative '../lib/letscert.rb'
|
3
|
-
|
4
|
-
spec = Gem::Specification.new do |s|
|
5
|
-
s.name = 'letscert'
|
6
|
-
s.version = LetsCert::VERSION
|
7
|
-
s.summary = "letscert, a simple Let's Encrypt client"
|
8
|
-
s.description = <<-EOF
|
9
|
-
letscert is a simple Let's Encrypt client written in Ruby. It aims at be as clean as
|
10
|
-
simp_le.
|
11
|
-
EOF
|
12
|
-
|
13
|
-
s.authors << 'Sylvain Daubert'
|
14
|
-
s.email = 'sylvain.daubert@laposte.net'
|
15
|
-
s.homepage = 'https://github.com/sdaubert/letscert'
|
16
|
-
|
17
|
-
files = Dir['{spec,lib,bin,tasks}/**/*']
|
18
|
-
files += ['README.md', 'MIT-LICENSE', 'Rakefile']
|
19
|
-
# For now, device is not in gem.
|
20
|
-
s.files = files
|
21
|
-
s.executables = ['letscert']
|
22
|
-
|
23
|
-
s.add_dependency 'acme-client', '~>0.2.4'
|
24
|
-
s.add_dependency 'yard', '~>0.8.7'
|
25
|
-
|
26
|
-
#s.add_development_dependency 'rspec', '~>2.14.0'
|
27
|
-
end
|
28
|
-
|
29
|
-
|
30
|
-
Gem::PackageTask.new(spec) do |pkg|
|
31
|
-
pkg.need_zip = true
|
32
|
-
pkg.need_tar = true
|
33
|
-
end
|
34
|
-
~
|