openssl-extensions 0.0.9 → 1.0.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.
- 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
|