cert-auth 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ if ARGV.first == 'init-ca'
4
+ require File.expand_path('../../scripts/init-ca.rb', __FILE__)
5
+ else
6
+ require 'cert_auth/server'
7
+ require 'vegas'
8
+ CertAuth.ca_root = `pwd`.chomp
9
+ Vegas::Runner.new(CertAuth::Server, 'cert-auth')
10
+ end
@@ -0,0 +1,85 @@
1
+ require "rubygems"
2
+ require "sinatra"
3
+ require "haml"
4
+
5
+ module CertAuth
6
+ class << self
7
+
8
+ ## Return the root to the certificate authority
9
+ attr_accessor :ca_root
10
+
11
+ ## Return the full path to the public folder for the
12
+ ## certificate authority.
13
+ def public_root
14
+ File.expand_path("../../public", __FILE__)
15
+ end
16
+
17
+ ## Return the CA Root
18
+ def ca_root
19
+ @ca_root || File.expand_path("../../exampleCA", __FILE__)
20
+ end
21
+
22
+ ## Return an array of all keys on this certificate authority. This information
23
+ ## is taken from the index.txt file.
24
+ def keys
25
+ raw = File.read(File.join(ca_root, 'index.txt')).split(/\n/)
26
+ keys = Array.new
27
+ for key in raw
28
+ type, expiry_date, revoke_date, serial, filename, subject = key.split(/\t/)
29
+ keys << {:type => type, :expiry_date => expiry_date.to_i, :revoke_date => revoke_date.to_i, :serial => serial, :subject => subject}
30
+ end
31
+ keys
32
+ end
33
+
34
+ ## Return the contents for a certificate
35
+ def certificate(serial)
36
+ path = File.join(ca_root, 'newcerts', "#{serial}.pem")
37
+ if File.exist?(path)
38
+ File.read(path)
39
+ else
40
+ false
41
+ end
42
+ end
43
+
44
+ ## Return the certificate for the CA
45
+ def ca_certificate
46
+ File.read(File.join(ca_root, 'certs', 'ca.crt'))
47
+ end
48
+
49
+ ## Save a new CSR file to the local machine and return the properties
50
+ def save_csr(contents)
51
+ FileUtils.mkdir_p(File.join(ca_root, 'csrs'))
52
+ key = Digest::SHA1.hexdigest([contents, Time.now.to_i].join)
53
+ File.open(File.join(ca_root, 'csrs', key), 'w') { |f| f.write(contents) }
54
+ key
55
+ end
56
+
57
+ ## Return CSR information
58
+ def view_csr(key)
59
+ path = File.join(ca_root, 'csrs', key)
60
+ if File.exist?(path)
61
+ output = `openssl req -noout -text -in #{path}`
62
+ $?.success? ? output : false
63
+ else
64
+ false
65
+ end
66
+ end
67
+
68
+ ## Sign a certificate and return the serial number
69
+ def sign(csr_key, passphrase)
70
+ csr_path = File.join(ca_root, 'csrs', csr_key)
71
+ if File.exist?(csr_path)
72
+ output = `cd #{ca_root} && openssl ca -passin pass:#{passphrase} -batch -config openssl.conf -policy policy_anything -infiles #{csr_path} 2>&1`
73
+ if $?.success?
74
+ [true, output]
75
+ else
76
+ [false, output]
77
+ end
78
+ else
79
+ false
80
+ end
81
+ end
82
+
83
+
84
+ end
85
+ end
@@ -0,0 +1,57 @@
1
+ require 'cert_auth'
2
+ require 'sinatra/base'
3
+ require 'haml'
4
+
5
+ module CertAuth
6
+ class Server < Sinatra::Base
7
+
8
+ set :public, File.join(CertAuth.public_root, 'static')
9
+ set :views, File.join(CertAuth.public_root, 'views')
10
+ set :static, true
11
+
12
+ ## Generic view with a list of all signed certificates.
13
+ get '/' do
14
+ @certificates = CertAuth.keys
15
+ haml :index
16
+ end
17
+
18
+ ## Return the certificate
19
+ get '/certificate' do
20
+ @certificate = CertAuth.ca_certificate
21
+ haml :view_certificate
22
+ end
23
+
24
+ ## Return the certificate contents for a provided serial
25
+ get '/certificate/:serial' do
26
+ @certificate = CertAuth.certificate(params[:serial])
27
+ haml :view_certificate
28
+ end
29
+
30
+ ## Accept a new CSR for upload do
31
+ get '/new' do
32
+ haml :new
33
+ end
34
+
35
+ ## Save a CSR to the system and return the properties ready for signing
36
+ post '/new' do
37
+ @csr_key = CertAuth.save_csr(params[:csr])
38
+ if @csr_details = CertAuth.view_csr(@csr_key)
39
+ haml :preview
40
+ else
41
+ redirect "/new"
42
+ end
43
+ end
44
+
45
+ post '/sign/:csr_key' do
46
+ @csr_key = params[:csr_key]
47
+ status, @output = CertAuth.sign(@csr_key, params[:passphrase])
48
+ if status
49
+ haml :done
50
+ else
51
+ @csr_details = CertAuth.view_csr(@csr_key)
52
+ haml :preview
53
+ end
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,45 @@
1
+ html { color: #000; background: #FFF; }
2
+ body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td { margin: 0; padding: 0; }
3
+ li { list-style: none; }
4
+ h1, h2, h3, h4, h5, h6 { font-size: 100%; font-weight: normal; }
5
+ pre, form { font-style: normal; font-weight: normal; }
6
+ fieldset { border: 0; }
7
+ legend { color: #000; }
8
+ input, textarea { margin: 0; padding: 0; font-family: inherit; font-size: inherit; font-weight: inherit; *font-size: 100%; }
9
+ p, blockquote { margin: 0; padding: 0; }
10
+ th { margin: 0; padding: 0; font-style: normal; font-weight: normal; text-align: left; }
11
+ table { border-collapse: collapse; border-spacing: 0; }
12
+ img { border: 0; }
13
+ address { font-style: normal; font-weight: normal; }
14
+ caption { font-style: normal; font-weight: normal; text-align: left; }
15
+ cite, dfn, em, strong, var { font-style: normal; font-weight: normal; }
16
+ q:before, q:after { content: ''; }
17
+ abbr, acronym { border: 0; font-variant: normal; }
18
+ sup { vertical-align: text-top; }
19
+ sub { vertical-align: text-bottom; }
20
+ select { font-family: inherit; font-size: inherit; font-weight: inherit; *font-size: 100%; }
21
+
22
+ .hidden { display:none !important;}
23
+ div.field_with_errors { display:inline !important;}
24
+
25
+ /* disable safari input highlighting - we don't like this */
26
+ input, textarea, div.editable {outline-style:none;outline-width:0px;}
27
+ a:active { outline: none;}
28
+
29
+ html { font-size:12px; font-family:"Helvetica Neue", Arial, sans-serif; background-color:#ccc;}
30
+ body { -webkit-font-smoothing: antialiased; }
31
+ #content { background:#fff; width:70%; margin:25px auto; padding:40px;}
32
+ #content h3 { font-weight:bold; font-size:200%; margin-bottom:10px;}
33
+ #content table { width:100%;}
34
+ #content table td { border:1px solid #ccc; padding:5px; }
35
+ #content table thead td { background:#efefef; font-weight:bold;}
36
+ #content a { color:#333;}
37
+ ul { margin:15px 0; margin-left:30px; line-height:1.5;}
38
+ ul li { list-style:disc;}
39
+ pre { background:#efefef; padding:10px;}
40
+ p.pp { padding:15px; margin:10px 0; background:#efefef; font-weight:bold; font-size:120%;}
41
+ p { margin:10px 0;}
42
+ .error { background:rgba(255,0,0,0.3); margin:10px 0; padding:10px;}
43
+ .error pre { background:rgba(255,0,0,0.3); margin-top:10px;}
44
+ .error h4 { font-size:120%; font-weight:bold; color:red;}
45
+ textarea { font-family:Courier, monospace;}
@@ -0,0 +1,4 @@
1
+ %h3 Certificate has been signed successfully.
2
+ %p
3
+ %a{:href => '/'} Back to certificate list
4
+ %pre~ @output
@@ -0,0 +1,25 @@
1
+ %h3 Certificates Issued
2
+ %table
3
+ %thead
4
+ %tr
5
+ %td Type
6
+ %td Expiry Date
7
+ %td Revoke Date
8
+ %td Serial
9
+ %td Subject
10
+ %td
11
+ %tbody
12
+ - for cert in @certificates
13
+ %tr
14
+ %td= cert[:type]
15
+ %td= cert[:expiry_date]
16
+ %td= cert[:revoke_date]
17
+ %td= cert[:serial]
18
+ %td= cert[:subject]
19
+ %td
20
+ %a{:href => '/certificate/' + cert[:serial]} View
21
+ %ul
22
+ %li
23
+ %a{:href => '/certificate'} View CA Certificate
24
+ %li
25
+ %a{:href => '/new'} Upload CSR for Signing
@@ -0,0 +1,9 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title CertAuth
5
+ %link{:href => "/style.css", :media => 'screen', :rel => 'stylesheet', :type => 'text/css'}
6
+ %body
7
+ #content
8
+ = yield
9
+
@@ -0,0 +1,9 @@
1
+ %h3 Upload new CSR
2
+ %p
3
+ %a{:href => '/'} Back to certificate list
4
+
5
+ %form{:action => '/new', :method => 'post'}
6
+ %p
7
+ %textarea{:name => 'csr', :rows => 30, :cols => 120}
8
+ %p
9
+ %input{:type => 'submit', :name => 'go', :value => "Upload CSR"}
@@ -0,0 +1,17 @@
1
+ %h3 Preview CSR
2
+ %p
3
+ %a{:href => '/'} Back to certificate list
4
+
5
+ %form{:action => '/sign/' + @csr_key, :method => 'post'}
6
+ - if @output
7
+ .error
8
+ %h4 An error occurred:
9
+ %pre~ @output
10
+
11
+ %pre~ @csr_details
12
+
13
+ %p.pp
14
+ Enter the passphrase for the CA to sign this certificate:<br />
15
+ %input{:type => 'password', :name => 'passphrase'}
16
+ %input{:type => 'submit', :name => 'go', :value => "Send for signing"}
17
+
@@ -0,0 +1,6 @@
1
+ %h3 View Certificate
2
+ %p
3
+ %a{:href => '/'} Back to certificate list
4
+
5
+ %pre~ @certificate
6
+
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+ ## Initialize a new CA authority root.
3
+ ## Usage: init-ca.rb path/to/ca
4
+
5
+ require 'fileutils'
6
+
7
+ root = ARGV.last
8
+
9
+ if root.nil?
10
+ $stderr.puts "Pass the directory to this script to create a CA."
11
+ Process.exit(1)
12
+ end
13
+
14
+ if File.exist?(root)
15
+ $stderr.puts "A directory already exists at '#{root}'. Please delete this before continuing."
16
+ Process.exit(1)
17
+ end
18
+ begin
19
+ puts "Creating new certificate authority in '#{root}'. Please answer any questions which are asked:"
20
+
21
+ %w{ certs crl newcerts private }.each do |dir|
22
+ path = File.join(root, dir)
23
+ puts "Creating directory '#{path}'"
24
+ FileUtils.mkdir_p(path)
25
+ end
26
+
27
+ File.open(File.join(root, 'serial'), 'w') { |f| f.write('01') }
28
+ puts "Set initial serial as 01"
29
+ File.open(File.join(root, 'index.txt'), 'w') { |f| f.write('') }
30
+ puts "Added empty file to use as database"
31
+
32
+ ca_key_path = File.join(root, 'private', 'ca.key')
33
+ ca_crt_path = File.join(root, 'certs', 'ca.crt')
34
+
35
+ years = 10
36
+ days = 356 * years
37
+
38
+ puts "CA Certificate length is #{days} days (#{years} years)"
39
+ system("openssl req -new -x509 -extensions v3_ca -keyout #{ca_key_path} -out #{ca_crt_path} -days #{days}")
40
+ puts "Key & certificates generated"
41
+
42
+ raise "CA key does not exist at #{ca_key_path}" unless File.exist?(ca_key_path)
43
+ raise "CA crt does not exist at #{ca_crt_path}" unless File.exist?(ca_crt_path)
44
+
45
+ puts "Setting 0400 permission on #{ca_key_path}"
46
+ FileUtils.chmod(0400, ca_key_path)
47
+
48
+ source = File.expand_path('../openssl.example.conf', __FILE__)
49
+ FileUtils.cp(source, File.join(root, 'openssl.conf'))
50
+
51
+ puts
52
+ puts "CA has been setup successfully as #{root}. You can now start the SSL-CA webserver from this"
53
+ puts "directory to manage the CA."
54
+
55
+ rescue
56
+ puts "An error occured. The CA has been removed from #{root}. Please try again..."
57
+ FileUtils.rm_rf(root)
58
+ end
@@ -0,0 +1,313 @@
1
+ #
2
+ # OpenSSL example configuration file.
3
+ # This is mostly being used for generation of certificate requests.
4
+ #
5
+
6
+ # This definition stops the following lines choking if HOME isn't
7
+ # defined.
8
+ HOME = .
9
+ RANDFILE = $ENV::HOME/.rnd
10
+
11
+ # Extra OBJECT IDENTIFIER info:
12
+ #oid_file = $ENV::HOME/.oid
13
+ oid_section = new_oids
14
+
15
+ # To use this configuration file with the "-extfile" option of the
16
+ # "openssl x509" utility, name here the section containing the
17
+ # X.509v3 extensions to use:
18
+ # extensions =
19
+ # (Alternatively, use a configuration file that has only
20
+ # X.509v3 extensions in its main [= default] section.)
21
+
22
+ [ new_oids ]
23
+
24
+ # We can add new OIDs in here for use by 'ca' and 'req'.
25
+ # Add a simple OID like this:
26
+ # testoid1=1.2.3.4
27
+ # Or use config file substitution like this:
28
+ # testoid2=${testoid1}.5.6
29
+
30
+ ####################################################################
31
+ [ ca ]
32
+ default_ca = CA_default # The default ca section
33
+
34
+ ####################################################################
35
+ [ CA_default ]
36
+
37
+ dir = . # Where everything is kept
38
+ certs = $dir/certs # Where the issued certs are kept
39
+ crl_dir = $dir/crl # Where the issued crl are kept
40
+ database = $dir/index.txt # database index file.
41
+ #unique_subject = no # Set to 'no' to allow creation of
42
+ # several ctificates with same subject.
43
+ new_certs_dir = $dir/newcerts # default place for new certs.
44
+
45
+ certificate = $dir/certs/ca.crt # The CA certificate
46
+ serial = $dir/serial # The current serial number
47
+ #crlnumber = $dir/crlnumber # the current crl number
48
+ # must be commented out to leave a V1 CRL
49
+ crl = $dir/crl.pem # The current CRL
50
+ private_key = $dir/private/ca.key # The private key
51
+ RANDFILE = $dir/private/.rand # private random number file
52
+
53
+ x509_extensions = usr_cert # The extentions to add to the cert
54
+
55
+ # Comment out the following two lines for the "traditional"
56
+ # (and highly broken) format.
57
+ name_opt = ca_default # Subject Name options
58
+ cert_opt = ca_default # Certificate field options
59
+
60
+ # Extension copying option: use with caution.
61
+ # copy_extensions = copy
62
+
63
+ # Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
64
+ # so this is commented out by default to leave a V1 CRL.
65
+ # crlnumber must also be commented out to leave a V1 CRL.
66
+ # crl_extensions = crl_ext
67
+
68
+ default_days = 730 # how long to certify for
69
+ default_crl_days= 30 # how long before next CRL
70
+ default_md = sha1 # which md to use.
71
+ preserve = no # keep passed DN ordering
72
+
73
+ # A few difference way of specifying how similar the request should look
74
+ # For type CA, the listed attributes must be the same, and the optional
75
+ # and supplied fields are just that :-)
76
+ policy = policy_match
77
+
78
+ # For the CA policy
79
+ [ policy_match ]
80
+ countryName = match
81
+ stateOrProvinceName = match
82
+ organizationName = match
83
+ organizationalUnitName = optional
84
+ commonName = supplied
85
+ emailAddress = optional
86
+
87
+ # For the 'anything' policy
88
+ # At this point in time, you must list all acceptable 'object'
89
+ # types.
90
+ [ policy_anything ]
91
+ countryName = optional
92
+ stateOrProvinceName = optional
93
+ localityName = optional
94
+ organizationName = optional
95
+ organizationalUnitName = optional
96
+ commonName = supplied
97
+ emailAddress = optional
98
+
99
+ ####################################################################
100
+ [ req ]
101
+ default_bits = 2048
102
+ default_keyfile = privkey.pem
103
+ distinguished_name = req_distinguished_name
104
+ attributes = req_attributes
105
+ x509_extensions = v3_ca # The extentions to add to the self signed cert
106
+
107
+ # Passwords for private keys if not present they will be prompted for
108
+ # input_password = secret
109
+ # output_password = secret
110
+
111
+ # This sets a mask for permitted string types. There are several options.
112
+ # default: PrintableString, T61String, BMPString.
113
+ # pkix : PrintableString, BMPString.
114
+ # utf8only: only UTF8Strings.
115
+ # nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
116
+ # MASK:XXXX a literal mask value.
117
+ # WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
118
+ # so use this option with caution!
119
+ string_mask = nombstr
120
+
121
+ # req_extensions = v3_req # The extensions to add to a certificate request
122
+
123
+ [ req_distinguished_name ]
124
+ countryName = Country Name (2 letter code)
125
+ countryName_default = AU
126
+ countryName_min = 2
127
+ countryName_max = 2
128
+
129
+ stateOrProvinceName = State or Province Name (full name)
130
+ stateOrProvinceName_default = Some-State
131
+
132
+ localityName = Locality Name (eg, city)
133
+
134
+ 0.organizationName = Organization Name (eg, company)
135
+ 0.organizationName_default = Internet Widgits Pty Ltd
136
+
137
+ # we can do this but it is not needed normally :-)
138
+ #1.organizationName = Second Organization Name (eg, company)
139
+ #1.organizationName_default = World Wide Web Pty Ltd
140
+
141
+ organizationalUnitName = Organizational Unit Name (eg, section)
142
+ #organizationalUnitName_default =
143
+
144
+ commonName = Common Name (eg, YOUR name)
145
+ commonName_max = 64
146
+
147
+ emailAddress = Email Address
148
+ emailAddress_max = 64
149
+
150
+ # SET-ex3 = SET extension number 3
151
+
152
+ [ req_attributes ]
153
+ challengePassword = A challenge password
154
+ challengePassword_min = 4
155
+ challengePassword_max = 20
156
+
157
+ unstructuredName = An optional company name
158
+
159
+ [ usr_cert ]
160
+
161
+ # These extensions are added when 'ca' signs a request.
162
+
163
+ # This goes against PKIX guidelines but some CAs do it and some software
164
+ # requires this to avoid interpreting an end user certificate as a CA.
165
+
166
+ basicConstraints=CA:FALSE
167
+
168
+ # Here are some examples of the usage of nsCertType. If it is omitted
169
+ # the certificate can be used for anything *except* object signing.
170
+
171
+ # This is OK for an SSL server.
172
+ # nsCertType = server
173
+
174
+ # For an object signing certificate this would be used.
175
+ # nsCertType = objsign
176
+
177
+ # For normal client use this is typical
178
+ # nsCertType = client, email
179
+
180
+ # and for everything including object signing:
181
+ # nsCertType = client, email, objsign
182
+
183
+ # This is typical in keyUsage for a client certificate.
184
+ # keyUsage = nonRepudiation, digitalSignature, keyEncipherment
185
+
186
+ # This will be displayed in Netscape's comment listbox.
187
+ nsComment = "OpenSSL Generated Certificate"
188
+
189
+ # PKIX recommendations harmless if included in all certificates.
190
+ subjectKeyIdentifier=hash
191
+ authorityKeyIdentifier=keyid,issuer
192
+
193
+ # This stuff is for subjectAltName and issuerAltname.
194
+ # Import the email address.
195
+ # subjectAltName=email:copy
196
+ # An alternative to produce certificates that aren't
197
+ # deprecated according to PKIX.
198
+ # subjectAltName=email:move
199
+
200
+ # Copy subject details
201
+ # issuerAltName=issuer:copy
202
+
203
+ #nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
204
+ #nsBaseUrl
205
+ #nsRevocationUrl
206
+ #nsRenewalUrl
207
+ #nsCaPolicyUrl
208
+ #nsSslServerName
209
+
210
+ [ v3_req ]
211
+
212
+ # Extensions to add to a certificate request
213
+
214
+ basicConstraints = CA:FALSE
215
+ keyUsage = nonRepudiation, digitalSignature, keyEncipherment
216
+
217
+ [ v3_ca ]
218
+
219
+
220
+ # Extensions for a typical CA
221
+
222
+
223
+ # PKIX recommendation.
224
+
225
+ subjectKeyIdentifier=hash
226
+
227
+ authorityKeyIdentifier=keyid:always,issuer:always
228
+
229
+ # This is what PKIX recommends but some broken software chokes on critical
230
+ # extensions.
231
+ #basicConstraints = critical,CA:true
232
+ # So we do this instead.
233
+ basicConstraints = CA:true
234
+
235
+ # Key usage: this is typical for a CA certificate. However since it will
236
+ # prevent it being used as an test self-signed certificate it is best
237
+ # left out by default.
238
+ # keyUsage = cRLSign, keyCertSign
239
+
240
+ # Some might want this also
241
+ # nsCertType = sslCA, emailCA
242
+
243
+ # Include email address in subject alt name: another PKIX recommendation
244
+ # subjectAltName=email:copy
245
+ # Copy issuer details
246
+ # issuerAltName=issuer:copy
247
+
248
+ # DER hex encoding of an extension: beware experts only!
249
+ # obj=DER:02:03
250
+ # Where 'obj' is a standard or added object
251
+ # You can even override a supported extension:
252
+ # basicConstraints= critical, DER:30:03:01:01:FF
253
+
254
+ [ crl_ext ]
255
+
256
+ # CRL extensions.
257
+ # Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
258
+
259
+ # issuerAltName=issuer:copy
260
+ authorityKeyIdentifier=keyid:always,issuer:always
261
+
262
+ [ proxy_cert_ext ]
263
+ # These extensions should be added when creating a proxy certificate
264
+
265
+ # This goes against PKIX guidelines but some CAs do it and some software
266
+ # requires this to avoid interpreting an end user certificate as a CA.
267
+
268
+ basicConstraints=CA:FALSE
269
+
270
+ # Here are some examples of the usage of nsCertType. If it is omitted
271
+ # the certificate can be used for anything *except* object signing.
272
+
273
+ # This is OK for an SSL server.
274
+ # nsCertType = server
275
+
276
+ # For an object signing certificate this would be used.
277
+ # nsCertType = objsign
278
+
279
+ # For normal client use this is typical
280
+ # nsCertType = client, email
281
+
282
+ # and for everything including object signing:
283
+ # nsCertType = client, email, objsign
284
+
285
+ # This is typical in keyUsage for a client certificate.
286
+ # keyUsage = nonRepudiation, digitalSignature, keyEncipherment
287
+
288
+ # This will be displayed in Netscape's comment listbox.
289
+ nsComment = "OpenSSL Generated Certificate"
290
+
291
+ # PKIX recommendations harmless if included in all certificates.
292
+ subjectKeyIdentifier=hash
293
+ authorityKeyIdentifier=keyid,issuer:always
294
+
295
+ # This stuff is for subjectAltName and issuerAltname.
296
+ # Import the email address.
297
+ # subjectAltName=email:copy
298
+ # An alternative to produce certificates that aren't
299
+ # deprecated according to PKIX.
300
+ # subjectAltName=email:move
301
+
302
+ # Copy subject details
303
+ # issuerAltName=issuer:copy
304
+
305
+ #nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
306
+ #nsBaseUrl
307
+ #nsRevocationUrl
308
+ #nsRenewalUrl
309
+ #nsCaPolicyUrl
310
+ #nsSslServerName
311
+
312
+ # This really needs to be in place for it to be a proxy certificate.
313
+ proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cert-auth
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 0
9
+ version: 1.0.0
10
+ platform: ruby
11
+ authors:
12
+ - Adam Cooke
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-02-13 00:00:00 +00:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: sinatra
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: haml
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ version: "0"
42
+ type: :runtime
43
+ version_requirements: *id002
44
+ - !ruby/object:Gem::Dependency
45
+ name: vegas
46
+ prerelease: false
47
+ requirement: &id003 !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ type: :runtime
55
+ version_requirements: *id003
56
+ description:
57
+ email: adam@atechmedia.com
58
+ executables:
59
+ - cert-auth
60
+ extensions: []
61
+
62
+ extra_rdoc_files: []
63
+
64
+ files:
65
+ - lib/cert_auth/server.rb
66
+ - lib/cert_auth.rb
67
+ - bin/cert-auth
68
+ - public/static/style.css
69
+ - public/views/done.haml
70
+ - public/views/index.haml
71
+ - public/views/layout.haml
72
+ - public/views/new.haml
73
+ - public/views/preview.haml
74
+ - public/views/view_certificate.haml
75
+ - scripts/init-ca.rb
76
+ - scripts/openssl.example.conf
77
+ has_rdoc: true
78
+ homepage: http://atechmedia.com
79
+ licenses: []
80
+
81
+ post_install_message:
82
+ rdoc_options: []
83
+
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ segments:
91
+ - 0
92
+ version: "0"
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ segments:
98
+ - 0
99
+ version: "0"
100
+ requirements: []
101
+
102
+ rubyforge_project:
103
+ rubygems_version: 1.3.6
104
+ signing_key:
105
+ specification_version: 3
106
+ summary: Web Interface for an OpenSSL Certificate Authority
107
+ test_files: []
108
+