openssl-extensions 0.0.9 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +6 -0
- data/LICENSE +21 -0
- data/README.md +50 -0
- data/lib/openssl-extensions/version.rb +1 -1
- data/lib/openssl-extensions/x509/certificate.rb +17 -0
- data/spec/fixtures/certificate_requests/1024.csr +12 -0
- data/spec/fixtures/certificate_requests/challenge.csr +14 -0
- data/spec/fixtures/certificate_requests/envylabs.csr +19 -0
- data/spec/fixtures/certificate_requests/geocerts.csr +17 -0
- data/spec/fixtures/certificate_requests/geocerts.key +27 -0
- data/spec/fixtures/certificate_requests/geocerts_1024.key +15 -0
- data/spec/fixtures/certificate_requests/sans.csr +30 -0
- data/spec/fixtures/certificates/app1.hongkongpost.com.pem +26 -0
- data/spec/fixtures/certificates/equifax-secure-ca.pem +20 -0
- data/spec/fixtures/certificates/geotrust-extended-validation-ssl-ca.pem +28 -0
- data/spec/fixtures/certificates/geotrust-primary-certification-authority.pem +22 -0
- data/spec/fixtures/certificates/globalsign-root-ca.pem +22 -0
- data/spec/fixtures/certificates/hongkong-post-e-cert-ca-1.pem +21 -0
- data/spec/fixtures/certificates/hongkong-post-e-cert-ca.pem +21 -0
- data/spec/fixtures/certificates/hongkong-post-root-ca-1.pem +21 -0
- data/spec/fixtures/certificates/hongkong-post-root-ca.pem +20 -0
- data/spec/fixtures/certificates/www.geocerts.com.pem +31 -0
- data/spec/fixtures/certificates/www.twongo.com.pem +22 -0
- data/spec/integration/openssl/ssl/ssl_socket_spec.rb +7 -0
- data/spec/integration/openssl/x509/certificate_spec.rb +9 -0
- data/spec/integration/openssl/x509/name_spec.rb +9 -0
- data/spec/integration/openssl/x509/request_spec.rb +10 -0
- data/spec/models/openssl-extensions/ssl/ssl_socket_spec.rb +16 -0
- data/spec/models/openssl-extensions/x509/authority_key_identifier_spec.rb +17 -0
- data/spec/models/openssl-extensions/x509/certificate_chain_spec.rb +54 -0
- data/spec/models/openssl-extensions/x509/certificate_spec.rb +109 -0
- data/spec/models/openssl-extensions/x509/name_spec.rb +20 -0
- data/spec/models/openssl-extensions/x509/request_spec.rb +77 -0
- data/spec/models/openssl-extensions_spec.rb +40 -0
- data/spec/spec_helper.rb +22 -0
- data/spec/support/certificate_request_fixtures.rb +29 -0
- data/spec/support/ssl_certificate_fixtures.rb +28 -0
- metadata +75 -14
data/CHANGELOG.md
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Copyright (c) 2010 Envy Labs LLC
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
data/README.md
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# OpenSSL Extensions
|
2
|
+
|
3
|
+
This library generally provides helper methods which makes working with
|
4
|
+
OpenSSL a little more bearable. It does, however, provide some additional
|
5
|
+
structures (such as a CertificateChain) which extend the traditional
|
6
|
+
features of the library.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
With [Bundler](http://gembundler.com):
|
11
|
+
|
12
|
+
gem 'openssl-extensions', :require => 'openssl-extensions/all'
|
13
|
+
|
14
|
+
With standard RubyGems:
|
15
|
+
|
16
|
+
gem install openssl-extensions
|
17
|
+
|
18
|
+
require 'rubygems'
|
19
|
+
require 'openssl-extensions/all'
|
20
|
+
|
21
|
+
Once required, the extensions are automatically applied.
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
In general, this extension library should be somewhat transparent to you.
|
26
|
+
It does not directly provide many classes with which you might interact.
|
27
|
+
Instead, it extends the current classes provided by Ruby's OpenSSL library
|
28
|
+
(being OpenSSL::X509::Request, OpenSSL::X509::Certificate, and
|
29
|
+
OpenSSL::X509::NAME).
|
30
|
+
|
31
|
+
Below is a simple example exercising a few helpers provided by this
|
32
|
+
library:
|
33
|
+
|
34
|
+
csr_body = File.read('example.csr') # assuming this is valid and exists
|
35
|
+
request = OpenSSL::X509::Request.new(csr_body)
|
36
|
+
|
37
|
+
request.subject.common_name # => "example.com"
|
38
|
+
request.subject.organization # => "Example Corp"
|
39
|
+
request.subject.locality # => "Orlando"
|
40
|
+
request.subject.region # => "Florida"
|
41
|
+
request.subject.country # => "US"
|
42
|
+
request.subject.location # => "Orlando, Florida, US"
|
43
|
+
|
44
|
+
request.strength # => 2048
|
45
|
+
request.challenge_password? # => false
|
46
|
+
request.subject_alternative_names # => ['example.com', 'www.example.com']
|
47
|
+
|
48
|
+
## License
|
49
|
+
|
50
|
+
Released under the MIT License. See the LICENSE file for further details.
|
@@ -84,6 +84,23 @@ module OpenSSLExtensions::X509::Certificate
|
|
84
84
|
read_extension_by_oid('subjectKeyIdentifier')
|
85
85
|
end
|
86
86
|
|
87
|
+
##
|
88
|
+
# Returns the SSL version used by the certificate. Most likely, this
|
89
|
+
# will return +3+, since version +1+ was unreleased, and version +2+ was
|
90
|
+
# abandoned in 1995.
|
91
|
+
#
|
92
|
+
# See http://en.wikipedia.org/wiki/Secure_Sockets_Layer.
|
93
|
+
#
|
94
|
+
#--
|
95
|
+
# OPTIMIZE: This should really use a call directly to the OpenSSL library, but will require becoming a compiled gem.
|
96
|
+
#++
|
97
|
+
#
|
98
|
+
def ssl_version
|
99
|
+
if to_text =~ %r{^\s+Version: (\d+)}m
|
100
|
+
$1.to_i
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
87
104
|
end
|
88
105
|
|
89
106
|
OpenSSL::X509::Certificate.send(:include, OpenSSLExtensions::X509::Certificate)
|
@@ -0,0 +1,12 @@
|
|
1
|
+
-----BEGIN CERTIFICATE REQUEST-----
|
2
|
+
MIIBtzCCASACAQAwdzELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0dlb3JnaWExEDAO
|
3
|
+
BgNVBAcTB0F0bGFudGExFTATBgNVBAoTDEdlb0NlcnRzIEluYzESMBAGA1UECxMJ
|
4
|
+
U1NMIFNhbGVzMRkwFwYDVQQDExB3d3cuZ2VvY2VydHMuY29tMIGfMA0GCSqGSIb3
|
5
|
+
DQEBAQUAA4GNADCBiQKBgQDdlqVkMMohJ1kUqBxqZJojCFtJFht7f4JDs5kURI7Q
|
6
|
+
SCpN6eB/KLqP4x8skx3FGktU/Vgsdri9OeLS71cyw389eJyxmDFroicE0pyAd2o6
|
7
|
+
dZGh1x9/7AJuIDwolhyNAhHLtKppTRh1LIUoU2ZU9xuywN9QzI5Yj29pNBaszsbE
|
8
|
+
JwIDAQABoAAwDQYJKoZIhvcNAQEFBQADgYEAC3LXB167uc3gXxMSn+aMk6FxnAaB
|
9
|
+
o7FMPV//zpk7gqijWxDmDaiIKp5cCKzoaC6M53vR00cx4O65V5La9U39I5NFqmqP
|
10
|
+
m/x5k6iO35VPTrqbO0ZXM2YsoDarjNnYBYBwLd/MpjpVZIHIRcyndK6gWrU15T4I
|
11
|
+
cfsIpGfkscraHNA=
|
12
|
+
-----END CERTIFICATE REQUEST-----
|
@@ -0,0 +1,14 @@
|
|
1
|
+
-----BEGIN CERTIFICATE REQUEST-----
|
2
|
+
MIIB+zCCAWQCAQAwgaUxCzAJBgNVBAYTAkdCMRIwEAYDVQQIEwlCZXJrc2hpcmUx
|
3
|
+
EDAOBgNVBAcTB05ld2J1cnkxFzAVBgNVBAoTDk15IENvbXBhbnkgTHRkMQ4wDAYD
|
4
|
+
VQQLEwVTYWxlczEnMCUGA1UEAxMed3d3LnVuc3VwcG9ydGVkLWV4dGVudGlvbnMu
|
5
|
+
bmV0MR4wHAYJKoZIhvcNAQkBFg91c2VyQGRvbWFpbi5jb20wgZ8wDQYJKoZIhvcN
|
6
|
+
AQEBBQADgY0AMIGJAoGBAK7A15mxNCj+NoDbOYgiDp5V3i3+I3qww73iwy6UjA8e
|
7
|
+
/+xOvdLCsXapBCQEz6Zj+AUTPIqVeo6WZbZSHBocBCztRqj5B17gudsaBnV+wJ7h
|
8
|
+
Cqy+/TWG95DwlwDSBkoNL5aaB1ytwDJke2+s77RUrI26teTCqdXWJ4EzvOEiZUFZ
|
9
|
+
AgMBAAGgFTATBgkqhkiG9w0BCQcxBgwEKiZeJTANBgkqhkiG9w0BAQUFAAOBgQBA
|
10
|
+
Idns2ji1Mgs/DMEnBejSpD/cXFQytIZw0hcthhhRYzeZC44SeLoOQl7zusySAnlq
|
11
|
+
Pk3NonCEGHYDTw7A3s4RNxsfhEnCddB3hvW07tJzFq/CAyC8kack/3zCzfTT6ZCg
|
12
|
+
E6vUd3TRLLjR2KYz34fsvH7VExIm6ilNUzyvIu2oCQ==
|
13
|
+
-----END CERTIFICATE REQUEST-----
|
14
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
-----BEGIN CERTIFICATE REQUEST-----
|
2
|
+
MIIDETCCAfkCAQAwgZgxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdGbG9yaWRhMRAw
|
3
|
+
DgYDVQQHEwdPcmxhbmRvMRYwFAYDVQQKEw1FbnZ5IExhYnMgTExDMREwDwYDVQQL
|
4
|
+
EwhJbnRlcm5ldDEVMBMGA1UEAxMMZW52eWxhYnMuY29tMSMwIQYJKoZIhvcNAQkB
|
5
|
+
FhRzdXBwb3J0QGVudnlsYWJzLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
6
|
+
AQoCggEBALlhCULQ4sdyrB48Fz7+FZ8c7IYJAXpJU/bnsTeRvf2je5xD9ZOpQbLA
|
7
|
+
lprXaDWWd28LJOenQ7zxPGNGhcsdSnZ/zZautNVh9hgTmqfOCqZO6UV3atmrR3Wc
|
8
|
+
69ZRbIEKf6IjwWpA1IjIa4fI82UVXL2k0R2ZZyz1gvBapa50WEWqYvzv385q9NAP
|
9
|
+
lqqZsrh11Sl1jxdk5+a9y74TOyFRwPHH2ZVVAYurZ0JuiAbyiKD+XruL9A2eXw1c
|
10
|
+
dAuUiOsmoXrt9lYyXhwcgrrgpdt/uP4+fn5HR+QOEPrB6lX48O3r06KkoYNJ3PKw
|
11
|
+
+UhhJpiBK8hn7IR5nHKSb0fq+6Rd+08CAwEAAaAzMBcGCSqGSIb3DQEJBzEKEwhw
|
12
|
+
YXNzd29yZDAYBgkqhkiG9w0BCQIxCxMJRW52eSBMYWJzMA0GCSqGSIb3DQEBBQUA
|
13
|
+
A4IBAQCE17fnA6ew4gddqo4yXArRjkmYjSWR7/fc620tSEfo6DXS0ToZfDcT/Qo2
|
14
|
+
O9i2BLNJjz2zvGzuH39vlFqFy+YYf2EIUZb4NLPAWacdB0XKNX4S8dwUlNW7q9Ji
|
15
|
+
SdDI3ggIyUusI9Uw8MQWLgcso3T3f3jIpTLAB+4uy7V4xWNTVrqlcf/bEIlJt/gA
|
16
|
+
Seg7hhHWrhmbJ0UjV8CBs/7IITzpkUZbNyuT0XwjU/WbadiSvB3G9jc8yhWPQmo+
|
17
|
+
LhNnqXFgShvlkUpugjyz2igUzR9uRZwUG1iHMC+0l7mZ2DD0HKdWeAnMdfVJMSGc
|
18
|
+
UhWy1VRgbLSjxJNAOQZSJwta+q/h
|
19
|
+
-----END CERTIFICATE REQUEST-----
|
@@ -0,0 +1,17 @@
|
|
1
|
+
-----BEGIN CERTIFICATE REQUEST-----
|
2
|
+
MIICvDCCAaQCAQAwdzELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0dlb3JnaWExEDAO
|
3
|
+
BgNVBAcTB0F0bGFudGExFTATBgNVBAoTDEdlb0NlcnRzIEluYzESMBAGA1UECxMJ
|
4
|
+
U1NMIFNhbGVzMRkwFwYDVQQDExB3d3cuZ2VvY2VydHMuY29tMIIBIjANBgkqhkiG
|
5
|
+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuXWzKA84WdxAhyOSsJgyh4Xa6UCItYcEanPL
|
6
|
+
1NP5vAsDXyoGlKry49hRDGQkX6SQ+ER3NLYw7jjADn0eB9wIe3RRABRaHzaGTR4s
|
7
|
+
aFuRlBFahWq7WlRXtyGGM/3LO93GXbN/ZGqZVVzkP/4UhPge6mEs81mTmVAiuLan
|
8
|
+
RrNnakt/6wJuJg/leyaXtQ82RHE6Oge+h8LaEbHUtfx2Z8ooiwAr4hk4rAH3AqQf
|
9
|
+
mWiEF+XDIEDI0fBWcUCEXTxpfthojP6JuRC1PS1X9kk5P4ol3nSDlDl4YS4x6LF8
|
10
|
+
OYhZyBMLxCat9YueS7T8vx64+ilwhXevsqVVu84HHx1TDupLjwIDAQABoAAwDQYJ
|
11
|
+
KoZIhvcNAQEFBQADggEBAF9xFJQK0R7m75Qw2LWjQ5jI/V1XlOca0G61TKyuYXdn
|
12
|
+
LpJkIo8cpRnU7/GCEM/lSAmIx2sQeIwpzGErwqLVlq3GnsbbDEkaclJ9hAtalDIc
|
13
|
+
UrH8Crso1GehjNy08r8UppveG+b/sD7L2GDf7Pxqdxb3x+vt5osmo0l12BFf/85s
|
14
|
+
K5tjLVnkqjtbMdESgOPvML0Ppq+q9M4TURDqs8zbMSJBu10oZDgxOyGw53JA7yI3
|
15
|
+
PgiRWlylJlblXTpHm/jvPXaEMeCJ9CrO0z4bMF61A52yFW2+jFmA1L58a7OQ68Kg
|
16
|
+
u+witRMeQm42iOZGES2p9d/wLPwKXgRPzcvgNyiRLiI=
|
17
|
+
-----END CERTIFICATE REQUEST-----
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEogIBAAKCAQEAuXWzKA84WdxAhyOSsJgyh4Xa6UCItYcEanPL1NP5vAsDXyoG
|
3
|
+
lKry49hRDGQkX6SQ+ER3NLYw7jjADn0eB9wIe3RRABRaHzaGTR4saFuRlBFahWq7
|
4
|
+
WlRXtyGGM/3LO93GXbN/ZGqZVVzkP/4UhPge6mEs81mTmVAiuLanRrNnakt/6wJu
|
5
|
+
Jg/leyaXtQ82RHE6Oge+h8LaEbHUtfx2Z8ooiwAr4hk4rAH3AqQfmWiEF+XDIEDI
|
6
|
+
0fBWcUCEXTxpfthojP6JuRC1PS1X9kk5P4ol3nSDlDl4YS4x6LF8OYhZyBMLxCat
|
7
|
+
9YueS7T8vx64+ilwhXevsqVVu84HHx1TDupLjwIDAQABAoIBAGXVvURX5ydgi4Yp
|
8
|
+
AFk7mTNVSrkdmHOk6cXSQ7BfnRemLHnKx8ZGgAygMRDOxDJIWNoaLiKhkAie3MaX
|
9
|
+
6S+DoJy5Z+jVRA8zj1c1JElBTpSxWrU7wBh/i5KhM+HEkB4VTuEQuPjYl82JrkN9
|
10
|
+
LqM84yzroxUUsLlUiVxH314xEK4KS4vzEte9Mf3YGO00OTcKRHig3J1en+5m56i/
|
11
|
+
3GsGjCogT8xTAPV+KSX6qU7GQ/1KE0soQzt2WlVQT7HwvcUhLn2C9l28Asn+mZaF
|
12
|
+
1aPsiEoFGPsBfDopWywST6dvxe4RHByLWEpjUUKhUMuv8Eqfd531+qPFnhrHn9QY
|
13
|
+
aM5SFAECgYEA4VLDcDjALNNZEYN/hZHm9l/RJONHZ+CLAwpTHDdlwcejHL8gxTo0
|
14
|
+
G8cEbgT0IyL6dIAC8aB/ne7Cb/Ua2AIklA04FJe2B4Q83ICmPFtHdoQq/ViGqVxM
|
15
|
+
yvU/KY28A7UYIGYmoKFsONo//HIXED61iK7ChUDMUXcZpublOTEQFo8CgYEA0rWQ
|
16
|
+
p1EebI7cZqQzSs2wueTKDDswIRnIoX9x8O0Ar1HkzoJ2JOAW999UZ8x8jeQhRNQX
|
17
|
+
NZ/r+ixWvzzVPQva+SxgQqx4dB08NJGgdEOkYqzl3bRnR2q2I+nyNDYU8elxIvUd
|
18
|
+
95OGOQZGd12oLUKBG3YIb8Oc4Hfwz5/7ACqE+wECgYBfF1iXobuor0ElnQNSUXLR
|
19
|
+
gzp2gNx/wEmqbM8KV27ASwpRdW/VDG01U9ZQwBJwSbC9PdEAPCXfdwXjzeMYSj85
|
20
|
+
pCKIvkX6AhrVTA3b5wHPyJOD+7pI+0UFWl7foIs6XVDjS3j9zWIo1CKw3U1Sc8SU
|
21
|
+
/HvnVKNltgfDYipW6pfJjQKBgBajPRxMwckF/DXm1D/oI2GFbBOuVDhqLbz0FUi+
|
22
|
+
HcG4Oa3aJFlH3g/ZZZcVSBhydwSPCMNRICgrlVJMddhuKqN0mg7vuq026t32+1ci
|
23
|
+
YUncq4GLPUFV/KWVH9luKgfnfak0znhn2BbOTsnKPSRHrdlGcBeZ24PePvf/hxb4
|
24
|
+
ensBAoGANyQfL6E4RcBHQWZ1d2wq+Gd/mFctLrHWaJwdYd0dxd7oQ5zhue7+yPfD
|
25
|
+
q5dosxjGs7ZEF5HbMwf5Iv0RAkb/W4BKja/tC6PIplpCTt59COlGdnLyHJeoRmF6
|
26
|
+
KnSai8jcXz2SWdOMQWgHSSdfWqxosIf3wAIwbtY7wNv1t+1JguE=
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,15 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIICXQIBAAKBgQDdlqVkMMohJ1kUqBxqZJojCFtJFht7f4JDs5kURI7QSCpN6eB/
|
3
|
+
KLqP4x8skx3FGktU/Vgsdri9OeLS71cyw389eJyxmDFroicE0pyAd2o6dZGh1x9/
|
4
|
+
7AJuIDwolhyNAhHLtKppTRh1LIUoU2ZU9xuywN9QzI5Yj29pNBaszsbEJwIDAQAB
|
5
|
+
AoGBALm8LTPW5YZ2qedzpiXT35MfzQxs+GpDDdhbsSNY9/BDnRojwKY1aHN1J8tA
|
6
|
+
IUL2cFBz7rWOaflKjQLL1WZakcpQW9msIemPF0gKD5cNJrMuPcHZEu5vpPOXcTtR
|
7
|
+
N4VxW5+U/PYU5J69j6q800z/Z0rWl+YtLnKc8ZbIIbFX1DBhAkEA9U4WR9QokPDf
|
8
|
+
IPjDJOZkBVvvLLfnCx8RkcTmrJslfJ/5VrFLCVHMw1oaZuDOJVIG8bvMElcQR3/E
|
9
|
+
qUHCw90V9wJBAOc/2i9gY/Mimzfs9xBNv+NFXEoJdoVHw9NAZgDi9otHZmfQHzYh
|
10
|
+
3DCQLzptJSp4cArVL5SB1mlLBFpmhBkLd1ECQAzjHFKLt9HdhatixkXDANAzQz5z
|
11
|
+
LuUrra2dzYyV3gNNGDlQuSN1M6+zpR1whAP76jd66T6xaj6HXNqThNrrW4MCQDAI
|
12
|
+
rlx67Cf7vzwdp7AmRj6CEMp8Lrc+kemWjdmPS2Dg4t+bdnA7Fk6sFHNRao/o1nUZ
|
13
|
+
lTmGwq+6WlwgwT2miRECQQDrfnkHnjQP3yWtuwzx8/LeMSZ6rfMmQAAWUnF6FoRg
|
14
|
+
/v7SVDx353vmj8k+ulQoyP6RKCnKZf4dGPRWCgpetdRk
|
15
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,30 @@
|
|
1
|
+
-----BEGIN NEW CERTIFICATE REQUEST-----
|
2
|
+
MIIE3TCCA8UCAQAwga8xGTAXBgNVBAMMEG1haWwuc2lwY2hlbS5jb20xCzAJBgNV
|
3
|
+
BAsMAklUMTwwOgYDVQQKDDNTYXVkaSBJbnRlcm5hdGlvbmFsIFBldHJvY2hlbWlj
|
4
|
+
YWwgQ29tcGFueSAoU0lQQ0hFTSkxHzAdBgNVBAcMFkp1YmFpbCBJbmR1c3RyaWFs
|
5
|
+
IENpdHkxGTAXBgNVBAgMEEVhc3Rlcm4gUHJvdmluY2UxCzAJBgNVBAYTAlNBMIIB
|
6
|
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv3FqEVQCm0bBsA1YQX+/cq0y
|
7
|
+
2ZBPMsrQtP5S8F8bi2S8b6+BmsPuOIo7pdl7KYmpiD228mrpQqyrwkX7oBkNn94u
|
8
|
+
TnxUlNJ+ach8Ni+V42O0IAALtYBd1JNoaCqmpr4+xmtWvdFow3cDTSYmqPapY9iN
|
9
|
+
2fxDm7VdNv9WMV89CrZg0a6F2p+PaKn8hOR1guax2AYnyVNx9DZJYiHqRfGXyWM1
|
10
|
+
dIZaHTL/RtOzhrzxOvU/u+qulzWsSIslrz36rDqNTdDHGZNbKzix1etA0qP349/B
|
11
|
+
jqIN7lP4+8pjaPp/Ygit6M2wuCTFhq5rm5SHanBlzCCq8pyhraQCjTvdNH0JRQID
|
12
|
+
AQABoIIB5jAaBgorBgEEAYI3DQIDMQwWCjYuMS43NjAwLjIwZQYJKwYBBAGCNxUU
|
13
|
+
MVgwVgIBBQwYc2lwYy1jYXMwMS5zaXBjaGVtLmxvY2FsDBNTSVBDSEVNXFNJUEMt
|
14
|
+
Q0FTMDEkDCJNaWNyb3NvZnQuRXhjaGFuZ2UuU2VydmljZUhvc3QuZXhlMHIGCisG
|
15
|
+
AQQBgjcNAgIxZDBiAgEBHloATQBpAGMAcgBvAHMAbwBmAHQAIABSAFMAQQAgAFMA
|
16
|
+
QwBoAGEAbgBuAGUAbAAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIA
|
17
|
+
bwB2AGkAZABlAHIDAQAwgewGCSqGSIb3DQEJDjGB3jCB2zAOBgNVHQ8BAf8EBAMC
|
18
|
+
BaAwgZsGA1UdEQSBkzCBkIISbWFpbC5zaXBjaGVtLmxvY2FsghBtYWlsLnNpcGNo
|
19
|
+
ZW0uY29tggtzaXBjaGVtLmNvbYIaYXV0b2Rpc2NvdmVyLnNpcGNoZW0ubG9jYWyC
|
20
|
+
GGF1dG9kaXNjb3Zlci5zaXBjaGVtLmNvbYIKc2lwYy1jYXMwMYIKc2lwYy1jYXMw
|
21
|
+
MoINc2lwY2hlbS5sb2NhbDAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSqTt2+024w
|
22
|
+
mEJ1nXZpJKMvJAb/uTANBgkqhkiG9w0BAQUFAAOCAQEAIMAxnkhyqkmnqdXfWVSV
|
23
|
+
ucYeulY0UWlxquBO91n39Vx7f8dDuTlxLXnO4N0GYgkHQWB+NJOXpGhowRc9iJLV
|
24
|
+
uKFzCbF/t5JekmGU+Vh3+Lns/09pa4zs1LAU+lvfEosI0ay8iBRP7aN0h4H6W7Y9
|
25
|
+
cmh3Z1OemLy3HvbHkplbNN0agEpcITOzvugN5SnGaXS44271VSas10pBWD27CjlA
|
26
|
+
nsP4Q1n8OHO9I83UTGqjqzMjMnFMZ7DcFIzEoW8M6TqJQsQVpZ+6WxGKG/1z63Ka
|
27
|
+
OGbJUk+wK5KJjp8fkB1gSlQhvEyDF6DFcQCjbcssfn06hobLuiF2aNb9YDFUf+s/
|
28
|
+
9g==
|
29
|
+
-----END NEW CERTIFICATE REQUEST-----
|
30
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIEHTCCAwWgAwIBAgIDI2WeMA0GCSqGSIb3DQEBBQUAMEkxCzAJBgNVBAYTAkhL
|
3
|
+
MRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSIwIAYDVQQDExlIb25na29uZyBQb3N0
|
4
|
+
IGUtQ2VydCBDQSAxMB4XDTA5MDgxMDA4NDYwOVoXDTExMDgyOTE2MDAwMFowgcMx
|
5
|
+
CzAJBgNVBAYTAkhLMSYwJAYDVQQKEx1Ib25na29uZyBQb3N0IGUtQ2VydCAoU2Vy
|
6
|
+
dmVyKTETMBEGA1UECxMKMDAwMDA3NzE1NjElMCMGA1UECxMcMDAwMDAwMDAwMDAw
|
7
|
+
MDAwMDAwMDAwMDAwSEtQTzEhMB8GA1UECxMYSG9uZyBLb25nIFNBUiBHb3Zlcm5t
|
8
|
+
ZW50MQ0wCwYDVQQLEwRIS1BPMR4wHAYDVQQDExVhcHAxLmhvbmdrb25ncG9zdC5j
|
9
|
+
b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKB5YgVYDWFfeQSg7Bd3cWDK
|
10
|
+
UnArAqfNqGC59KxwwY5tpy8QQNpI8l/SHDpDqJ0E/4pNFEDFNSv2c/VaORmxybqI
|
11
|
+
mbP6iUZuxjBa3YMfDYMuVjvA+cw7JGsyE3hPz3OJlkzTIgB4J7Hvbo+XlKn8a/N4
|
12
|
+
rBeNVQm0QBdBagctkVKTAgMBAAGjggEVMIIBETA+BgNVHSAENzA1MDMGCisGAQQB
|
13
|
+
/R4BARAwJTAjBggrBgEFBQcCARYXd3d3Lmhvbmdrb25ncG9zdC5nb3YuaGswCQYD
|
14
|
+
VR0TBAIwADARBglghkgBhvhCAQEEBAMCBkAwDgYDVR0PAQH/BAQDAgUgMFoGA1Ud
|
15
|
+
IwRTMFGhS6RJMEcxCzAJBgNVBAYTAkhLMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0
|
16
|
+
MSAwHgYDVQQDExdIb25na29uZyBQb3N0IFJvb3QgQ0EgMYICA+0wRQYDVR0fBD4w
|
17
|
+
PDA6oDigNoY0aHR0cDovL2NybDEuaG9uZ2tvbmdwb3N0Lmdvdi5oay9jcmwvZUNl
|
18
|
+
cnRDQTFDUkwyLmNybDANBgkqhkiG9w0BAQUFAAOCAQEAsyO3KMxHle+AyWM8Ku5v
|
19
|
+
Sz2uXaR8YmadOIBc8MKe522j6eq2MORC4EQ/ObCJ2vzyq8NoJ6aUtIi8k3He9B00
|
20
|
+
pRKa9uAtgFGW1HVr6soGWvr4UcSVCDYs6C58+XEgbzCiurO5IIaprQCjOptkTLa/
|
21
|
+
x4QXkF6YVvtYXufjILl1i5RPr6YmwByeGxJnPKUhNuDsqJ9PfGqq3wfBX7ogEwG7
|
22
|
+
Hu9L2Kbk9P7+OvqU7flh9GfxhPOTyFvN9itwcmImIScM9EG59JsZOBZHN4SeUzWk
|
23
|
+
cYrNNv1NTqzBfFWKnX1aAuzeSC3tQP472gC+NgTcL84aBBjCk+2xmwP9OLdQyrkd
|
24
|
+
ZQ==
|
25
|
+
-----END CERTIFICATE-----
|
26
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
3
|
+
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
|
4
|
+
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
|
5
|
+
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
|
6
|
+
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
|
7
|
+
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
|
8
|
+
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
|
9
|
+
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
|
10
|
+
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
|
11
|
+
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
|
12
|
+
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
|
13
|
+
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
|
14
|
+
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
|
15
|
+
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
16
|
+
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
|
17
|
+
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
|
18
|
+
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
|
19
|
+
-----END CERTIFICATE-----
|
20
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIEnDCCA4SgAwIBAgIQaUiiayAapCHomLHEksfFjjANBgkqhkiG9w0BAQUFADBY
|
3
|
+
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
|
4
|
+
R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
|
5
|
+
MjkwMDAwMDBaFw0xNjExMjgyMzU5NTlaMIGFMQswCQYDVQQGEwJVUzEVMBMGA1UE
|
6
|
+
ChMMR2VvVHJ1c3QgSW5jMTEwLwYDVQQLEyhTZWUgd3d3Lmdlb3RydXN0LmNvbS9y
|
7
|
+
ZXNvdXJjZXMvY3BzIChjKTA2MSwwKgYDVQQDEyNHZW9UcnVzdCBFeHRlbmRlZCBW
|
8
|
+
YWxpZGF0aW9uIFNTTCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
9
|
+
AMLv7ewLLXKKdGhzNm4QqH5If1i7eGfc7XvWfKZPPZ9dbwrQoLRl/b7Tv3e2lKWC
|
10
|
+
/4GVnSgQBuzCtJCqWlFMc9lrdKg1SfSmNoDUXHWennwBx4ycgciGgxqOvQATotz/
|
11
|
+
pXiqdywhYgiXP4C992ekedt91z5uttWWuZiGTnpn4pOv2qXRJ/vxZsMqAwy2x4Id
|
12
|
+
Ofs83ik2cV3hqLUWOXwb/3uG9YCSleADO6pE+/QAteWp4voY+YSaweH2Lg6BixQp
|
13
|
+
NP8fVWCIpJnGb28EOTp1pKceWN+3/8maHXDbg6DTgxstbSqQW6NjkXO1/52CekHz
|
14
|
+
06ovCw2fz0TAXseha8+ulNsCAwEAAaOCATIwggEuMB0GA1UdDgQWBBQoxOuP8V95
|
15
|
+
kKMrVcNWTn1rU3IsGDA9BggrBgEFBQcBAQQxMC8wLQYIKwYBBQUHMAGGIWh0dHA6
|
16
|
+
Ly9FVlNlY3VyZS1vY3NwLmdlb3RydXN0LmNvbTASBgNVHRMBAf8ECDAGAQH/AgEA
|
17
|
+
MEYGA1UdIAQ/MD0wOwYEVR0gADAzMDEGCCsGAQUFBwIBFiVodHRwOi8vd3d3Lmdl
|
18
|
+
b3RydXN0LmNvbS9yZXNvdXJjZXMvY3BzMEEGA1UdHwQ6MDgwNqA0oDKGMGh0dHA6
|
19
|
+
Ly9FVlNlY3VyZS1jcmwuZ2VvdHJ1c3QuY29tL0dlb1RydXN0UENBLmNybDAOBgNV
|
20
|
+
HQ8BAf8EBAMCAQYwHwYDVR0jBBgwFoAULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
|
21
|
+
KoZIhvcNAQEFBQADggEBAAJgoxYSndgcGeRaN2z/Mpg3Rk+8gXyAw8qJKgD+Xj7s
|
22
|
+
uowrH6uVa5GUIaBgHwIG+s8XbfiVq814IxSWwJ0fG+tQ4WVCitKzya2Aw2fPtFgb
|
23
|
+
1QTkWP40ReD7pIQii+niN0yY8Qv/pIlT0U3AaEjXWYcaO3310Pkjcspg/cMiFfCa
|
24
|
+
lVhvfCST7KUSPbQbAejuae1Ba1LLmrdcFdG9BkB64AyXy2Dngl9qX95JhFZqr3yw
|
25
|
+
S62MTw95oMwRPCXnRr960C+IyL/rlAtqdTN/cwC4EnAjXlV/RVseELECaNgnQM8k
|
26
|
+
CeJldM6JRI17KJBorqzCOMhWDTOIKH9U/Dw8UAmTPTg=
|
27
|
+
-----END CERTIFICATE-----
|
28
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDizCCAvSgAwIBAgIDBo4dMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
|
3
|
+
MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
|
4
|
+
aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMTI4MTYwODMxWhcNMTgwODIxMTUwODMx
|
5
|
+
WjBYMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UE
|
6
|
+
AxMoR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIw
|
7
|
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64FXv/1Hx9Z62DZHvIQlMt3/aE
|
8
|
+
CCBh1gFZapxEEa/vdv2Vfs5hMLt6g18CvQFmyu4VjW+hMJy9oYWelDrzVogAMc/Y
|
9
|
+
7mqWAtntA4z7dW3n6rhVFgUWmvTgXrGIwGSFXBVNiMe3uuB16a0FPZ3HiUjguyjI
|
10
|
+
A+Ewk2ReUsBZcCI1V4iK8ZUKg9e8MXMBNO3vRnHgawKoNXJrl5tm4MsceV/YGgRo
|
11
|
+
HkcC5p1g4jaXAd/ONZLfvmfHbXdZO4+d1pAVlLxCNBDBOfmxJz5+1op1xbKvltOi
|
12
|
+
3pvkmL594emBrbZv/NcO2uA0sA0ad+fjCJjvWPqchLc2r8LfrNL0EAZwcTUCAwEA
|
13
|
+
AaOB6DCB5TAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFCzVUEGXFYvwjzZhW0r7
|
14
|
+
a9mZyTOSMB8GA1UdIwQYMBaAFEjmaPkr0rKV10fYIyAQTzOYkJ/UMA8GA1UdEwEB
|
15
|
+
/wQFMAMBAf8wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5j
|
16
|
+
b20vY3Jscy9zZWN1cmVjYS5jcmwwRgYDVR0gBD8wPTA7BgRVHSAAMDMwMQYIKwYB
|
17
|
+
BQUHAgEWJWh0dHA6Ly93d3cuZ2VvdHJ1c3QuY29tL3Jlc291cmNlcy9jcHMwDQYJ
|
18
|
+
KoZIhvcNAQEFBQADgYEAe2AG6d2nHSkI7xH51Ts80itTyz7tvnZgZEig5svoScMa
|
19
|
+
v92txUy9U0hVQdsYsU47OmgsJFpB9cipRKYyKS11+E3yUI7w4pvp4eQ7cLcyiduo
|
20
|
+
OcVbaFa9BBXDtssbJEqn/MTVjbaY3QP2sbOU2j9SoKRQBspFZ07/8UGJQAA2fnk=
|
21
|
+
-----END CERTIFICATE-----
|
22
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
|
3
|
+
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
|
4
|
+
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
|
5
|
+
MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
|
6
|
+
YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
|
7
|
+
aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
|
8
|
+
jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
|
9
|
+
xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
|
10
|
+
1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
|
11
|
+
snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
|
12
|
+
U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
|
13
|
+
9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
|
14
|
+
BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
|
15
|
+
AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
|
16
|
+
yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
|
17
|
+
38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
|
18
|
+
AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
|
19
|
+
DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
|
20
|
+
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
21
|
+
-----END CERTIFICATE-----
|
22
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDMjCCAhqgAwIBAgICA+0wDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
|
3
|
+
FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
|
4
|
+
Um9vdCBDQSAxMB4XDTAzMDUxNTA3MjkzNFoXDTEzMDUxNTA3MjkxMFowSTELMAkG
|
5
|
+
A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIjAgBgNVBAMTGUhvbmdr
|
6
|
+
b25nIFBvc3QgZS1DZXJ0IENBIDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
7
|
+
AoIBAQDMuy41bQKNRsp21OVxWu3JI4Vp48VgeVriKqLBhmdOird5LD9FhsiIStw0
|
8
|
+
mOXZVuwJ8HmpuE4phvqIpSuxKhz/eCCTWO0duIa7XZ36uEv3vWJowjkcmn/r+6V3
|
9
|
+
AN1Ts/1Ga39eqVIIJGMVDpFAH1vS3II7YOoYWJkfbwgIxSJ80bVxroNEzP2T2bW/
|
10
|
+
m4JhFhGC2WBHM8mobpvqqRFPQ1uc+w7bFMs3mKc+zq71FjTu0s3NAZu3LXIdMYn2
|
11
|
+
pOM0agz8J3Yn/3Stru3UiC7HASupAcasbIAf6edrroYf4ZvQQp4oiaG9bGEchjyw
|
12
|
+
ghGQPn9MFq+AzV1SkCjl/LPd3FFRAgMBAAGjJjAkMBIGA1UdEwEB/wQIMAYBAf8C
|
13
|
+
AQAwDgYDVR0PAQH/BAQDAgHGMA0GCSqGSIb3DQEBBQUAA4IBAQChcHcWuSHwYRMl
|
14
|
+
RFbLCt0ee9zmataVUMaCpSNwHutmvaYbnwDe30ipJkUzxBlTcWgHp5zKTZLzU8go
|
15
|
+
rsA+pHpznU2VLD+Sr1OOpefJ+t04ZmkAYpTCsi65SEEL3dhFRF/fHtTK/4JKSHuZ
|
16
|
+
3oyuHwbjONGRPos212h/EFw20vR5R2acK8l5/6iPkl+jKhmfqsHd5Ve/JWN3G05+
|
17
|
+
4KkrAgLFjCXUh9PmFTeGsR7GELuL6xQC33udGnLDRALdumafePAMbKqYLUb6Ftrz
|
18
|
+
Fb9gih/+sTUt+hWme/Bas3Vwl7oswqzMDaJG4q/vqO5w48LPvE1nKEMoVw5nzJ+h
|
19
|
+
f+4cB/TZ
|
20
|
+
-----END CERTIFICATE-----
|
21
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDLTCCAhWgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJISzEW
|
3
|
+
MBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEeMBwGA1UEAxMVSG9uZ2tvbmcgUG9zdCBS
|
4
|
+
b290IENBMB4XDTAwMDExNjA4NDMwMFoXDTEwMDExNjIzNTkwMFowRzELMAkGA1UE
|
5
|
+
BhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25n
|
6
|
+
IFBvc3QgZS1DZXJ0IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
|
7
|
+
0Nimo3Osj9gWM+WFpQ5PksMquQ8CXOUdpHCOl9l5KvGZqdSH3QhYhYDe0MmM+mSO
|
8
|
+
Oz1HHxjDniDmEZuzTveQdhlkOYuW5zAhNy7R+kXOnEku0Tmvrd6/YEHQxThgTXSk
|
9
|
+
wF0vcd4zMrajUNQUv+d1QbL40Gg6mV3T3wbZG9gk4KblakGd/znx/EeNAGaLRrjU
|
10
|
+
GNn3l/DmxzEf80uBtLYBsBhUzCA24SqpMh5x3waEyN/kNzjb7NT0XI0hKs0yGE32
|
11
|
+
R7hrkHM/RSTa7in0AqLy/gJaPBIypzpY+5h/XRMmef0yAggWThOJJtWhJC8/AwOF
|
12
|
+
wPfAkZtJ71+f8+2c6t7x7wIDAQABoyYwJDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0T
|
13
|
+
AQH/BAgwBgEB/wIBADANBgkqhkiG9w0BAQUFAAOCAQEAbaENyadgv8R5k2qUGWCm
|
14
|
+
4iA3XLu/P8qo6sulk+M+bKpL8WmU+Pl36yeBZax+QJTrHrdqgvgaZNvfmRykOvVm
|
15
|
+
OZMGLSG9DxejqZtydEC5kGCqr3XmdQgkM8END5YDZNaOlj92WAVnuF7lw0nM54w9
|
16
|
+
1URkLN7I6tbAbD4X66HwKB2JotO9EPLbdVrMZIPOj7wNMWdxbBImmHIizH3mD7HV
|
17
|
+
VdjLQNgh5ErB2mDouKLwHX/ok2GiiNRC8vNqBgV7cJDs58c23Pm7q2TjjmkAMCc0
|
18
|
+
dy0QCKffH1ncMcPkVha1EhIx35HMyDa0RPJlVjW0M9LWMzfup9luU3uYKd1EG4g+
|
19
|
+
fA==
|
20
|
+
-----END CERTIFICATE-----
|
21
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx
|
3
|
+
FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg
|
4
|
+
Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG
|
5
|
+
A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr
|
6
|
+
b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
7
|
+
AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ
|
8
|
+
jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn
|
9
|
+
PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh
|
10
|
+
ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9
|
11
|
+
nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h
|
12
|
+
q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED
|
13
|
+
MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC
|
14
|
+
mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3
|
15
|
+
7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB
|
16
|
+
oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs
|
17
|
+
EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO
|
18
|
+
fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi
|
19
|
+
AmvZWg==
|
20
|
+
-----END CERTIFICATE-----
|
21
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDKzCCAhOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJISzEW
|
3
|
+
MBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEeMBwGA1UEAxMVSG9uZ2tvbmcgUG9zdCBS
|
4
|
+
b290IENBMB4XDTAwMDExNjA3NDIwMFoXDTEwMDExNjIzNTkwMFowRTELMAkGA1UE
|
5
|
+
BhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxHjAcBgNVBAMTFUhvbmdrb25n
|
6
|
+
IFBvc3QgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKWi
|
7
|
+
kb485TY8Su80j4j9um1xpmJy7cIGvHYlu4pfFSUnON3pkZEBim+O1Vumvz4js2PD
|
8
|
+
VOHxwwyWTPt6Dice8CMQgNIoaL0GlYt96Sn51Cf28ndfIqslqEWXl0VWYVichyQy
|
9
|
+
nTgdPe24HHQFNWWgpZEPr2g9eg9cIfvnLBv+VoZScXNkgdTghIDQlVa9SdA9JDNd
|
10
|
+
jnqCOFS2avS6dGkuu9FBcBF05jdoY69M6tyiIM32j0zm0IAIJFCZGHTlztYH0HgW
|
11
|
+
Bl893IXLdD94fxnIDY5IVGlqBYCpbLJB/rQEBou6taJ+Kaaqr0HpHEkRtw1ICHJ/
|
12
|
+
S4OY8xMaeUvRThTOEjMCAwEAAaMmMCQwEgYDVR0TAQH/BAgwBgEB/wIBAzAOBgNV
|
13
|
+
HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAJUFGRYwVpy5mEtANI0RW08k
|
14
|
+
8SxowrWsteC0hKBMbeyKdmHB89V08WGffL4gkidS+jEkuNGe4PNtULqt4i2vKHVr
|
15
|
+
4Srv+CHNO8vIMh7TulnPOOjykHjdnghElV+GT2qb3KKL5ZymVouGZTUcbAzKHqSe
|
16
|
+
TlwSk9J4yNhp6mmGJtSk04+tV0pY9OzGf2y7tPLHkvLOPPRCwyFnhm2lTaA/wvcY
|
17
|
+
q1fW6MeS+oanNgUOGXK/BvCspERMrD7o730LSMXBGzPpyQHQzO/+Ye2M6DKazPXJ
|
18
|
+
2ck9eKYABR0p6yYBjkv+OazFkv++cJpXwvLPIbhmLt7g1P6727RHiZJ/GLwshrU=
|
19
|
+
-----END CERTIFICATE-----
|
20
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIFaDCCBFCgAwIBAgICCokwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAlVT
|
3
|
+
MRUwEwYDVQQKEwxHZW9UcnVzdCBJbmMxMTAvBgNVBAsTKFNlZSB3d3cuZ2VvdHJ1
|
4
|
+
c3QuY29tL3Jlc291cmNlcy9jcHMgKGMpMDYxLDAqBgNVBAMTI0dlb1RydXN0IEV4
|
5
|
+
dGVuZGVkIFZhbGlkYXRpb24gU1NMIENBMB4XDTEwMDYxODIwNTUwNloXDTEyMDgx
|
6
|
+
MjE0MTkwNVowgdUxGzAZBgNVBA8TElYxLjAsIENsYXVzZSA1LihiKTETMBEGCysG
|
7
|
+
AQQBgjc8AgEDEwJVUzEYMBYGCysGAQQBgjc8AgECEwdHZW9yZ2lhMRAwDgYDVQQF
|
8
|
+
EwcwNDUwNzcxMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHR2VvcmdpYTEQMA4GA1UE
|
9
|
+
BxMHQXRsYW50YTEVMBMGA1UEChMMR2VvQ2VydHMgSW5jMRIwEAYDVQQLEwlTU0wg
|
10
|
+
U2FsZXMxGTAXBgNVBAMTEHd3dy5nZW9jZXJ0cy5jb20wggEiMA0GCSqGSIb3DQEB
|
11
|
+
AQUAA4IBDwAwggEKAoIBAQCfSaBRuqglkqNaIRqdd2CzPOVdw14YPheWEOG28iFI
|
12
|
+
Oi+Pzjk0XU+KFEJ3ID7aC+ntyb/CjXjOiv7k9Xrjp4+y4e/bXPr4Cz1SSQwYtY5Q
|
13
|
+
6xbUnRXkCn3SETsGeub8pKM/KCJB0Tbmmtqw7TgJbGSHTbWNkxTY9oUIMRYx44sE
|
14
|
+
2LLh2o08WMiYrFO2L9kRyR6rn4tLL7RGj4Q2ZZbWG4xzkwDL4GhZ9eUnOFz7vzWc
|
15
|
+
CB+EAggMlM8pck1bJD/7z8qCMbV7h/NYJFDRb8Gd1skBd0b58tYlY8sn+P9qYRWc
|
16
|
+
oWUWES8XSP/HUehuLKIzIy0JckAt88U8rRy4DLP9rD3BAgMBAAGjggGOMIIBijAf
|
17
|
+
BgNVHSMEGDAWgBQoxOuP8V95kKMrVcNWTn1rU3IsGDBuBggrBgEFBQcBAQRiMGAw
|
18
|
+
KgYIKwYBBQUHMAGGHmh0dHA6Ly9FVlNTTC1vY3NwLmdlb3RydXN0LmNvbTAyBggr
|
19
|
+
BgEFBQcwAoYmaHR0cDovL0VWU1NMLWFpYS5nZW90cnVzdC5jb20vZXZjYS5jcnQw
|
20
|
+
DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAp
|
21
|
+
BgNVHREEIjAgghB3d3cuZ2VvY2VydHMuY29tggxnZW9jZXJ0cy5jb20wQgYDVR0f
|
22
|
+
BDswOTA3oDWgM4YxaHR0cDovL0VWU1NMLWNybC5nZW90cnVzdC5jb20vY3Jscy9n
|
23
|
+
dGV4dHZhbGNhLmNybDAMBgNVHRMBAf8EAjAAMEsGA1UdIAREMEIwQAYJKwYBBAHw
|
24
|
+
IgEGMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuZ2VvdHJ1c3QuY29tL3Jlc291
|
25
|
+
cmNlcy9jcHMwDQYJKoZIhvcNAQEFBQADggEBAIppmd9Lm9+cbSPrKKlIdunEbwTU
|
26
|
+
kquqmCaJP7tP6ASb2NfJczfzpdlxidiVOp1wJxIHhuAQjhWt0nO7aOTjMD8WZa1d
|
27
|
+
NIQMWHeFyhAuqJFXtJ6Ha9t1CB+V3ksNNKIhR5urZXlRc4G7Y2udyIYuqq4VzWsS
|
28
|
+
TFCS6/lAuDob4h5+TEdm51CV6BFyJweYt4o1FKSDVKwQmRMmc4Tk2oyBlX4jKPdS
|
29
|
+
WPKMKb7f934e69sZlne575+Ml4FJm3g2QK+AR/2rSuQsO2vV+stkhknLZsCIrrkh
|
30
|
+
9zClcbFt/pHG1LTI0KNs87Eix3avl2uLIzb9MSyQbKPbtDXlH+fqSAao/mY=
|
31
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,22 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDYTCCAsqgAwIBAgIDDqS7MA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
|
3
|
+
MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
|
4
|
+
aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwMTA0MTU1ODMzWhcNMTEwMTA2MTAzNzAy
|
5
|
+
WjCB6zEpMCcGA1UEBRMgVk9hT080MW1qbHdiTS8tbFNvZWlpTjRuQWxabUJuRFMx
|
6
|
+
CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw53d3cudHdvbmdvLmNvbTETMBEGA1UECxMK
|
7
|
+
R1Q5OTYyNTQyMzExMC8GA1UECxMoU2VlIHd3dy5nZW90cnVzdC5jb20vcmVzb3Vy
|
8
|
+
Y2VzL2NwcyAoYykxMDE3MDUGA1UECxMuRG9tYWluIENvbnRyb2wgVmFsaWRhdGVk
|
9
|
+
IC0gUXVpY2tTU0wgUHJlbWl1bShSKTEXMBUGA1UEAxMOd3d3LnR3b25nby5jb20w
|
10
|
+
gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPQnD+rXT4qG8tbp9qDV4EflRm1d
|
11
|
+
z4U0DqjcSZDPVLN3ae3E1dQQP7aSe4LlgYP0ZFgn+cTNFOwe950diE22zPQR/yRq
|
12
|
+
ZhzNkXwvwxL1eirP6Evd3aX60xmQoV/g103KsVeCx+ZJ/6G1xA01x4Sw+5G1pH0j
|
13
|
+
T+NnqYAODxD3uxDnAgMBAAGjga4wgaswDgYDVR0PAQH/BAQDAgTwMB0GA1UdDgQW
|
14
|
+
BBRO6N23fnbWi7eK5OHvN05UYN+LijA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8v
|
15
|
+
Y3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDAfBgNVHSMEGDAWgBRI
|
16
|
+
5mj5K9KylddH2CMgEE8zmJCf1DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH
|
17
|
+
AwIwDQYJKoZIhvcNAQEFBQADgYEACmWFvfv3qUV3KO0j5R3eS35cl44EvVeq8FFX
|
18
|
+
Ib46eOoMybZLt4tMK56zeTyE4mACOdjqLB4G8gLYTDMw4bGpHBLnOM+F97As7FD3
|
19
|
+
VpzIfd8DBTkJqC/u9zpHz7VCWoufYIXRzH/kSh6V3TJlTWasgYsI+OLfPuXra4WY
|
20
|
+
FgjRhhc=
|
21
|
+
-----END CERTIFICATE-----
|
22
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OpenSSL::X509::Certificate do
|
4
|
+
subject { ssl_certificates('www.geocerts.com') }
|
5
|
+
|
6
|
+
it "includes the OpenSSLExtensions::X509::Certificate extensions" do
|
7
|
+
subject.should be_kind_of OpenSSLExtensions::X509::Certificate
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OpenSSLExtensions::SSL::SSLSocket do
|
4
|
+
context 'peer_cert_chain' do
|
5
|
+
it 'delegates to OpenSSLExtensions::X509::CertificateChain' do
|
6
|
+
pending 'Figure out how to stub the IO required for SSLSocket without using an actual File or TCPSocket.'
|
7
|
+
OpenSSLExtensions::X509::CertificateChain.
|
8
|
+
should_receive(:new).
|
9
|
+
with(an_instance_of(OpenSSL::X509::Certificate),
|
10
|
+
an_instance_of(Array)).
|
11
|
+
once.
|
12
|
+
and_return([])
|
13
|
+
subject.peer_cert_chain
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OpenSSLExtensions::X509::AuthorityKeyIdentifier do
|
4
|
+
context 'using a V1 identifier' do
|
5
|
+
subject { OpenSSLExtensions::X509::AuthorityKeyIdentifier.new('DirName:/C=HK/O=Hongkong Post/CN=Hongkong Post Root CA 1, serial:03:ED') }
|
6
|
+
|
7
|
+
its(:issuer_name) { should == 'Hongkong Post Root CA 1' }
|
8
|
+
its(:serial_number) { should == '03:ED' }
|
9
|
+
its(:serial) { should == '03:ED' }
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'using a V3 identifier' do
|
13
|
+
subject { OpenSSLExtensions::X509::AuthorityKeyIdentifier.new("keyid:28:C4:EB:8F:F1:5F:79:90:A3:2B:55:C3:56:4E:7D:6B:53:72:2C:18\n") }
|
14
|
+
|
15
|
+
its(:key_id) { should == '28:C4:EB:8F:F1:5F:79:90:A3:2B:55:C3:56:4E:7D:6B:53:72:2C:18' }
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OpenSSLExtensions::X509::CertificateChain do
|
4
|
+
context 'with SSL V3 certificates' do
|
5
|
+
subject do
|
6
|
+
OpenSSLExtensions::X509::CertificateChain.
|
7
|
+
new(ssl_certificates('www.geocerts.com'), [ssl_certificates('www.geocerts.com'),
|
8
|
+
ssl_certificates('GeoTrust Primary Certification Authority'),
|
9
|
+
ssl_certificates('GeoTrust Extended Validation SSL CA') ])
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'is the correct size' do
|
13
|
+
subject.size.should == 3
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'reports itself as an Array' do
|
17
|
+
subject.class.should == Array
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'is in the correct order' do
|
21
|
+
subject.should == [ssl_certificates('www.geocerts.com'),
|
22
|
+
ssl_certificates('GeoTrust Extended Validation SSL CA'),
|
23
|
+
ssl_certificates('GeoTrust Primary Certification Authority')]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'with SSL V1 certificates' do
|
28
|
+
subject do
|
29
|
+
OpenSSLExtensions::X509::CertificateChain.
|
30
|
+
new(ssl_certificates('app1.hongkongpost.com'), [ssl_certificates('app1.hongkongpost.com'),
|
31
|
+
ssl_certificates('Hongkong Post e-Cert CA'),
|
32
|
+
ssl_certificates('Hongkong Post Root CA'),
|
33
|
+
ssl_certificates('Hongkong Post e-Cert CA 1'),
|
34
|
+
ssl_certificates('Hongkong Post Root CA 1') ])
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'filters out unlinked certificates' do
|
38
|
+
subject.should_not include(ssl_certificates('Hongkong Post e-Cert CA'))
|
39
|
+
subject.should_not include(ssl_certificates('Hongkong Post Root CA'))
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'includes chained certificates' do
|
43
|
+
subject.should include(ssl_certificates('app1.hongkongpost.com'))
|
44
|
+
subject.should include(ssl_certificates('Hongkong Post e-Cert CA 1'))
|
45
|
+
subject.should include(ssl_certificates('Hongkong Post Root CA 1'))
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'is in the correct order' do
|
49
|
+
subject.should == [ssl_certificates('app1.hongkongpost.com'),
|
50
|
+
ssl_certificates('Hongkong Post e-Cert CA 1'),
|
51
|
+
ssl_certificates('Hongkong Post Root CA 1')]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OpenSSLExtensions::X509::Certificate do
|
4
|
+
subject { extended_ssl_certificates('www.geocerts.com') }
|
5
|
+
|
6
|
+
its(:subject_alternative_names) { should == %w(www.geocerts.com geocerts.com) }
|
7
|
+
its(:subject_key_identifier) { should be_nil }
|
8
|
+
its(:authority_key_identifier) { should be_kind_of(OpenSSLExtensions::X509::AuthorityKeyIdentifier) }
|
9
|
+
its(:ssl_version) { should == 3 }
|
10
|
+
|
11
|
+
context 'strength' do
|
12
|
+
it 'is 2048 bits' do
|
13
|
+
subject.strength.should == 2048
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'is 1024 bits' do
|
17
|
+
extended_ssl_certificates('www.twongo.com').strength.should == 1024
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'allows_certificate_signing?' do
|
22
|
+
context 'for V3' do
|
23
|
+
it 'is true for a root certificate' do
|
24
|
+
extended_ssl_certificates('GeoTrust Primary Certification Authority').allows_certificate_signing?.should be_true
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'is false for a site certificate' do
|
28
|
+
extended_ssl_certificates('www.geocerts.com').allows_certificate_signing?.should be_false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'for V1' do
|
33
|
+
it 'is true for a root certificate' do
|
34
|
+
extended_ssl_certificates('HongKong Post Root CA 1').allows_certificate_signing?.should be_true
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'is false for a site certificate' do
|
38
|
+
extended_ssl_certificates('app1.hongkongpost.com').allows_certificate_signing?.should be_false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'issuing_certificate?' do
|
44
|
+
context 'for V3' do
|
45
|
+
it 'is true when passing the issuing certificate' do
|
46
|
+
extended_ssl_certificates('www.geocerts.com').
|
47
|
+
issuing_certificate?(extended_ssl_certificates('GeoTrust Extended Validation SSL CA')).should be_true
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'is false when passing the distant root certificate' do
|
51
|
+
extended_ssl_certificates('www.geocerts.com').
|
52
|
+
issuing_certificate?(extended_ssl_certificates('GeoTrust Primary Certification Authority')).should be_false
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'is false when passing a different site certificate' do
|
56
|
+
extended_ssl_certificates('www.geocerts.com').
|
57
|
+
issuing_certificate?(extended_ssl_certificates('www.twongo.com'))
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'equality (==)' do
|
63
|
+
it 'is true with matching PEMs' do
|
64
|
+
ssl_certificates('www.geocerts.com').should == ssl_certificates('www.geocerts.com')
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'is false with mismatched PEMs' do
|
68
|
+
certificate = ssl_certificates('www.geocerts.com')
|
69
|
+
certificate.should_receive(:to_pem).and_return('DIFFERENTPEM')
|
70
|
+
ssl_certificates('www.geocerts.com').should_not == certificate
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context 'in a collection, uniq' do
|
75
|
+
it 'removes duplicate certificates' do
|
76
|
+
[ssl_certificates('www.geocerts.com'),
|
77
|
+
ssl_certificates('www.geocerts.com')].uniq.should ==
|
78
|
+
[ssl_certificates('www.geocerts.com')]
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'does not modify non-duplicates' do
|
82
|
+
[ssl_certificates('www.geocerts.com'),
|
83
|
+
ssl_certificates('GeoTrust Extended Validation SSL CA')].uniq.should ==
|
84
|
+
[ssl_certificates('www.geocerts.com'),
|
85
|
+
ssl_certificates('GeoTrust Extended Validation SSL CA')]
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'when a subject key identifier is provided' do
|
90
|
+
|
91
|
+
subject { ssl_certificates('GeoTrust Extended Validation SSL CA').extend(OpenSSLExtensions::X509::Certificate) }
|
92
|
+
|
93
|
+
its(:subject_key_identifier) { should == '28:C4:EB:8F:F1:5F:79:90:A3:2B:55:C3:56:4E:7D:6B:53:72:2C:18' }
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'root?' do
|
97
|
+
it 'is false for a certificate with a separate issuer' do
|
98
|
+
extended_ssl_certificates('www.geocerts.com').should_not be_root
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'is true for a certificate which is its own issuer' do
|
102
|
+
extended_ssl_certificates('equifax-secure-ca').should be_root
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'is true for a certificate with a matching subject and issuer, subject identifier given, but no authority identifier provided' do
|
106
|
+
extended_ssl_certificates('globalsign-root-ca').should be_root
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OpenSSLExtensions::X509::Name do
|
4
|
+
subject { ssl_certificates('www.geocerts.com').subject.extend(OpenSSLExtensions::X509::Name) }
|
5
|
+
|
6
|
+
its(:organization) { should == 'GeoCerts Inc' }
|
7
|
+
its(:organizational_unit) { should == 'SSL Sales' }
|
8
|
+
its(:common_name) { should == 'www.geocerts.com' }
|
9
|
+
its(:country) { should == 'US' }
|
10
|
+
its(:locality) { should == 'Atlanta' }
|
11
|
+
its(:state) { should == 'Georgia' }
|
12
|
+
its(:region) { should == 'Georgia' }
|
13
|
+
|
14
|
+
context 'with an email address' do
|
15
|
+
subject { certificate_request('envylabs').subject.extend(OpenSSLExtensions::X509::Name) }
|
16
|
+
its(:email) { should == 'support@envylabs.com' }
|
17
|
+
end
|
18
|
+
|
19
|
+
its(:location) { should == 'Atlanta, Georgia, US' }
|
20
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OpenSSLExtensions::X509::Request do
|
4
|
+
subject { extended_certificate_request('geocerts') }
|
5
|
+
|
6
|
+
context 'subject_alternative_names' do
|
7
|
+
context 'on a CSR with SANs' do
|
8
|
+
subject { extended_certificate_request('sans') }
|
9
|
+
it 'returns a collection of the alternative names' do
|
10
|
+
subject.subject_alternative_names.should ==
|
11
|
+
['mail.sipchem.local',
|
12
|
+
'mail.sipchem.com',
|
13
|
+
'sipchem.com',
|
14
|
+
'autodiscover.sipchem.local',
|
15
|
+
'autodiscover.sipchem.com',
|
16
|
+
'sipc-cas01',
|
17
|
+
'sipc-cas02',
|
18
|
+
'sipchem.local' ]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'on a CSR without SANs' do
|
23
|
+
it 'returns an empty collection' do
|
24
|
+
subject.subject_alternative_names.should == []
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'challenge_password?' do
|
30
|
+
context 'on a CSR with a challenge password' do
|
31
|
+
subject { extended_certificate_request('challenge') }
|
32
|
+
its(:challenge_password?) { should be_true }
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'on a CSR without a challenge password' do
|
36
|
+
its(:challenge_password?) { should be_false }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'strength' do
|
41
|
+
it 'is 2048 bits' do
|
42
|
+
subject.strength.should == 2048
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'is 1024 bits' do
|
46
|
+
extended_certificate_request('1024').strength.should == 1024
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'equality (==)' do
|
51
|
+
it 'is true with matching PEMs' do
|
52
|
+
extended_certificate_request('geocerts').should ==
|
53
|
+
extended_certificate_request('geocerts')
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'is false with mismatched PEMs' do
|
57
|
+
certificate = extended_certificate_request('geocerts')
|
58
|
+
certificate.should_receive(:to_pem).and_return('DIFFERENTPEM')
|
59
|
+
extended_certificate_request('geocerts').should_not == certificate
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'in a collection, uniq' do
|
64
|
+
it 'removes duplicate certificates' do
|
65
|
+
[extended_certificate_request('geocerts'),
|
66
|
+
extended_certificate_request('geocerts')].uniq.should ==
|
67
|
+
[extended_certificate_request('geocerts')]
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'does not modify non-duplicates' do
|
71
|
+
[extended_certificate_request('geocerts'),
|
72
|
+
extended_certificate_request('1024')].uniq.should ==
|
73
|
+
[extended_certificate_request('geocerts'),
|
74
|
+
extended_certificate_request('1024')]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OpenSSLExtensions do
|
4
|
+
context 'check_dependencies!' do
|
5
|
+
context 'with OpenSSL extensions installed' do
|
6
|
+
before(:each) do
|
7
|
+
OpenSSLExtensions.should_receive(:require).with('openssl').and_return(true)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'does not exit' do
|
11
|
+
OpenSSLExtensions.should_receive(:exit).never
|
12
|
+
OpenSSLExtensions.check_dependencies!
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'does not write to STDERR' do
|
16
|
+
$stderr.should_receive(:puts).never
|
17
|
+
OpenSSLExtensions.check_dependencies!
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'without OpenSSL extensions installed' do
|
22
|
+
before(:each) do
|
23
|
+
OpenSSLExtensions.should_receive(:require).with('openssl').and_raise(LoadError)
|
24
|
+
|
25
|
+
$stderr.stub!(:puts)
|
26
|
+
OpenSSLExtensions.stub!(:exit)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'write a message on STDERR' do
|
30
|
+
$stderr.should_receive(:puts).with("OpenSSLExtensions requires Ruby to be compiled with OpenSSL support.")
|
31
|
+
OpenSSLExtensions.check_dependencies!
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'exits with error' do
|
35
|
+
OpenSSLExtensions.should_receive(:exit).with(1)
|
36
|
+
OpenSSLExtensions.check_dependencies!
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
lib = File.expand_path('../../lib', __FILE__)
|
3
|
+
$:.unshift lib unless $:.include?(lib)
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'openssl'
|
7
|
+
rescue LoadError
|
8
|
+
$stderr.puts "OpenSSLExtensions requires Ruby to be compiled with OpenSSL support"
|
9
|
+
exit(1)
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'rubygems'
|
13
|
+
require 'bundler'
|
14
|
+
|
15
|
+
Bundler.setup
|
16
|
+
Bundler.require :default, :test
|
17
|
+
|
18
|
+
require 'openssl-extensions/all'
|
19
|
+
|
20
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'support/**/*.rb')).each do |f|
|
21
|
+
require f
|
22
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module CertificateRequestFixtures
|
2
|
+
|
3
|
+
##
|
4
|
+
# Returns an OpenSSL::X509::Request without explicit extensions.
|
5
|
+
#
|
6
|
+
def certificate_request(name)
|
7
|
+
name = name.to_s.downcase.gsub(/[^\w\.]/, '-')
|
8
|
+
@_certificate_requests ||= {}
|
9
|
+
return @_certificate_requests[name].dup if @_certificate_requests.has_key?(name)
|
10
|
+
|
11
|
+
request_path = File.expand_path("../../fixtures/certificate_requests/#{name}.csr", __FILE__)
|
12
|
+
@_certificate_requests[name] = File.exist?(request_path) ?
|
13
|
+
OpenSSL::X509::Request.new(File.read(request_path)) :
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
##
|
18
|
+
# Returns an OpenSSL::X509::Request explicitly extended with OpenSSLExtensions::X509::Request.
|
19
|
+
#
|
20
|
+
def extended_certificate_request(name)
|
21
|
+
certificate_request(name).extend(OpenSSLExtensions::X509::Request)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
RSpec.configure do |config|
|
27
|
+
config.include CertificateRequestFixtures
|
28
|
+
end
|
29
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module SslCertificateFixtures
|
2
|
+
|
3
|
+
##
|
4
|
+
# Returns an OpenSSL::X509::Certificate without explicit extensions.
|
5
|
+
#
|
6
|
+
def ssl_certificates(name)
|
7
|
+
name = name.to_s.downcase.gsub(/[^\w\.]/, '-')
|
8
|
+
@_ssl_certificates ||= {}
|
9
|
+
return @_ssl_certificates[name].dup if @_ssl_certificates.has_key?(name)
|
10
|
+
|
11
|
+
certificate_path = File.expand_path("../../fixtures/certificates/#{name}.pem", __FILE__)
|
12
|
+
@_ssl_certificates[name] = File.exist?(certificate_path) ?
|
13
|
+
OpenSSL::X509::Certificate.new(File.read(certificate_path)) :
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
##
|
18
|
+
# Returns an OpenSSL::X509::Certificate explicitly extended with OpenSSLExtensions::X509::Certificate.
|
19
|
+
#
|
20
|
+
def extended_ssl_certificates(name)
|
21
|
+
ssl_certificates(name).extend(OpenSSLExtensions::X509::Certificate)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
RSpec.configure do |config|
|
27
|
+
config.include SslCertificateFixtures
|
28
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openssl-extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 13
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
6
|
+
- 1
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.9
|
9
|
+
version: 1.0.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Nathaniel Bibler
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date:
|
17
|
+
date: 2011-01-07 00:00:00 -05:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -24,14 +23,13 @@ dependencies:
|
|
24
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
24
|
none: false
|
26
25
|
requirements:
|
27
|
-
- -
|
26
|
+
- - ~>
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 11
|
30
28
|
segments:
|
31
29
|
- 2
|
32
|
-
-
|
30
|
+
- 4
|
33
31
|
- 0
|
34
|
-
version: 2.
|
32
|
+
version: 2.4.0
|
35
33
|
type: :development
|
36
34
|
version_requirements: *id001
|
37
35
|
- !ruby/object:Gem::Dependency
|
@@ -40,9 +38,8 @@ dependencies:
|
|
40
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
40
|
requirements:
|
43
|
-
- -
|
41
|
+
- - ~>
|
44
42
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 29
|
46
43
|
segments:
|
47
44
|
- 0
|
48
45
|
- 0
|
@@ -71,6 +68,41 @@ files:
|
|
71
68
|
- lib/openssl-extensions/x509/request.rb
|
72
69
|
- lib/openssl-extensions/x509.rb
|
73
70
|
- lib/openssl-extensions.rb
|
71
|
+
- CHANGELOG.md
|
72
|
+
- LICENSE
|
73
|
+
- README.md
|
74
|
+
- spec/fixtures/certificate_requests/1024.csr
|
75
|
+
- spec/fixtures/certificate_requests/challenge.csr
|
76
|
+
- spec/fixtures/certificate_requests/envylabs.csr
|
77
|
+
- spec/fixtures/certificate_requests/geocerts.csr
|
78
|
+
- spec/fixtures/certificate_requests/geocerts.key
|
79
|
+
- spec/fixtures/certificate_requests/geocerts_1024.key
|
80
|
+
- spec/fixtures/certificate_requests/sans.csr
|
81
|
+
- spec/fixtures/certificates/app1.hongkongpost.com.pem
|
82
|
+
- spec/fixtures/certificates/equifax-secure-ca.pem
|
83
|
+
- spec/fixtures/certificates/geotrust-extended-validation-ssl-ca.pem
|
84
|
+
- spec/fixtures/certificates/geotrust-primary-certification-authority.pem
|
85
|
+
- spec/fixtures/certificates/globalsign-root-ca.pem
|
86
|
+
- spec/fixtures/certificates/hongkong-post-e-cert-ca-1.pem
|
87
|
+
- spec/fixtures/certificates/hongkong-post-e-cert-ca.pem
|
88
|
+
- spec/fixtures/certificates/hongkong-post-root-ca-1.pem
|
89
|
+
- spec/fixtures/certificates/hongkong-post-root-ca.pem
|
90
|
+
- spec/fixtures/certificates/www.geocerts.com.pem
|
91
|
+
- spec/fixtures/certificates/www.twongo.com.pem
|
92
|
+
- spec/integration/openssl/ssl/ssl_socket_spec.rb
|
93
|
+
- spec/integration/openssl/x509/certificate_spec.rb
|
94
|
+
- spec/integration/openssl/x509/name_spec.rb
|
95
|
+
- spec/integration/openssl/x509/request_spec.rb
|
96
|
+
- spec/models/openssl-extensions/ssl/ssl_socket_spec.rb
|
97
|
+
- spec/models/openssl-extensions/x509/authority_key_identifier_spec.rb
|
98
|
+
- spec/models/openssl-extensions/x509/certificate_chain_spec.rb
|
99
|
+
- spec/models/openssl-extensions/x509/certificate_spec.rb
|
100
|
+
- spec/models/openssl-extensions/x509/name_spec.rb
|
101
|
+
- spec/models/openssl-extensions/x509/request_spec.rb
|
102
|
+
- spec/models/openssl-extensions_spec.rb
|
103
|
+
- spec/spec_helper.rb
|
104
|
+
- spec/support/certificate_request_fixtures.rb
|
105
|
+
- spec/support/ssl_certificate_fixtures.rb
|
74
106
|
has_rdoc: true
|
75
107
|
homepage: http://github.com/envylabs/openssl-extensions
|
76
108
|
licenses: []
|
@@ -85,7 +117,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
85
117
|
requirements:
|
86
118
|
- - ">="
|
87
119
|
- !ruby/object:Gem::Version
|
88
|
-
hash: 3
|
89
120
|
segments:
|
90
121
|
- 0
|
91
122
|
version: "0"
|
@@ -94,7 +125,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
125
|
requirements:
|
95
126
|
- - ">="
|
96
127
|
- !ruby/object:Gem::Version
|
97
|
-
hash: 23
|
98
128
|
segments:
|
99
129
|
- 1
|
100
130
|
- 3
|
@@ -107,5 +137,36 @@ rubygems_version: 1.3.7
|
|
107
137
|
signing_key:
|
108
138
|
specification_version: 3
|
109
139
|
summary: Helper methods and extensions for OpenSSL to make the interface more intuitive.
|
110
|
-
test_files:
|
111
|
-
|
140
|
+
test_files:
|
141
|
+
- spec/fixtures/certificate_requests/1024.csr
|
142
|
+
- spec/fixtures/certificate_requests/challenge.csr
|
143
|
+
- spec/fixtures/certificate_requests/envylabs.csr
|
144
|
+
- spec/fixtures/certificate_requests/geocerts.csr
|
145
|
+
- spec/fixtures/certificate_requests/geocerts.key
|
146
|
+
- spec/fixtures/certificate_requests/geocerts_1024.key
|
147
|
+
- spec/fixtures/certificate_requests/sans.csr
|
148
|
+
- spec/fixtures/certificates/app1.hongkongpost.com.pem
|
149
|
+
- spec/fixtures/certificates/equifax-secure-ca.pem
|
150
|
+
- spec/fixtures/certificates/geotrust-extended-validation-ssl-ca.pem
|
151
|
+
- spec/fixtures/certificates/geotrust-primary-certification-authority.pem
|
152
|
+
- spec/fixtures/certificates/globalsign-root-ca.pem
|
153
|
+
- spec/fixtures/certificates/hongkong-post-e-cert-ca-1.pem
|
154
|
+
- spec/fixtures/certificates/hongkong-post-e-cert-ca.pem
|
155
|
+
- spec/fixtures/certificates/hongkong-post-root-ca-1.pem
|
156
|
+
- spec/fixtures/certificates/hongkong-post-root-ca.pem
|
157
|
+
- spec/fixtures/certificates/www.geocerts.com.pem
|
158
|
+
- spec/fixtures/certificates/www.twongo.com.pem
|
159
|
+
- spec/integration/openssl/ssl/ssl_socket_spec.rb
|
160
|
+
- spec/integration/openssl/x509/certificate_spec.rb
|
161
|
+
- spec/integration/openssl/x509/name_spec.rb
|
162
|
+
- spec/integration/openssl/x509/request_spec.rb
|
163
|
+
- spec/models/openssl-extensions/ssl/ssl_socket_spec.rb
|
164
|
+
- spec/models/openssl-extensions/x509/authority_key_identifier_spec.rb
|
165
|
+
- spec/models/openssl-extensions/x509/certificate_chain_spec.rb
|
166
|
+
- spec/models/openssl-extensions/x509/certificate_spec.rb
|
167
|
+
- spec/models/openssl-extensions/x509/name_spec.rb
|
168
|
+
- spec/models/openssl-extensions/x509/request_spec.rb
|
169
|
+
- spec/models/openssl-extensions_spec.rb
|
170
|
+
- spec/spec_helper.rb
|
171
|
+
- spec/support/certificate_request_fixtures.rb
|
172
|
+
- spec/support/ssl_certificate_fixtures.rb
|