@@ -68,17 +68,14 @@ def test_validity
68
68
assert_equal ( now . getutc , cert . not_after )
69
69
end
70
70
71
- def test_extension
71
+ def test_extension_factory
72
72
ca_exts = [
73
73
[ "basicConstraints" , "CA:TRUE" , true ] ,
74
74
[ "keyUsage" , "keyCertSign, cRLSign" , true ] ,
75
75
[ "subjectKeyIdentifier" , "hash" , false ] ,
76
76
[ "authorityKeyIdentifier" , "issuer:always,keyid:always" , false ] ,
77
77
]
78
78
ca_cert = issue_cert ( @ca , @rsa2048 , 1 , ca_exts , nil , nil )
79
- keyid = get_subject_key_id ( ca_cert . to_der , hex : false )
80
- assert_equal keyid , ca_cert . authority_key_identifier
81
- assert_equal keyid , ca_cert . subject_key_identifier
82
79
ca_cert . extensions . each_with_index { |ext , i |
83
80
assert_equal ( ca_exts [ i ] . first , ext . oid )
84
81
assert_equal ( ca_exts [ i ] . last , ext . critical? )
@@ -90,33 +87,112 @@ def test_extension
90
87
[ "authorityKeyIdentifier" , "issuer:always,keyid:always" , false ] ,
91
88
[ "extendedKeyUsage" , "clientAuth, emailProtection, codeSigning" , false ] ,
92
89
[ "subjectAltName" , "email:ee1@ruby-lang.org" , false ] ,
93
- [ "authorityInfoAccess" , "caIssuers;URI:http://www.example.com/caIssuers,OCSP;URI:http://www.example.com/ocsp" , false ] ,
94
90
]
95
91
ee1_cert = issue_cert ( @ee1 , @rsa1024 , 2 , ee1_exts , ca_cert , @rsa2048 )
96
92
assert_equal ( ca_cert . subject . to_der , ee1_cert . issuer . to_der )
97
93
ee1_cert . extensions . each_with_index { |ext , i |
98
94
assert_equal ( ee1_exts [ i ] . first , ext . oid )
99
95
assert_equal ( ee1_exts [ i ] . last , ext . critical? )
100
96
}
101
- assert_nil ( ee1_cert . crl_uris )
97
+ end
98
+
99
+ def test_akiski
100
+ ca_cert = generate_cert ( @ca , @rsa2048 , 4 , nil )
101
+ ef = OpenSSL ::X509 ::ExtensionFactory . new ( ca_cert , ca_cert )
102
+ ca_cert . add_extension (
103
+ ef . create_extension ( "subjectKeyIdentifier" , "hash" , false ) )
104
+ ca_cert . add_extension (
105
+ ef . create_extension ( "authorityKeyIdentifier" , "issuer:always,keyid:always" , false ) )
106
+ ca_cert . sign ( @rsa2048 , "sha256" )
107
+
108
+ ca_keyid = get_subject_key_id ( ca_cert . to_der , hex : false )
109
+ assert_equal ca_keyid , ca_cert . authority_key_identifier
110
+ assert_equal ca_keyid , ca_cert . subject_key_identifier
111
+
112
+ ee_cert = generate_cert ( @ee1 , Fixtures . pkey ( "p256" ) , 5 , ca_cert )
113
+ ef = OpenSSL ::X509 ::ExtensionFactory . new ( ca_cert , ee_cert )
114
+ ee_cert . add_extension (
115
+ ef . create_extension ( "subjectKeyIdentifier" , "hash" , false ) )
116
+ ee_cert . add_extension (
117
+ ef . create_extension ( "authorityKeyIdentifier" , "issuer:always,keyid:always" , false ) )
118
+ ee_cert . sign ( @rsa2048 , "sha256" )
119
+
120
+ ee_keyid = get_subject_key_id ( ee_cert . to_der , hex : false )
121
+ assert_equal ca_keyid , ee_cert . authority_key_identifier
122
+ assert_equal ee_keyid , ee_cert . subject_key_identifier
123
+ end
124
+
125
+ def test_akiski_missing
126
+ cert = issue_cert ( @ee1 , @rsa2048 , 1 , [ ] , nil , nil )
127
+ assert_nil ( cert . authority_key_identifier )
128
+ assert_nil ( cert . subject_key_identifier )
129
+ end
130
+
131
+ def test_crl_uris_no_crl_distribution_points
132
+ cert = issue_cert ( @ee1 , @rsa2048 , 1 , [ ] , nil , nil )
133
+ assert_nil ( cert . crl_uris )
134
+ end
102
135
136
+ def test_crl_uris
137
+ # Multiple DistributionPoint contains a single general name each
103
138
ef = OpenSSL ::X509 ::ExtensionFactory . new
104
139
ef . config = OpenSSL ::Config . parse ( <<~_cnf_ )
105
140
[crlDistPts]
106
141
URI.1 = http://www.example.com/crl
107
142
URI.2 = ldap://ldap.example.com/cn=ca?certificateRevocationList;binary
108
143
_cnf_
109
- cdp_cert = generate_cert ( @ee1 , @rsa1024 , 3 , ca_cert )
144
+ cdp_cert = generate_cert ( @ee1 , @rsa2048 , 3 , nil )
110
145
ef . subject_certificate = cdp_cert
111
146
cdp_cert . add_extension ( ef . create_extension ( "crlDistributionPoints" , "@crlDistPts" ) )
112
147
cdp_cert . sign ( @rsa2048 , "sha256" )
113
148
assert_equal (
114
149
[ "http://www.example.com/crl" , "ldap://ldap.example.com/cn=ca?certificateRevocationList;binary" ] ,
115
150
cdp_cert . crl_uris
116
151
)
152
+ end
117
153
154
+ def test_crl_uris_multiple_general_names
155
+ # Single DistributionPoint contains multiple general names of type URI
118
156
ef = OpenSSL ::X509 ::ExtensionFactory . new
119
- aia_cert = generate_cert ( @ee1 , @rsa1024 , 4 , ca_cert )
157
+ ef . config = OpenSSL ::Config . parse ( <<~_cnf_ )
158
+ [crlDistPts_section]
159
+ fullname = URI:http://www.example.com/crl, URI:ldap://ldap.example.com/cn=ca?certificateRevocationList;binary
160
+ _cnf_
161
+ cdp_cert = generate_cert ( @ee1 , @rsa2048 , 3 , nil )
162
+ ef . subject_certificate = cdp_cert
163
+ cdp_cert . add_extension ( ef . create_extension ( "crlDistributionPoints" , "crlDistPts_section" ) )
164
+ cdp_cert . sign ( @rsa2048 , "sha256" )
165
+ assert_equal (
166
+ [ "http://www.example.com/crl" , "ldap://ldap.example.com/cn=ca?certificateRevocationList;binary" ] ,
167
+ cdp_cert . crl_uris
168
+ )
169
+ end
170
+
171
+ def test_crl_uris_no_uris
172
+ # The only DistributionPointName is a directoryName
173
+ ef = OpenSSL ::X509 ::ExtensionFactory . new
174
+ ef . config = OpenSSL ::Config . parse ( <<~_cnf_ )
175
+ [crlDistPts_section]
176
+ fullname = dirName:dirname_section
177
+ [dirname_section]
178
+ CN = dirname
179
+ _cnf_
180
+ cdp_cert = generate_cert ( @ee1 , @rsa2048 , 3 , nil )
181
+ ef . subject_certificate = cdp_cert
182
+ cdp_cert . add_extension ( ef . create_extension ( "crlDistributionPoints" , "crlDistPts_section" ) )
183
+ cdp_cert . sign ( @rsa2048 , "sha256" )
184
+ assert_nil ( cdp_cert . crl_uris )
185
+ end
186
+
187
+ def test_aia_missing
188
+ cert = issue_cert ( @ee1 , @rsa2048 , 1 , [ ] , nil , nil )
189
+ assert_nil ( cert . ca_issuer_uris )
190
+ assert_nil ( cert . ocsp_uris )
191
+ end
192
+
193
+ def test_aia
194
+ ef = OpenSSL ::X509 ::ExtensionFactory . new
195
+ aia_cert = generate_cert ( @ee1 , @rsa2048 , 4 , nil )
120
196
ef . subject_certificate = aia_cert
121
197
aia_cert . add_extension (
122
198
ef . create_extension (
@@ -137,13 +213,6 @@ def test_extension
137
213
[ "http://www.example.com/ocsp" , "ldap://ldap.example.com/cn=ca?authorityInfoAccessOcsp;binary" ] ,
138
214
aia_cert . ocsp_uris
139
215
)
140
-
141
- no_exts_cert = issue_cert ( @ca , @rsa2048 , 5 , [ ] , nil , nil )
142
- assert_equal nil , no_exts_cert . authority_key_identifier
143
- assert_equal nil , no_exts_cert . subject_key_identifier
144
- assert_equal nil , no_exts_cert . crl_uris
145
- assert_equal nil , no_exts_cert . ca_issuer_uris
146
- assert_equal nil , no_exts_cert . ocsp_uris
147
216
end
148
217
149
218
def test_invalid_extension
0 commit comments