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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2aaf92c6fdc9f696efb73eae2d3a86577b2dd37e
4
- data.tar.gz: ec9885ad548b9ff43a645a2990eff2969326d646
3
+ metadata.gz: bf207714b90b6a7da996b80ce11c034408eedb01
4
+ data.tar.gz: 037d0a835588236f7046b6ca09a0936fe34473ef
5
5
  SHA512:
6
- metadata.gz: 298d19dda74b12aa3b44d67d80ecbf74f26ed9d68609eb8efe6b82caa5fa7f34e3a48460949350b80c0d4abee890d6b13f0fdf32a89445d4cd25cdbe55c79379
7
- data.tar.gz: f2e907cb8c7da052030e5b743419839f45623a2c612e45f0d2e5e042e5ffd2f32480711d15de6bcce09a1717aae1026b30ea1a96ca431b3da307b35621c24e31
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
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
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 -f account_key.json -f key.pem -f fullchain.pem
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 -f account_key.json -f key.pem -f cert.pem -f chain.pem
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 --email my.name@domain.tld -f account_key.json -f key.pem -f fullchain.pem
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 -f account_key.json -f key.pem -f cert.pem -f chain.pem --valid-min 10d
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
- Dir.glob('tasks/*.rake').each do |file|
2
- load file
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
- require 'rubygems/package_task'
2
- require_relative '../lib/letscert.rb'
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'letscert/version'
3
4
 
4
- spec = Gem::Specification.new do |s|
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 = Dir['{spec,lib,bin,tasks}/**/*']
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
- end
34
-
33
+ s.add_development_dependency 'simplecov', '~>0.12'
35
34
 
36
- Gem::PackageTask.new(spec) do |pkg|
37
- pkg.need_zip = true
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
@@ -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
- cert = client.new_certificate(csr)
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.x509,
83
- chain: cert.x509_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?
@@ -105,6 +105,7 @@ module LetsCert
105
105
  end
106
106
 
107
107
  # @abstract
108
+ # @param [String] content
108
109
  # @return [Hash]
109
110
  def load_from_content(content)
110
111
  raise NotImplementedError
@@ -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 variable.
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)
@@ -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(STDOUT)
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
@@ -0,0 +1,6 @@
1
+ module LetsCert
2
+
3
+ # Letscert version number
4
+ VERSION = '0.4.1'
5
+
6
+ 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.0
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
- date: 2016-08-14 00:00:00.000000000 Z
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: faraday
121
+ name: yard
71
122
  requirement: !ruby/object:Gem::Requirement
72
123
  requirements:
73
124
  - - "~>"
74
125
  - !ruby/object:Gem::Version
75
- version: '0.9'
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.9'
133
+ version: '0.8'
83
134
  - !ruby/object:Gem::Dependency
84
- name: yard
135
+ name: simplecov
85
136
  requirement: !ruby/object:Gem::Requirement
86
137
  requirements:
87
138
  - - "~>"
88
139
  - !ruby/object:Gem::Version
89
- version: '0.8'
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.8'
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
- - spec/account_key.json
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
@@ -0,0 +1,2 @@
1
+ ��QM���D:��g��#!7�j�][�v>[�sVg$�=�0r�M�������̍�2vvO�51$��4B�iCw���G�V-�0���oE#^>�٧ϰ%�>7�O�=�oM��%ؒ��
2
+ �;�,ۼ���@E#�������ֵ��1�"Y(j֠��8�6�� ���PN�|_v�jAԼ��e�Ҿ2T]�p�JJӲd0^��H>Ͼ���L�'�th>M��m濨�ġL���T�������w+�:ٷU����
@@ -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-----