r509 0.10.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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.mdown +2 -2
- data/Rakefile +2 -3
- data/bin/r509 +77 -80
- data/bin/r509-parse +4 -4
- data/doc/R509.html +60 -60
- data/doc/R509/ASN1.html +158 -48
- data/doc/R509/ASN1/GeneralName.html +157 -154
- data/doc/R509/ASN1/GeneralNames.html +246 -237
- data/doc/R509/CRL.html +41 -39
- data/doc/R509/CRL/Administrator.html +105 -100
- data/doc/R509/CRL/FileReaderWriter.html +146 -98
- data/doc/R509/CRL/ReaderWriter.html +57 -54
- data/doc/R509/CRL/SQLiteReaderWriter.html +727 -0
- data/doc/R509/CRL/SignedList.html +83 -80
- data/doc/R509/CSR.html +184 -162
- data/doc/R509/Cert.html +271 -269
- data/doc/R509/Cert/Extensions.html +62 -63
- data/doc/R509/Cert/Extensions/AuthorityInfoAccess.html +138 -108
- data/doc/R509/Cert/Extensions/AuthorityKeyIdentifier.html +100 -84
- data/doc/R509/Cert/Extensions/BasicConstraints.html +89 -88
- data/doc/R509/Cert/Extensions/CRLDistributionPoints.html +87 -83
- data/doc/R509/Cert/Extensions/CertificatePolicies.html +78 -76
- data/doc/R509/Cert/Extensions/ExtendedKeyUsage.html +128 -125
- data/doc/R509/Cert/Extensions/GeneralNamesMixin.html +83 -78
- data/doc/R509/Cert/Extensions/InhibitAnyPolicy.html +69 -67
- data/doc/R509/Cert/Extensions/KeyUsage.html +138 -135
- data/doc/R509/Cert/Extensions/NameConstraints.html +82 -81
- data/doc/R509/Cert/Extensions/NoticeReference.html +59 -56
- data/doc/R509/Cert/Extensions/OCSPNoCheck.html +70 -69
- data/doc/R509/Cert/Extensions/PolicyConstraints.html +71 -69
- data/doc/R509/Cert/Extensions/PolicyInformation.html +63 -60
- data/doc/R509/Cert/Extensions/PolicyQualifiers.html +60 -57
- data/doc/R509/Cert/Extensions/SubjectAlternativeName.html +91 -87
- data/doc/R509/Cert/Extensions/SubjectKeyIdentifier.html +72 -71
- data/doc/R509/Cert/Extensions/UserNotice.html +60 -57
- data/doc/R509/Cert/Extensions/ValidationMixin.html +43 -40
- data/doc/R509/CertificateAuthority.html +39 -37
- data/doc/R509/CertificateAuthority/OptionsBuilder.html +58 -55
- data/doc/R509/CertificateAuthority/Signer.html +277 -60
- data/doc/R509/Config.html +40 -38
- data/doc/R509/Config/CAConfig.html +255 -188
- data/doc/R509/Config/CAConfigPool.html +64 -61
- data/doc/R509/Config/CertProfile.html +119 -116
- data/doc/R509/Config/SubjectItemPolicy.html +94 -93
- data/doc/R509/Engine.html +60 -56
- data/doc/R509/Helpers.html +99 -96
- data/doc/R509/MessageDigest.html +69 -68
- data/doc/R509/NameSanitizer.html +51 -48
- data/doc/R509/OCSP.html +39 -37
- data/doc/R509/OCSP/Request.html +39 -37
- data/doc/R509/OCSP/Request/Nonce.html +67 -67
- data/doc/R509/OCSP/Response.html +93 -90
- data/doc/R509/OIDMapper.html +48 -46
- data/doc/R509/PrivateKey.html +170 -169
- data/doc/R509/R509Error.html +45 -42
- data/doc/R509/SPKI.html +99 -89
- data/doc/R509/Subject.html +86 -83
- data/doc/R509/Validity.html +57 -57
- data/doc/R509/Validity/Checker.html +63 -93
- data/doc/R509/Validity/DefaultChecker.html +58 -55
- data/doc/R509/Validity/DefaultWriter.html +62 -59
- data/doc/R509/Validity/Status.html +77 -74
- data/doc/R509/Validity/Writer.html +75 -123
- data/doc/_index.html +37 -31
- data/doc/class_list.html +25 -27
- data/doc/css/full_list.css +32 -31
- data/doc/css/style.css +221 -78
- data/doc/file.CONTRIBUTING.html +29 -30
- data/doc/file.LICENSE.html +29 -30
- data/doc/file.README.html +31 -32
- data/doc/file.YAML.html +33 -34
- data/doc/file.r509.html +39 -48
- data/doc/file_list.html +39 -30
- data/doc/frames.html +10 -21
- data/doc/index.html +31 -32
- data/doc/js/app.js +100 -71
- data/doc/js/full_list.js +168 -130
- data/doc/method_list.html +1788 -1119
- data/doc/top-level-namespace.html +45 -49
- data/lib/r509.rb +21 -7
- data/lib/r509/asn1.rb +45 -32
- data/lib/r509/cert.rb +45 -51
- data/lib/r509/cert/extensions/authority_info_access.rb +49 -23
- data/lib/r509/cert/extensions/authority_key_identifier.rb +16 -11
- data/lib/r509/cert/extensions/base.rb +22 -23
- data/lib/r509/cert/extensions/basic_constraints.rb +11 -12
- data/lib/r509/cert/extensions/certificate_policies.rb +26 -26
- data/lib/r509/cert/extensions/crl_distribution_points.rb +5 -7
- data/lib/r509/cert/extensions/extended_key_usage.rb +5 -5
- data/lib/r509/cert/extensions/inhibit_any_policy.rb +4 -3
- data/lib/r509/cert/extensions/key_usage.rb +5 -5
- data/lib/r509/cert/extensions/name_constraints.rb +16 -16
- data/lib/r509/cert/extensions/ocsp_no_check.rb +3 -3
- data/lib/r509/cert/extensions/policy_constraints.rb +8 -8
- data/lib/r509/cert/extensions/subject_alternative_name.rb +5 -4
- data/lib/r509/cert/extensions/subject_key_identifier.rb +5 -5
- data/lib/r509/cert/extensions/validation_mixin.rb +11 -10
- data/lib/r509/certificate_authority/options_builder.rb +19 -21
- data/lib/r509/certificate_authority/signer.rb +26 -27
- data/lib/r509/config.rb +1 -0
- data/lib/r509/config/ca_config.rb +70 -75
- data/lib/r509/config/cert_profile.rb +9 -8
- data/lib/r509/config/subject_item_policy.rb +25 -28
- data/lib/r509/crl/administrator.rb +19 -20
- data/lib/r509/crl/reader_writer.rb +10 -8
- data/lib/r509/crl/signed_list.rb +4 -4
- data/lib/r509/crl/sqlite_reader_writer.rb +75 -0
- data/lib/r509/csr.rb +54 -60
- data/lib/r509/ec-hack.rb +3 -2
- data/lib/r509/engine.rb +5 -6
- data/lib/r509/exceptions.rb +1 -1
- data/lib/r509/helpers.rb +11 -14
- data/lib/r509/io_helpers.rb +7 -7
- data/lib/r509/message_digest.rb +5 -6
- data/lib/r509/ocsp.rb +11 -13
- data/lib/r509/oid_mapper.rb +2 -2
- data/lib/r509/private_key.rb +28 -32
- data/lib/r509/spki.rb +17 -20
- data/lib/r509/subject.rb +26 -27
- data/lib/r509/trollop.rb +1 -0
- data/lib/r509/validity.rb +30 -21
- data/lib/r509/version.rb +4 -2
- data/r509.yaml +9 -17
- data/spec/asn1_spec.rb +145 -146
- data/spec/cert/extensions/authority_info_access_spec.rb +41 -41
- data/spec/cert/extensions/authority_key_identifier_spec.rb +29 -23
- data/spec/cert/extensions/base_spec.rb +38 -34
- data/spec/cert/extensions/basic_constraints_spec.rb +21 -21
- data/spec/cert/extensions/certificate_policies_spec.rb +99 -87
- data/spec/cert/extensions/crl_distribution_points_spec.rb +24 -25
- data/spec/cert/extensions/extended_key_usage_spec.rb +40 -36
- data/spec/cert/extensions/inhibit_any_policy_spec.rb +12 -12
- data/spec/cert/extensions/key_usage_spec.rb +44 -39
- data/spec/cert/extensions/name_constraints_spec.rb +83 -83
- data/spec/cert/extensions/ocsp_no_check_spec.rb +10 -10
- data/spec/cert/extensions/policy_constraints_spec.rb +19 -19
- data/spec/cert/extensions/subject_alternative_name_spec.rb +46 -47
- data/spec/cert/extensions/subject_key_identifier_spec.rb +10 -10
- data/spec/cert_spec.rb +105 -101
- data/spec/certificate_authority/options_builder_spec.rb +90 -90
- data/spec/certificate_authority/signer_spec.rb +41 -41
- data/spec/config/ca_config_spec.rb +169 -119
- data/spec/config/cert_profile_spec.rb +33 -33
- data/spec/config/subject_item_policy_spec.rb +22 -22
- data/spec/crl/administrator_spec.rb +65 -65
- data/spec/crl/reader_writer_spec.rb +20 -19
- data/spec/crl/signed_list_spec.rb +26 -26
- data/spec/crl/sqlite_reader_writer_spec.rb +42 -0
- data/spec/csr_spec.rb +149 -145
- data/spec/engine_spec.rb +14 -14
- data/spec/fixtures.rb +56 -39
- data/spec/fixtures/crl_list.sql +13 -0
- data/spec/fixtures/csr1.der +0 -0
- data/spec/fixtures/csr1.pem +6 -6
- data/spec/message_digest_spec.rb +43 -43
- data/spec/ocsp_spec.rb +25 -25
- data/spec/oid_mapper_spec.rb +18 -19
- data/spec/private_key_spec.rb +79 -81
- data/spec/r509_spec.rb +16 -16
- data/spec/spec_helper.rb +3 -3
- data/spec/spki_spec.rb +94 -94
- data/spec/subject_spec.rb +107 -107
- data/spec/validity_spec.rb +25 -25
- metadata +113 -111
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 562903e3dc32d6329ab86cb309e457a5980317c5
|
|
4
|
+
data.tar.gz: 41cabe1dd8f48dc0ff5fe68ddecc3e165e7e4843
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bbad952fef78a95c90ab557a2886064a75c448d02f924219ab4234d2cdc180349413f41afdde9e7b2e68f2d1023a22953d03f094eed874b57e47248f7c24606e
|
|
7
|
+
data.tar.gz: b59f9c35ea888698344eaddde1c29490d4475755c5da9fba6ffbf756ed3243663489deedb61025b5b23ff30c7f3ac91a248ea89800c3073a00164b4967469787
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data.tar.gz.sig
CHANGED
|
Binary file
|
data/README.mdown
CHANGED
|
@@ -337,7 +337,7 @@ example_ca:
|
|
|
337
337
|
key: <add_path>
|
|
338
338
|
ocsp_start_skew_seconds: 3600
|
|
339
339
|
ocsp_validity_hours: 168
|
|
340
|
-
crl_md:
|
|
340
|
+
crl_md: SHA256
|
|
341
341
|
profiles:
|
|
342
342
|
profile:
|
|
343
343
|
subject_item_policy:
|
|
@@ -396,7 +396,7 @@ subject.common_name = "newdomain.com"
|
|
|
396
396
|
subject.organization = "Org 2.0"
|
|
397
397
|
ext = []
|
|
398
398
|
ext << R509::Cert::Extensions::BasicConstraints.new(:ca => false)
|
|
399
|
-
ext << R509::Cert::Extensions::SubjectAlternativeName.new(:
|
|
399
|
+
ext << R509::Cert::Extensions::SubjectAlternativeName.new(:value => san_names)
|
|
400
400
|
# assume config from yaml load above
|
|
401
401
|
ca = R509::CertificateAuthority::Signer.new(config)
|
|
402
402
|
cert = ca.sign(
|
data/Rakefile
CHANGED
|
@@ -30,15 +30,14 @@ end
|
|
|
30
30
|
|
|
31
31
|
desc "Open an irb session with the lib dir included"
|
|
32
32
|
task :irb do
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
|
|
34
|
+
$LOAD_PATH.unshift File.expand_path("../", __FILE__)
|
|
35
35
|
require 'r509'
|
|
36
36
|
require 'irb'
|
|
37
37
|
ARGV.clear
|
|
38
38
|
IRB.start
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
|
|
42
41
|
desc 'Build yard documentation'
|
|
43
42
|
task :yard do
|
|
44
43
|
puts `yard`
|
data/bin/r509
CHANGED
|
@@ -2,29 +2,38 @@
|
|
|
2
2
|
require 'rubygems'
|
|
3
3
|
require 'r509'
|
|
4
4
|
require 'r509/trollop'
|
|
5
|
+
require 'io/console'
|
|
5
6
|
|
|
6
|
-
opts = R509::Trollop
|
|
7
|
+
opts = R509::Trollop.options do
|
|
7
8
|
opt :interactive, "Interactive CSR/self-signed certificate generation. Overrides all flags other than keyout and out."
|
|
8
9
|
opt :subject, "X509 subject / delimited. Example: /CN=test.com/O=Org/C=US/ST=Illinois/L=Chicago", :type => :string
|
|
9
|
-
opt :
|
|
10
|
+
opt :san, "Subject Alternative Name Example: test.com,*.test.com", :type => :string
|
|
11
|
+
opt :message_digest, "Message digest to use. sha1, sha224, sha256, sha384, sha512, md5", :type => :string, :default => 'sha256'
|
|
10
12
|
opt :duration, "Self-sign the certificate with the duration (in days) specified.", :type => :integer
|
|
11
13
|
opt :bits, "Bit length of generated key. Ignored for EC.", :type => :integer, :default => 2048
|
|
12
14
|
opt :curve_name, "Name of elliptic curve to use. Only used for EC.", :type => :string, :default => 'secp384r1'
|
|
13
15
|
opt :keyout, "File name to save generated key.", :type => :string
|
|
14
16
|
opt :out, "File name to save generated CSR or self-signed certificate", :type => :string
|
|
15
17
|
opt :type, "Type of key to generate. RSA/DSA/EC", :type => :string, :default => "RSA"
|
|
18
|
+
opt :password, "Password to encrypt generated key", :type => :string
|
|
19
|
+
if RUBY_PLATFORM.match('darwin')
|
|
20
|
+
opt :clipboard, "Copy CSR or certificate to the clipboard", :default => false, :short => :p
|
|
21
|
+
end
|
|
16
22
|
version "r509 #{R509::VERSION}"
|
|
17
23
|
end
|
|
18
24
|
|
|
19
|
-
|
|
20
|
-
|
|
25
|
+
opts[:duration] = opts[:duration].to_i
|
|
26
|
+
subject = []
|
|
27
|
+
|
|
28
|
+
if opts[:interactive] == true || opts[:subject].nil?
|
|
29
|
+
if opts[:type].upcase == "RSA" || opts[:type].upcase == "DSA"
|
|
21
30
|
print "CSR Bit Length (2048):"
|
|
22
31
|
bit_length = gets.chomp
|
|
23
|
-
|
|
32
|
+
opts[:bits] = (bit_length.to_i > 0) ? bit_length.to_i : 2048
|
|
24
33
|
elsif opts[:type].upcase == "EC"
|
|
25
34
|
print "Curve Name (secp384r1):"
|
|
26
35
|
curve_name = gets.chomp
|
|
27
|
-
curve_name = (
|
|
36
|
+
opts[:curve_name] = (!curve_name.empty?) ? curve_name : 'secp384r1'
|
|
28
37
|
else
|
|
29
38
|
puts "Invalid key type specified. RSA/DSA/EC"
|
|
30
39
|
exit
|
|
@@ -42,115 +51,103 @@ if opts[:interactive] == true or opts[:subject].nil? then
|
|
|
42
51
|
else R509::MessageDigest::DEFAULT_MD
|
|
43
52
|
end
|
|
44
53
|
|
|
45
|
-
subject = []
|
|
46
54
|
print "C (US): "
|
|
47
55
|
c = gets.chomp
|
|
48
|
-
c = c.empty? ? 'US':c
|
|
49
|
-
subject.push ['C',c]
|
|
56
|
+
c = c.empty? ? 'US' : c
|
|
57
|
+
subject.push ['C', c]
|
|
50
58
|
|
|
51
59
|
print "ST (Illinois): "
|
|
52
60
|
st = gets.chomp
|
|
53
|
-
st = st.empty? ? 'Illinois':st
|
|
54
|
-
subject.push ['ST',st]
|
|
61
|
+
st = st.empty? ? 'Illinois' : st
|
|
62
|
+
subject.push ['ST', st]
|
|
55
63
|
|
|
56
64
|
print "L (Chicago): "
|
|
57
65
|
l = gets.chomp
|
|
58
|
-
l = l.empty? ? 'Chicago':l
|
|
59
|
-
subject.push ['L',l]
|
|
66
|
+
l = l.empty? ? 'Chicago' : l
|
|
67
|
+
subject.push ['L', l]
|
|
60
68
|
|
|
61
69
|
print "O (r509 LLC): "
|
|
62
70
|
o = gets.chomp
|
|
63
|
-
o = o.empty? ? 'r509 LLC':o
|
|
64
|
-
subject.push ['O',o]
|
|
71
|
+
o = o.empty? ? 'r509 LLC' : o
|
|
72
|
+
subject.push ['O', o]
|
|
65
73
|
|
|
66
74
|
print "OU (null by default): "
|
|
67
75
|
ou = gets.chomp
|
|
68
|
-
|
|
69
|
-
subject.push ['OU',ou]
|
|
76
|
+
unless ou.empty?
|
|
77
|
+
subject.push ['OU', ou]
|
|
70
78
|
end
|
|
71
79
|
|
|
72
80
|
print "CN: "
|
|
73
|
-
subject.push ['CN',gets.chomp]
|
|
81
|
+
subject.push ['CN', gets.chomp]
|
|
74
82
|
print "SAN Domains (comma separated):"
|
|
75
|
-
|
|
76
|
-
san_domains = gets.chomp.split(',').collect { |domain| domain.strip }
|
|
77
|
-
csr = R509::CSR.new(
|
|
78
|
-
:subject => subject,
|
|
79
|
-
:bit_length => bit_length,
|
|
80
|
-
:type => opts[:type].upcase,
|
|
81
|
-
:curve_name => curve_name,
|
|
82
|
-
:san_names => san_domains,
|
|
83
|
-
:message_digest => opts[:message_digest]
|
|
84
|
-
)
|
|
83
|
+
opts[:san] = gets.chomp
|
|
85
84
|
|
|
86
|
-
selfsign = 0
|
|
87
85
|
print "Self-signed cert duration in days (null disables self-sign):"
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
86
|
+
opts[:duration] = gets.chomp.to_i
|
|
87
|
+
|
|
88
|
+
print "Password to encrypt generated key (empty disables encryption):"
|
|
89
|
+
password = STDIN.noecho(&:gets).chomp
|
|
90
|
+
puts ""
|
|
91
|
+
unless password.empty?
|
|
92
|
+
print "Retype password:"
|
|
93
|
+
password_confirm = STDIN.noecho(&:gets).chomp
|
|
94
|
+
puts ""
|
|
95
|
+
unless password == password_confirm
|
|
96
|
+
puts "Passwords do not match."
|
|
97
|
+
exit
|
|
98
|
+
end
|
|
99
|
+
opts[:password] = password
|
|
91
100
|
end
|
|
92
|
-
|
|
93
|
-
subject
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
value = item.split('=')
|
|
97
|
-
subject.add_entry(value[0],value[1])
|
|
101
|
+
else
|
|
102
|
+
opts[:subject].chomp.split('/').each do |item|
|
|
103
|
+
if item != ''
|
|
104
|
+
subject.push item.split('=')[0..1]
|
|
98
105
|
end
|
|
99
|
-
|
|
100
|
-
csr = R509::CSR.new(
|
|
101
|
-
:subject => subject,
|
|
102
|
-
:bit_length => opts[:bits],
|
|
103
|
-
:type => opts[:type].upcase,
|
|
104
|
-
:curve_name => opts[:curve_name],
|
|
105
|
-
:message_digest => opts[:message_digest]
|
|
106
|
-
)
|
|
107
|
-
selfsign = opts[:duration] || 0
|
|
106
|
+
end
|
|
108
107
|
end
|
|
109
108
|
|
|
109
|
+
csr_or_cert = csr = R509::CSR.new(
|
|
110
|
+
:subject => subject,
|
|
111
|
+
:bit_length => opts[:bits],
|
|
112
|
+
:type => opts[:type].upcase,
|
|
113
|
+
:curve_name => opts[:curve_name],
|
|
114
|
+
:san_names => (opts[:san] || "").split(',').map { |domain| domain.strip },
|
|
115
|
+
:message_digest => opts[:message_digest]
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
# for self signed, outputting the cert (not the csr)
|
|
119
|
+
selfsign = opts[:duration]
|
|
110
120
|
if selfsign > 0
|
|
111
|
-
|
|
121
|
+
csr_or_cert = R509::CertificateAuthority::Signer.selfsign(
|
|
112
122
|
:csr => csr,
|
|
113
|
-
:not_after => Time.now.to_i+86400*selfsign,
|
|
123
|
+
:not_after => Time.now.to_i + 86400 * selfsign,
|
|
114
124
|
:message_digest => opts[:message_digest]
|
|
115
125
|
)
|
|
116
|
-
|
|
117
|
-
puts csr.key.to_pem
|
|
118
|
-
else
|
|
119
|
-
csr.key.write_pem(opts[:keyout])
|
|
120
|
-
end
|
|
121
|
-
if opts[:out].nil?
|
|
122
|
-
puts cert.to_pem
|
|
123
|
-
else
|
|
124
|
-
cert.write_pem(opts[:out])
|
|
125
|
-
end
|
|
126
|
+
end
|
|
126
127
|
|
|
127
|
-
|
|
128
|
-
if
|
|
129
|
-
|
|
130
|
-
end
|
|
131
|
-
else
|
|
132
|
-
if opts[:keyout].nil?
|
|
133
|
-
puts csr.key.to_pem
|
|
128
|
+
if opts[:keyout]
|
|
129
|
+
if opts[:password]
|
|
130
|
+
csr.key.write_encrypted_pem(opts[:keyout], "aes256", opts[:password])
|
|
134
131
|
else
|
|
135
132
|
csr.key.write_pem(opts[:keyout])
|
|
136
133
|
end
|
|
137
|
-
|
|
138
|
-
if opts[:
|
|
139
|
-
puts csr.
|
|
134
|
+
else
|
|
135
|
+
if opts[:password]
|
|
136
|
+
puts csr.key.to_encrypted_pem("aes256", opts[:password])
|
|
140
137
|
else
|
|
141
|
-
csr.
|
|
138
|
+
puts csr.key.to_pem
|
|
142
139
|
end
|
|
140
|
+
end
|
|
143
141
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
142
|
+
if opts[:out]
|
|
143
|
+
csr_or_cert.write_pem(opts[:out])
|
|
144
|
+
else
|
|
145
|
+
puts csr_or_cert.to_pem
|
|
148
146
|
end
|
|
149
147
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
end
|
|
148
|
+
puts csr_or_cert.subject
|
|
149
|
+
puts "SAN(s): #{csr_or_cert.san.names.map { |n| n.value }.join(", ")}" if csr_or_cert.san
|
|
150
|
+
|
|
151
|
+
if opts[:clipboard]
|
|
152
|
+
IO.popen('pbcopy', 'w').puts csr_or_cert
|
|
156
153
|
end
|
data/bin/r509-parse
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
require 'rubygems'
|
|
3
3
|
require 'r509'
|
|
4
4
|
|
|
5
|
-
if ARGV[0].nil?
|
|
5
|
+
if ARGV[0].nil?
|
|
6
6
|
puts "CSR and certificate parsing using r509 v#{R509::VERSION}."
|
|
7
7
|
puts "Usage: r509-parse <cert or csr>"
|
|
8
8
|
else
|
|
@@ -10,16 +10,16 @@ else
|
|
|
10
10
|
csr = R509::CSR.load_from_file ARGV[0]
|
|
11
11
|
rescue
|
|
12
12
|
end
|
|
13
|
-
if
|
|
13
|
+
if csr
|
|
14
14
|
puts "Subject: #{csr.subject}"
|
|
15
15
|
puts "Algorithm: #{csr.signature_algorithm}"
|
|
16
|
-
|
|
16
|
+
puts "SAN Names: #{csr.san.names.map { |n| n.value }.join(" , ")}"
|
|
17
17
|
else
|
|
18
18
|
begin
|
|
19
19
|
cert = R509::Cert.load_from_file ARGV[0]
|
|
20
20
|
rescue
|
|
21
21
|
end
|
|
22
|
-
if
|
|
22
|
+
if cert
|
|
23
23
|
puts "Subject: #{cert.subject}"
|
|
24
24
|
puts "Issuer: #{cert.issuer}"
|
|
25
25
|
puts "Algorithm: #{cert.signature_algorithm}"
|
data/doc/R509.html
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
<!DOCTYPE html
|
|
2
|
-
|
|
3
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
4
3
|
<head>
|
|
5
|
-
<meta
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>
|
|
7
7
|
Module: R509
|
|
8
8
|
|
|
9
|
-
— Documentation by YARD 0.
|
|
9
|
+
— Documentation by YARD 0.9.5
|
|
10
10
|
|
|
11
11
|
</title>
|
|
12
12
|
|
|
@@ -15,9 +15,8 @@
|
|
|
15
15
|
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
|
|
16
16
|
|
|
17
17
|
<script type="text/javascript" charset="utf-8">
|
|
18
|
-
|
|
18
|
+
pathId = "R509";
|
|
19
19
|
relpath = '';
|
|
20
|
-
framesUrl = "frames.html#!" + escape(window.location.href);
|
|
21
20
|
</script>
|
|
22
21
|
|
|
23
22
|
|
|
@@ -28,63 +27,65 @@
|
|
|
28
27
|
|
|
29
28
|
</head>
|
|
30
29
|
<body>
|
|
31
|
-
<div
|
|
32
|
-
<
|
|
30
|
+
<div class="nav_wrap">
|
|
31
|
+
<iframe id="nav" src="class_list.html"></iframe>
|
|
32
|
+
<div id="resizer"></div>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<div id="main" tabindex="-1">
|
|
36
|
+
<div id="header">
|
|
37
|
+
<div id="menu">
|
|
33
38
|
|
|
34
39
|
<a href="_index.html">Index (R)</a> »
|
|
35
40
|
|
|
36
41
|
|
|
37
42
|
<span class="title">R509</span>
|
|
38
43
|
|
|
39
|
-
|
|
40
|
-
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
|
|
41
44
|
</div>
|
|
42
45
|
|
|
43
|
-
|
|
46
|
+
<div id="search">
|
|
44
47
|
|
|
45
48
|
<a class="full_list_link" id="class_list_link"
|
|
46
49
|
href="class_list.html">
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
</a>
|
|
54
|
-
|
|
55
|
-
<a class="full_list_link" id="file_list_link"
|
|
56
|
-
href="file_list.html">
|
|
57
|
-
File List
|
|
50
|
+
|
|
51
|
+
<svg width="24" height="24">
|
|
52
|
+
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
|
|
53
|
+
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
|
|
54
|
+
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
|
|
55
|
+
</svg>
|
|
58
56
|
</a>
|
|
59
57
|
|
|
60
58
|
</div>
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
<div class="clear"></div>
|
|
60
|
+
</div>
|
|
63
61
|
|
|
64
|
-
|
|
62
|
+
<iframe id="search_frame" src="class_list.html"></iframe>
|
|
65
63
|
|
|
66
|
-
|
|
64
|
+
<div id="content"><h1>Module: R509
|
|
67
65
|
|
|
68
66
|
|
|
69
67
|
|
|
70
68
|
</h1>
|
|
69
|
+
<div class="box_info">
|
|
70
|
+
|
|
71
71
|
|
|
72
|
-
<dl class="box">
|
|
73
72
|
|
|
74
73
|
|
|
75
|
-
|
|
76
74
|
|
|
77
|
-
|
|
78
75
|
|
|
79
76
|
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
<
|
|
83
|
-
|
|
81
|
+
<dl>
|
|
82
|
+
<dt>Defined in:</dt>
|
|
83
|
+
<dd>lib/r509.rb<span class="defines">,<br />
|
|
84
|
+
lib/r509/csr.rb,<br /> lib/r509/spki.rb,<br /> lib/r509/asn1.rb,<br /> lib/r509/cert.rb,<br /> lib/r509/engine.rb,<br /> lib/r509/config.rb,<br /> lib/r509/version.rb,<br /> lib/r509/trollop.rb,<br /> lib/r509/subject.rb,<br /> lib/r509/helpers.rb,<br /> lib/r509/exceptions.rb,<br /> lib/r509/oid_mapper.rb,<br /> lib/r509/io_helpers.rb,<br /> lib/r509/private_key.rb,<br /> lib/r509/message_digest.rb,<br /> lib/r509/crl/signed_list.rb,<br /> lib/r509/config/ca_config.rb,<br /> lib/r509/crl/administrator.rb,<br /> lib/r509/crl/reader_writer.rb,<br /> lib/r509/config/cert_profile.rb,<br /> lib/r509/cert/extensions/base.rb,<br /> lib/r509/crl/sqlite_reader_writer.rb,<br /> lib/r509/cert/extensions/key_usage.rb,<br /> lib/r509/config/subject_item_policy.rb,<br /> lib/r509/cert/extensions/ocsp_no_check.rb,<br /> lib/r509/cert/extensions/name_constraints.rb,<br /> lib/r509/cert/extensions/validation_mixin.rb,<br /> lib/r509/cert/extensions/basic_constraints.rb,<br /> lib/r509/cert/extensions/policy_constraints.rb,<br /> lib/r509/cert/extensions/inhibit_any_policy.rb,<br /> lib/r509/cert/extensions/extended_key_usage.rb,<br /> lib/r509/cert/extensions/certificate_policies.rb,<br /> lib/r509/cert/extensions/authority_info_access.rb,<br /> lib/r509/cert/extensions/subject_key_identifier.rb,<br /> lib/r509/cert/extensions/crl_distribution_points.rb,<br /> lib/r509/cert/extensions/authority_key_identifier.rb,<br /> lib/r509/cert/extensions/subject_alternative_name.rb</span>
|
|
84
85
|
</dd>
|
|
86
|
+
</dl>
|
|
85
87
|
|
|
86
|
-
</
|
|
87
|
-
<div class="clear"></div>
|
|
88
|
+
</div>
|
|
88
89
|
|
|
89
90
|
<h2>Overview</h2><div class="docstring">
|
|
90
91
|
<div class="discussion">
|
|
@@ -111,11 +112,10 @@
|
|
|
111
112
|
</p>
|
|
112
113
|
|
|
113
114
|
<h2>Constant Summary</h2>
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
<
|
|
118
|
-
<div class="docstring">
|
|
115
|
+
<dl class="constants">
|
|
116
|
+
|
|
117
|
+
<dt id="VERSION-constant" class="">VERSION =
|
|
118
|
+
<div class="docstring">
|
|
119
119
|
<div class="discussion">
|
|
120
120
|
|
|
121
121
|
<p>The version of the r509 gem</p>
|
|
@@ -127,11 +127,10 @@
|
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
</div>
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
130
|
+
</dt>
|
|
131
|
+
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>1.0</span><span class='tstring_end'>"</span></span></pre></dd>
|
|
132
|
+
|
|
133
|
+
</dl>
|
|
135
134
|
|
|
136
135
|
|
|
137
136
|
|
|
@@ -142,7 +141,7 @@
|
|
|
142
141
|
|
|
143
142
|
<h2>
|
|
144
143
|
Class Method Summary
|
|
145
|
-
<small
|
|
144
|
+
<small><a href="#" class="summary_toggle">collapse</a></small>
|
|
146
145
|
</h2>
|
|
147
146
|
|
|
148
147
|
<ul class="summary">
|
|
@@ -150,7 +149,7 @@
|
|
|
150
149
|
<li class="public ">
|
|
151
150
|
<span class="summary_signature">
|
|
152
151
|
|
|
153
|
-
<a href="#ec_supported%3F-class_method" title="ec_supported? (class method)"
|
|
152
|
+
<a href="#ec_supported%3F-class_method" title="ec_supported? (class method)">.<strong>ec_supported?</strong> ⇒ Boolean </a>
|
|
154
153
|
|
|
155
154
|
|
|
156
155
|
|
|
@@ -174,7 +173,7 @@
|
|
|
174
173
|
<li class="public ">
|
|
175
174
|
<span class="summary_signature">
|
|
176
175
|
|
|
177
|
-
<a href="#print_debug-class_method" title="print_debug (class method)"
|
|
176
|
+
<a href="#print_debug-class_method" title="print_debug (class method)">.<strong>print_debug</strong> ⇒ nil </a>
|
|
178
177
|
|
|
179
178
|
|
|
180
179
|
|
|
@@ -207,7 +206,7 @@
|
|
|
207
206
|
<div class="method_details first">
|
|
208
207
|
<h3 class="signature first" id="ec_supported?-class_method">
|
|
209
208
|
|
|
210
|
-
|
|
209
|
+
.<strong>ec_supported?</strong> ⇒ <tt>Boolean</tt>
|
|
211
210
|
|
|
212
211
|
|
|
213
212
|
|
|
@@ -243,15 +242,15 @@
|
|
|
243
242
|
<pre class="lines">
|
|
244
243
|
|
|
245
244
|
|
|
246
|
-
33
|
|
247
245
|
34
|
|
248
|
-
35
|
|
246
|
+
35
|
|
247
|
+
36</pre>
|
|
249
248
|
</td>
|
|
250
249
|
<td>
|
|
251
|
-
<pre class="code"><span class="info file"># File 'lib/r509.rb', line
|
|
250
|
+
<pre class="code"><span class="info file"># File 'lib/r509.rb', line 34</span>
|
|
252
251
|
|
|
253
252
|
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_ec_supported?'>ec_supported?</span>
|
|
254
|
-
<span class='lparen'>(</span><span class='
|
|
253
|
+
<span class='lparen'>(</span><span class='op'>!</span><span class='kw'>defined?</span><span class='lparen'>(</span><span class='const'>OpenSSL</span><span class='op'>::</span><span class='const'>PKey</span><span class='op'>::</span><span class='const'>EC</span><span class='op'>::</span><span class='const'>UNSUPPORTED</span><span class='rparen'>)</span><span class='rparen'>)</span>
|
|
255
254
|
<span class='kw'>end</span></pre>
|
|
256
255
|
</td>
|
|
257
256
|
</tr>
|
|
@@ -261,7 +260,7 @@
|
|
|
261
260
|
<div class="method_details ">
|
|
262
261
|
<h3 class="signature " id="print_debug-class_method">
|
|
263
262
|
|
|
264
|
-
|
|
263
|
+
.<strong>print_debug</strong> ⇒ <tt>nil</tt>
|
|
265
264
|
|
|
266
265
|
|
|
267
266
|
|
|
@@ -297,15 +296,15 @@
|
|
|
297
296
|
<pre class="lines">
|
|
298
297
|
|
|
299
298
|
|
|
300
|
-
25
|
|
301
299
|
26
|
|
302
300
|
27
|
|
303
301
|
28
|
|
304
302
|
29
|
|
305
|
-
30
|
|
303
|
+
30
|
|
304
|
+
31</pre>
|
|
306
305
|
</td>
|
|
307
306
|
<td>
|
|
308
|
-
<pre class="code"><span class="info file"># File 'lib/r509.rb', line
|
|
307
|
+
<pre class="code"><span class="info file"># File 'lib/r509.rb', line 26</span>
|
|
309
308
|
|
|
310
309
|
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_print_debug'>print_debug</span>
|
|
311
310
|
<span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>r509 v</span><span class='embexpr_beg'>#{</span><span class='const'>R509</span><span class='op'>::</span><span class='const'>VERSION</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
|
@@ -322,11 +321,12 @@
|
|
|
322
321
|
|
|
323
322
|
</div>
|
|
324
323
|
|
|
325
|
-
|
|
326
|
-
Generated on
|
|
324
|
+
<div id="footer">
|
|
325
|
+
Generated on Tue Dec 6 17:27:38 2016 by
|
|
327
326
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
328
|
-
0.
|
|
327
|
+
0.9.5 (ruby-2.4.0).
|
|
329
328
|
</div>
|
|
330
329
|
|
|
330
|
+
</div>
|
|
331
331
|
</body>
|
|
332
332
|
</html>
|