letscert 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/.gitignore +22 -0
- data/Gemfile +3 -0
- data/README.md +21 -4
- data/Rakefile +11 -2
- data/certs/gem-public_cert.pem +22 -0
- data/{tasks/gem.rake → letscert.gemspec} +11 -13
- data/lib/letscert/certificate.rb +15 -4
- data/lib/letscert/io_plugin.rb +1 -0
- data/lib/letscert/loggable.rb +3 -2
- data/lib/letscert/runner.rb +4 -2
- data/lib/letscert/version.rb +6 -0
- data/lib/letscert.rb +1 -4
- data.tar.gz.sig +1 -0
- metadata +65 -25
- metadata.gz.sig +2 -0
- data/spec/account_key.json +0 -1
- data/spec/cert.der +0 -0
- data/spec/cert.pem +0 -32
- data/spec/certificate_spec.rb +0 -185
- data/spec/chain.pem +0 -27
- data/spec/fullchain.pem +0 -59
- data/spec/io_plugin_spec.rb +0 -387
- data/spec/key.der +0 -0
- data/spec/key.pem +0 -15
- data/spec/loggable_spec.rb +0 -32
- data/spec/runner_spec.rb +0 -127
- data/spec/spec_helper.rb +0 -28
- data/spec/test.json +0 -1
- data/tasks/spec.rake +0 -3
- data/tasks/yard.rake +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf207714b90b6a7da996b80ce11c034408eedb01
|
4
|
+
data.tar.gz: 037d0a835588236f7046b6ca09a0936fe34473ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2adc8ccf14ab988d0c4debd191b664a6793670b4f3218e477285e8907466c93f8689f514da0025c4d0113a0fcf00fea78a59dc4ba0345dc22fd60a1e5e62bed
|
7
|
+
data.tar.gz: 4e84d8553a12638d26a7444cb9760a440ae468ffa870ba3078d1678f7de39f7828224a5ad8694b4226500d292e79b3beb390a1ac90e2e13ea3f977d197d0ba94
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*~
|
2
|
+
*.gem
|
3
|
+
*.rbc
|
4
|
+
/.config
|
5
|
+
/coverage/
|
6
|
+
/InstalledFiles
|
7
|
+
/pkg/
|
8
|
+
/spec/reports/
|
9
|
+
/spec/examples.txt
|
10
|
+
/tmp/
|
11
|
+
Gemfile.lock
|
12
|
+
|
13
|
+
## Documentation cache and generated files:
|
14
|
+
/.yardoc/
|
15
|
+
/_yardoc/
|
16
|
+
/doc/
|
17
|
+
/rdoc/
|
18
|
+
|
19
|
+
## Environment normalization:
|
20
|
+
/.bundle/
|
21
|
+
/vendor/bundle
|
22
|
+
/lib/bundler/man/
|
data/Gemfile
ADDED
data/README.md
CHANGED
@@ -13,14 +13,16 @@ in Ruby.
|
|
13
13
|
With full chain support (`fullchain.pem` file will contain all certificates):
|
14
14
|
|
15
15
|
```bash
|
16
|
-
letscert -d example.com:/var/www/example.com/html --email my.name@domain.tld
|
16
|
+
letscert -d example.com:/var/www/example.com/html --email my.name@domain.tld \
|
17
|
+
-f account_key.json -f key.pem -f fullchain.pem
|
17
18
|
```
|
18
19
|
|
19
20
|
else (certificate for example.com is in `cert.pem` file, rest of certification chain
|
20
21
|
is in `chain.pem`):
|
21
22
|
|
22
23
|
```bash
|
23
|
-
letscert -d example.com:/var/www/example.com/html --email my.name@domain.tld
|
24
|
+
letscert -d example.com:/var/www/example.com/html --email my.name@domain.tld \
|
25
|
+
-f account_key.json -f key.pem -f cert.pem -f chain.pem
|
24
26
|
```
|
25
27
|
|
26
28
|
Commands are the sames for certificate renewal.
|
@@ -30,7 +32,8 @@ Commands are the sames for certificate renewal.
|
|
30
32
|
Generate a single certificate for `example.com` and `www.example.com`:
|
31
33
|
|
32
34
|
```bash
|
33
|
-
letscert -d example.com -d www.example.com --default-root /var/www/html
|
35
|
+
letscert -d example.com -d www.example.com --default-root /var/www/html \
|
36
|
+
--email my.name@domain.tld -f account_key.json -f key.pem -f fullchain.pem
|
34
37
|
```
|
35
38
|
|
36
39
|
Command is the same for certificate renewal.
|
@@ -40,7 +43,8 @@ Command is the same for certificate renewal.
|
|
40
43
|
In this example, `xx` is 10:
|
41
44
|
|
42
45
|
```bash
|
43
|
-
letscert -d example.com:/var/www/example.com/html --email my.name@domain.tld
|
46
|
+
letscert -d example.com:/var/www/example.com/html --email my.name@domain.tld \
|
47
|
+
-f account_key.json -f key.pem -f cert.pem -f chain.pem --valid-min 10d
|
44
48
|
```
|
45
49
|
|
46
50
|
Valid time may also be set as number of hours (`h` suffix), minutes (`m` suffix) or
|
@@ -69,3 +73,16 @@ letscert -d example.com:/var/www/example.com/html --email my.name@domain.tld --r
|
|
69
73
|
* 0 if certificate data was created or updated;
|
70
74
|
* 1 if renewal not necessary;
|
71
75
|
* 2 in case of errors.
|
76
|
+
|
77
|
+
# Installation
|
78
|
+
`letscert` is cryptographically signed. To be sure the gem you install hasn’t been tampered:
|
79
|
+
* add my public key as a trusted certificate:
|
80
|
+
```
|
81
|
+
gem cert --add <(curl -Ls https://raw.github.com/metricfu/metric_fu/master/certs/gem-public_cert.pem)
|
82
|
+
```
|
83
|
+
* install letscert gem with a policy:
|
84
|
+
```
|
85
|
+
gem install letscert -P MediumSecurity
|
86
|
+
```
|
87
|
+
|
88
|
+
The MediumSecurity trust profile will verify signed gems, but allow the installation of unsigned dependencies. This is necessary because not all of letcert’s dependencies are signed, so we cannot use HighSecurity.
|
data/Rakefile
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require 'yard'
|
4
|
+
|
5
|
+
RSpec::Core::RakeTask.new
|
6
|
+
|
7
|
+
YARD::Rake::YardocTask.new do |t|
|
8
|
+
t.options = ['--no-private']
|
9
|
+
t.files = ['lib/**/*.rb', '-', 'LICENSE']
|
3
10
|
end
|
11
|
+
|
12
|
+
task :default => :spec
|
@@ -0,0 +1,22 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRgwFgYDVQQDDA9zeWx2
|
3
|
+
YWluLmRhdWJlcnQxFzAVBgoJkiaJk/IsZAEZFgdsYXBvc3RlMRMwEQYKCZImiZPy
|
4
|
+
LGQBGRYDbmV0MB4XDTE2MDgxNzE1NTgzMloXDTE3MDgxNzE1NTgzMlowSDEYMBYG
|
5
|
+
A1UEAwwPc3lsdmFpbi5kYXViZXJ0MRcwFQYKCZImiZPyLGQBGRYHbGFwb3N0ZTET
|
6
|
+
MBEGCgmSJomT8ixkARkWA25ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
7
|
+
ggEBAKedOs/t5dByFo40hIuWo+NeWYZ5RBmLXladkBAZixVYKFFN1GFTTHoipXYM
|
8
|
+
rGY+bJvE8uEmGeLO+GUrPTWMuT1j5xH89KwJZR9u4OUhPkbGi59nIxu+ORsIuLOl
|
9
|
+
E0Su+CF+R4I1nRNBGyyikXs4nZ/jC1xdeSZSWctbeZzpy+XXdDns2CzSABG0LjHb
|
10
|
+
puipKI1CJKX05A0VPstWyzKeeDMyo2DYA1DaZ4gdhps4qHK6lD1NYDgL9aCYGFt6
|
11
|
+
4vQdjgYYd3kvdxaB3GBQtr3CWWnMXRVTA5B2UgE6xQOgAoIAuv9UiNk6q8vv2Nb5
|
12
|
+
E6dI9qaDeXFeRQ+/woBzUi53ZXsCAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
|
13
|
+
DwQEAwIEsDAdBgNVHQ4EFgQUCGw0Gvfeq8gaQ3ZGv1tVqaI/8TYwJgYDVR0RBB8w
|
14
|
+
HYEbc3lsdmFpbi5kYXViZXJ0QGxhcG9zdGUubmV0MCYGA1UdEgQfMB2BG3N5bHZh
|
15
|
+
aW4uZGF1YmVydEBsYXBvc3RlLm5ldDANBgkqhkiG9w0BAQUFAAOCAQEAAJWbF5KM
|
16
|
+
qV+dlc5/9Rb3ZkcvoCbt++gTxn4kOYM2/d77gRK5XoxJCHss6yGiafiYJ7qvahOi
|
17
|
+
VCpBS+6kfYI61OVqeqhZOSu9C+IK/ENgth6fwA5BI32rRo2HqBNz1EVNMbbvoXBH
|
18
|
+
wRB1VGo9x/s/gtmSyW5h+WmiwkLHYf0CGYCvncGYRH31JVWLVzJrx37P+o6jAVwI
|
19
|
+
5+I+dhzJKDQfMyC6ijPieuqBUgUPafTNEaWzU04UBSlCgGO8a4EBLLjvA61gtE4X
|
20
|
+
dMi8WSKt03lfzyxIqZseBwVYYn+XMlzCcJLXCUgZXHcBRRRDH5wGDqOqXjL25b2O
|
21
|
+
6m3JJngqkCFrOw==
|
22
|
+
-----END CERTIFICATE-----
|
@@ -1,7 +1,8 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'letscert/version'
|
3
4
|
|
4
|
-
|
5
|
+
Gem::Specification.new do |s|
|
5
6
|
s.name = 'letscert'
|
6
7
|
s.version = LetsCert::VERSION
|
7
8
|
s.license = 'MIT'
|
@@ -15,25 +16,22 @@ EOF
|
|
15
16
|
s.email = 'sylvain.daubert@laposte.net'
|
16
17
|
s.homepage = 'https://github.com/sdaubert/letscert'
|
17
18
|
|
18
|
-
files =
|
19
|
-
files += ['README.md', 'LICENSE', 'Rakefile']
|
20
|
-
# For now, device is not in gem.
|
21
|
-
s.files = files
|
19
|
+
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
22
20
|
s.executables = ['letscert']
|
21
|
+
s.require_paths = ["lib"]
|
23
22
|
|
24
23
|
s.required_ruby_version = '>= 2.1.0'
|
25
24
|
|
26
25
|
s.add_dependency 'acme-client', '~>0.4.0'
|
27
26
|
s.add_dependency 'json', '~>1.8.3'
|
28
27
|
|
28
|
+
s.add_development_dependency "bundler", "~> 1.12"
|
29
|
+
s.add_development_dependency "rake", "~> 10.0"
|
29
30
|
s.add_development_dependency 'rspec', '~>3.4'
|
30
31
|
s.add_development_dependency 'vcr', '~>3.0'
|
31
|
-
s.add_development_dependency 'faraday', '~>0.9'
|
32
32
|
s.add_development_dependency 'yard', '~>0.8'
|
33
|
-
|
34
|
-
|
33
|
+
s.add_development_dependency 'simplecov', '~>0.12'
|
35
34
|
|
36
|
-
|
37
|
-
|
38
|
-
pkg.need_tar = true
|
35
|
+
s.cert_chain = [File.join(__dir__, 'certs/gem-public_cert.pem')]
|
36
|
+
s.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
|
39
37
|
end
|
data/lib/letscert/certificate.rb
CHANGED
@@ -31,6 +31,9 @@ module LetsCert
|
|
31
31
|
|
32
32
|
# @return [OpenSSL::X509::Certificate,nil]
|
33
33
|
attr_reader :cert
|
34
|
+
# Certification chain. Only set by {#get}.
|
35
|
+
# @return [Array<OpenSSL::X509::Certificate>]
|
36
|
+
attr_reader :chain
|
34
37
|
# @return [Acme::Client,nil]
|
35
38
|
attr_reader :client
|
36
39
|
|
@@ -38,6 +41,7 @@ module LetsCert
|
|
38
41
|
# @param [OpenSSL::X509::Certificate,nil] cert
|
39
42
|
def initialize(cert)
|
40
43
|
@cert = cert
|
44
|
+
@chain = []
|
41
45
|
end
|
42
46
|
|
43
47
|
# Get a new certificate, or renew an existing one
|
@@ -57,6 +61,8 @@ module LetsCert
|
|
57
61
|
# values
|
58
62
|
# @option options [String] :server ACME servel URL
|
59
63
|
# @return [void]
|
64
|
+
# @raise [Acme::Client::Error] error in protocol ACME with server
|
65
|
+
# @raise [Error] issue with domain name, challenge fails,...
|
60
66
|
def get(account_key, key, options)
|
61
67
|
logger.info {"create key/cert/chain..." }
|
62
68
|
check_roots(options[:roots])
|
@@ -75,12 +81,15 @@ module LetsCert
|
|
75
81
|
|
76
82
|
csr = Acme::Client::CertificateRequest.new(names: options[:roots].keys,
|
77
83
|
private_key: key)
|
78
|
-
|
84
|
+
acme_cert = client.new_certificate(csr)
|
85
|
+
@cert = acme_cert.x509
|
86
|
+
@chain = acme_cert.x509_chain
|
79
87
|
|
88
|
+
options[:files] ||= []
|
80
89
|
options[:files].each do |plugname|
|
81
90
|
IOPlugin.registered[plugname].save(account_key: client.private_key,
|
82
|
-
key: key, cert: cert
|
83
|
-
chain:
|
91
|
+
key: key, cert: @cert,
|
92
|
+
chain: @chain)
|
84
93
|
end
|
85
94
|
end
|
86
95
|
|
@@ -91,6 +100,7 @@ module LetsCert
|
|
91
100
|
# @option options [String] :email e-mail used as ACME account
|
92
101
|
# @option options [String] :server ACME servel URL
|
93
102
|
# @return [Boolean]
|
103
|
+
# @raise [Error] no certificate to revole.
|
94
104
|
def revoke(account_key, options={})
|
95
105
|
if @cert.nil?
|
96
106
|
raise Error, 'no certification data to revoke'
|
@@ -115,7 +125,8 @@ module LetsCert
|
|
115
125
|
# Check if certificate is still valid for at least +valid_min+ seconds.
|
116
126
|
# Also checks that +domains+ are certified by certificate.
|
117
127
|
# @param [Array<String>] domains list of certificate domains
|
118
|
-
# @param [Integer] valid_min
|
128
|
+
# @param [Integer] valid_min minimum number of seconds of validity under which
|
129
|
+
# a renewal is necessary.
|
119
130
|
# @return [Boolean]
|
120
131
|
def valid?(domains, valid_min=0)
|
121
132
|
if @cert.nil?
|
data/lib/letscert/io_plugin.rb
CHANGED
data/lib/letscert/loggable.rb
CHANGED
@@ -40,8 +40,9 @@ module LetsCert
|
|
40
40
|
# @author Sylvain Daubert
|
41
41
|
module ClassMethods
|
42
42
|
|
43
|
-
# @private hook called a subclass is created.
|
44
|
-
# Take care of all subclasses to later properly set @logger class instance
|
43
|
+
# @private hook called when a subclass is created.
|
44
|
+
# Take care of all subclasses to later properly set @logger class instance
|
45
|
+
# variable.
|
45
46
|
# @param [Class] subclass
|
46
47
|
# @return [void]
|
47
48
|
def inherited(subclass)
|
data/lib/letscert/runner.rb
CHANGED
@@ -34,6 +34,8 @@ module LetsCert
|
|
34
34
|
# Get options
|
35
35
|
# @return [Hash]
|
36
36
|
attr_reader :options
|
37
|
+
# @return [Logger]
|
38
|
+
attr_accessor :logger
|
37
39
|
|
38
40
|
# Custom logger formatter
|
39
41
|
class LoggerFormatter < Logger::Formatter
|
@@ -137,7 +139,7 @@ module LetsCert
|
|
137
139
|
server: 'https://acme-v01.api.letsencrypt.org/directory',
|
138
140
|
}
|
139
141
|
|
140
|
-
@logger = Logger.new(
|
142
|
+
@logger = Logger.new($stdout)
|
141
143
|
@logger.formatter = LoggerFormatter.new
|
142
144
|
end
|
143
145
|
|
@@ -206,7 +208,7 @@ module LetsCert
|
|
206
208
|
msg = ex.message
|
207
209
|
msg = "[Acme] #{msg}" if ex.is_a?(Acme::Client::Error)
|
208
210
|
@logger.error msg
|
209
|
-
puts "Error: #{msg}"
|
211
|
+
$stderr.puts "Error: #{msg}"
|
210
212
|
RETURN_ERROR
|
211
213
|
end
|
212
214
|
end
|
data/lib/letscert.rb
CHANGED
@@ -23,13 +23,10 @@
|
|
23
23
|
# Namespace for all letcert's classes.
|
24
24
|
module LetsCert
|
25
25
|
|
26
|
-
# Letscert version number
|
27
|
-
VERSION = '0.4.0'
|
28
|
-
|
29
|
-
|
30
26
|
# Base error class
|
31
27
|
class Error < StandardError; end
|
32
28
|
|
33
29
|
end
|
34
30
|
|
31
|
+
require_relative 'letscert/version'
|
35
32
|
require_relative 'letscert/runner'
|
data.tar.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
��6�N���cuK{���d�}]~�ۼ���:#�W�4Y�TP�_���:��̬4���V{� 5�'�Ug�u��W��������b[h7�u#[l,�qybaXԵ�S�VI1�³F�a�Y�C
|
metadata
CHANGED
@@ -1,14 +1,37 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: letscert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvain Daubert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRgwFgYDVQQDDA9zeWx2
|
14
|
+
YWluLmRhdWJlcnQxFzAVBgoJkiaJk/IsZAEZFgdsYXBvc3RlMRMwEQYKCZImiZPy
|
15
|
+
LGQBGRYDbmV0MB4XDTE2MDgxNzE1NTgzMloXDTE3MDgxNzE1NTgzMlowSDEYMBYG
|
16
|
+
A1UEAwwPc3lsdmFpbi5kYXViZXJ0MRcwFQYKCZImiZPyLGQBGRYHbGFwb3N0ZTET
|
17
|
+
MBEGCgmSJomT8ixkARkWA25ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
18
|
+
ggEBAKedOs/t5dByFo40hIuWo+NeWYZ5RBmLXladkBAZixVYKFFN1GFTTHoipXYM
|
19
|
+
rGY+bJvE8uEmGeLO+GUrPTWMuT1j5xH89KwJZR9u4OUhPkbGi59nIxu+ORsIuLOl
|
20
|
+
E0Su+CF+R4I1nRNBGyyikXs4nZ/jC1xdeSZSWctbeZzpy+XXdDns2CzSABG0LjHb
|
21
|
+
puipKI1CJKX05A0VPstWyzKeeDMyo2DYA1DaZ4gdhps4qHK6lD1NYDgL9aCYGFt6
|
22
|
+
4vQdjgYYd3kvdxaB3GBQtr3CWWnMXRVTA5B2UgE6xQOgAoIAuv9UiNk6q8vv2Nb5
|
23
|
+
E6dI9qaDeXFeRQ+/woBzUi53ZXsCAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
|
24
|
+
DwQEAwIEsDAdBgNVHQ4EFgQUCGw0Gvfeq8gaQ3ZGv1tVqaI/8TYwJgYDVR0RBB8w
|
25
|
+
HYEbc3lsdmFpbi5kYXViZXJ0QGxhcG9zdGUubmV0MCYGA1UdEgQfMB2BG3N5bHZh
|
26
|
+
aW4uZGF1YmVydEBsYXBvc3RlLm5ldDANBgkqhkiG9w0BAQUFAAOCAQEAAJWbF5KM
|
27
|
+
qV+dlc5/9Rb3ZkcvoCbt++gTxn4kOYM2/d77gRK5XoxJCHss6yGiafiYJ7qvahOi
|
28
|
+
VCpBS+6kfYI61OVqeqhZOSu9C+IK/ENgth6fwA5BI32rRo2HqBNz1EVNMbbvoXBH
|
29
|
+
wRB1VGo9x/s/gtmSyW5h+WmiwkLHYf0CGYCvncGYRH31JVWLVzJrx37P+o6jAVwI
|
30
|
+
5+I+dhzJKDQfMyC6ijPieuqBUgUPafTNEaWzU04UBSlCgGO8a4EBLLjvA61gtE4X
|
31
|
+
dMi8WSKt03lfzyxIqZseBwVYYn+XMlzCcJLXCUgZXHcBRRRDH5wGDqOqXjL25b2O
|
32
|
+
6m3JJngqkCFrOw==
|
33
|
+
-----END CERTIFICATE-----
|
34
|
+
date: 2016-08-29 00:00:00.000000000 Z
|
12
35
|
dependencies:
|
13
36
|
- !ruby/object:Gem::Dependency
|
14
37
|
name: acme-client
|
@@ -38,6 +61,34 @@ dependencies:
|
|
38
61
|
- - "~>"
|
39
62
|
- !ruby/object:Gem::Version
|
40
63
|
version: 1.8.3
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: bundler
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - "~>"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '1.12'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.12'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rake
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - "~>"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '10.0'
|
85
|
+
type: :development
|
86
|
+
prerelease: false
|
87
|
+
version_requirements: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '10.0'
|
41
92
|
- !ruby/object:Gem::Dependency
|
42
93
|
name: rspec
|
43
94
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,33 +118,33 @@ dependencies:
|
|
67
118
|
- !ruby/object:Gem::Version
|
68
119
|
version: '3.0'
|
69
120
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
121
|
+
name: yard
|
71
122
|
requirement: !ruby/object:Gem::Requirement
|
72
123
|
requirements:
|
73
124
|
- - "~>"
|
74
125
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0.
|
126
|
+
version: '0.8'
|
76
127
|
type: :development
|
77
128
|
prerelease: false
|
78
129
|
version_requirements: !ruby/object:Gem::Requirement
|
79
130
|
requirements:
|
80
131
|
- - "~>"
|
81
132
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0.
|
133
|
+
version: '0.8'
|
83
134
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
135
|
+
name: simplecov
|
85
136
|
requirement: !ruby/object:Gem::Requirement
|
86
137
|
requirements:
|
87
138
|
- - "~>"
|
88
139
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0.
|
140
|
+
version: '0.12'
|
90
141
|
type: :development
|
91
142
|
prerelease: false
|
92
143
|
version_requirements: !ruby/object:Gem::Requirement
|
93
144
|
requirements:
|
94
145
|
- - "~>"
|
95
146
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0.
|
147
|
+
version: '0.12'
|
97
148
|
description: |
|
98
149
|
letscert is a simple Let's Encrypt client written in Ruby. It aims at be as clean as
|
99
150
|
simp_le.
|
@@ -103,31 +154,20 @@ executables:
|
|
103
154
|
extensions: []
|
104
155
|
extra_rdoc_files: []
|
105
156
|
files:
|
157
|
+
- ".gitignore"
|
158
|
+
- Gemfile
|
106
159
|
- LICENSE
|
107
160
|
- README.md
|
108
161
|
- Rakefile
|
109
162
|
- bin/letscert
|
163
|
+
- certs/gem-public_cert.pem
|
164
|
+
- letscert.gemspec
|
110
165
|
- lib/letscert.rb
|
111
166
|
- lib/letscert/certificate.rb
|
112
167
|
- lib/letscert/io_plugin.rb
|
113
168
|
- lib/letscert/loggable.rb
|
114
169
|
- lib/letscert/runner.rb
|
115
|
-
-
|
116
|
-
- spec/cert.der
|
117
|
-
- spec/cert.pem
|
118
|
-
- spec/certificate_spec.rb
|
119
|
-
- spec/chain.pem
|
120
|
-
- spec/fullchain.pem
|
121
|
-
- spec/io_plugin_spec.rb
|
122
|
-
- spec/key.der
|
123
|
-
- spec/key.pem
|
124
|
-
- spec/loggable_spec.rb
|
125
|
-
- spec/runner_spec.rb
|
126
|
-
- spec/spec_helper.rb
|
127
|
-
- spec/test.json
|
128
|
-
- tasks/gem.rake
|
129
|
-
- tasks/spec.rake
|
130
|
-
- tasks/yard.rake
|
170
|
+
- lib/letscert/version.rb
|
131
171
|
homepage: https://github.com/sdaubert/letscert
|
132
172
|
licenses:
|
133
173
|
- MIT
|
metadata.gz.sig
ADDED
data/spec/account_key.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"kty":"RSA","e":"AQAB","n":"ugv1o2Fg5N-RBScXrLpRRoPgDjFgHcM_BD2fHZYzXJ4k1AnspAgS-soaWuoN0WK4mwRsSGwF7cemLEA1zZiCpc6Q3WUxLDsM8oF8P_S0euAEhe8FQPON3vtNqYth2yPqAQ4-me43mZyXS94yzTrCVjowlnZsdaA54uUW0AxOD_0","d":"Qo-6zzwspVXTFYvZ7YMvRtIxnAJQR_Wtmv_M6JHvSEiQFoiCcGEvISijazlnvizarSNU9kgnit2t9xD17tuMidbqdPC0x0mkJ6BszB7lau6Nzfz6ACSqtH8eKmkGDBJTnRqzg45Z6-3-gQ9vlmvc3T029Gv7xfA-XOt_cNgFnGE","p":"7nhrSRbf6FZ6LA2FKzcdFOTSI7UlgEwWsrSC_7pyzYyXJC44crlWUDxxJJXNeC9OyOEJOXlgn-0hShAWkl9-CQ","q":"x7kFmj6GYbh0SaLeg9CFhnY-y_UMO9wFxu0NLi2JgL31gvIDrKGJYiSZ3xESi6FwpmHX_vbtFXpZXBbvMy0_VQ"}
|
data/spec/cert.der
DELETED
Binary file
|
data/spec/cert.pem
DELETED
@@ -1,32 +0,0 @@
|
|
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-----
|