66class OpenSSL ::TestX509Certificate < OpenSSL ::TestCase
77 def setup
88 super
9- @rsa1024 = Fixtures . pkey ( "rsa1024" )
10- @rsa2048 = Fixtures . pkey ( "rsa2048" )
11- @dsa256 = Fixtures . pkey ( "dsa256" )
12- @dsa512 = Fixtures . pkey ( "dsa512" )
9+ @rsa1 = Fixtures . pkey ( "rsa-1" )
10+ @rsa2 = Fixtures . pkey ( "rsa-2" )
11+ @ec1 = Fixtures . pkey ( "p256" )
1312 @ca = OpenSSL ::X509 ::Name . parse ( "/DC=org/DC=ruby-lang/CN=CA" )
1413 @ee1 = OpenSSL ::X509 ::Name . parse ( "/DC=org/DC=ruby-lang/CN=EE1" )
1514 end
1615
1716 def test_serial
1817 [ 1 , 2 **32 , 2 **100 ] . each { |s |
19- cert = issue_cert ( @ca , @rsa2048 , s , [ ] , nil , nil )
18+ cert = issue_cert ( @ca , @rsa1 , s , [ ] , nil , nil )
2019 assert_equal ( s , cert . serial )
2120 cert = OpenSSL ::X509 ::Certificate . new ( cert . to_der )
2221 assert_equal ( s , cert . serial )
@@ -29,40 +28,34 @@ def test_public_key
2928 [ "subjectKeyIdentifier" , "hash" , false ] ,
3029 [ "authorityKeyIdentifier" , "keyid:always" , false ] ,
3130 ]
32-
33- [
34- @rsa1024 , @rsa2048 , @dsa256 , @dsa512 ,
35- ] . each { |pk |
36- cert = issue_cert ( @ca , pk , 1 , exts , nil , nil )
37- assert_equal ( cert . extensions . sort_by ( &:to_s ) [ 2 ] . value ,
38- OpenSSL ::TestUtils . get_subject_key_id ( cert ) )
39- cert = OpenSSL ::X509 ::Certificate . new ( cert . to_der )
40- assert_equal ( cert . extensions . sort_by ( &:to_s ) [ 2 ] . value ,
41- OpenSSL ::TestUtils . get_subject_key_id ( cert ) )
42- }
31+ cert = issue_cert ( @ca , @rsa1 , 1 , exts , nil , nil )
32+ assert_kind_of ( OpenSSL ::PKey ::RSA , cert . public_key )
33+ assert_equal ( @rsa1 . public_to_der , cert . public_key . public_to_der )
34+ cert = OpenSSL ::X509 ::Certificate . new ( cert . to_der )
35+ assert_equal ( @rsa1 . public_to_der , cert . public_key . public_to_der )
4336 end
4437
4538 def test_validity
4639 now = Time . at ( Time . now . to_i + 0.9 )
47- cert = issue_cert ( @ca , @rsa2048 , 1 , [ ] , nil , nil ,
40+ cert = issue_cert ( @ca , @rsa1 , 1 , [ ] , nil , nil ,
4841 not_before : now , not_after : now +3600 )
4942 assert_equal ( Time . at ( now . to_i ) , cert . not_before )
5043 assert_equal ( Time . at ( now . to_i +3600 ) , cert . not_after )
5144
5245 now = Time . at ( now . to_i )
53- cert = issue_cert ( @ca , @rsa2048 , 1 , [ ] , nil , nil ,
46+ cert = issue_cert ( @ca , @rsa1 , 1 , [ ] , nil , nil ,
5447 not_before : now , not_after : now +3600 )
5548 assert_equal ( now . getutc , cert . not_before )
5649 assert_equal ( ( now +3600 ) . getutc , cert . not_after )
5750
5851 now = Time . at ( 0 )
59- cert = issue_cert ( @ca , @rsa2048 , 1 , [ ] , nil , nil ,
52+ cert = issue_cert ( @ca , @rsa1 , 1 , [ ] , nil , nil ,
6053 not_before : now , not_after : now )
6154 assert_equal ( now . getutc , cert . not_before )
6255 assert_equal ( now . getutc , cert . not_after )
6356
6457 now = Time . at ( 0x7fffffff )
65- cert = issue_cert ( @ca , @rsa2048 , 1 , [ ] , nil , nil ,
58+ cert = issue_cert ( @ca , @rsa1 , 1 , [ ] , nil , nil ,
6659 not_before : now , not_after : now )
6760 assert_equal ( now . getutc , cert . not_before )
6861 assert_equal ( now . getutc , cert . not_after )
@@ -75,7 +68,7 @@ def test_extension_factory
7568 [ "subjectKeyIdentifier" , "hash" , false ] ,
7669 [ "authorityKeyIdentifier" , "issuer:always,keyid:always" , false ] ,
7770 ]
78- ca_cert = issue_cert ( @ca , @rsa2048 , 1 , ca_exts , nil , nil )
71+ ca_cert = issue_cert ( @ca , @rsa1 , 1 , ca_exts , nil , nil )
7972 ca_cert . extensions . each_with_index { |ext , i |
8073 assert_equal ( ca_exts [ i ] . first , ext . oid )
8174 assert_equal ( ca_exts [ i ] . last , ext . critical? )
@@ -88,7 +81,7 @@ def test_extension_factory
8881 [ "extendedKeyUsage" , "clientAuth, emailProtection, codeSigning" , false ] ,
8982 [ "subjectAltName" , "email:ee1@ruby-lang.org" , false ] ,
9083 ]
91- ee1_cert = issue_cert ( @ee1 , @rsa1024 , 2 , ee1_exts , ca_cert , @rsa2048 )
84+ ee1_cert = issue_cert ( @ee1 , @rsa2 , 2 , ee1_exts , ca_cert , @rsa1 )
9285 assert_equal ( ca_cert . subject . to_der , ee1_cert . issuer . to_der )
9386 ee1_cert . extensions . each_with_index { |ext , i |
9487 assert_equal ( ee1_exts [ i ] . first , ext . oid )
@@ -97,39 +90,39 @@ def test_extension_factory
9790 end
9891
9992 def test_akiski
100- ca_cert = generate_cert ( @ca , @rsa2048 , 4 , nil )
93+ ca_cert = generate_cert ( @ca , @rsa1 , 4 , nil )
10194 ef = OpenSSL ::X509 ::ExtensionFactory . new ( ca_cert , ca_cert )
10295 ca_cert . add_extension (
10396 ef . create_extension ( "subjectKeyIdentifier" , "hash" , false ) )
10497 ca_cert . add_extension (
10598 ef . create_extension ( "authorityKeyIdentifier" , "issuer:always,keyid:always" , false ) )
106- ca_cert . sign ( @rsa2048 , "sha256" )
99+ ca_cert . sign ( @rsa1 , "sha256" )
107100
108101 ca_keyid = get_subject_key_id ( ca_cert . to_der , hex : false )
109102 assert_equal ca_keyid , ca_cert . authority_key_identifier
110103 assert_equal ca_keyid , ca_cert . subject_key_identifier
111104
112- ee_cert = generate_cert ( @ee1 , Fixtures . pkey ( "p256" ) , 5 , ca_cert )
105+ ee_cert = generate_cert ( @ee1 , @rsa2 , 5 , ca_cert )
113106 ef = OpenSSL ::X509 ::ExtensionFactory . new ( ca_cert , ee_cert )
114107 ee_cert . add_extension (
115108 ef . create_extension ( "subjectKeyIdentifier" , "hash" , false ) )
116109 ee_cert . add_extension (
117110 ef . create_extension ( "authorityKeyIdentifier" , "issuer:always,keyid:always" , false ) )
118- ee_cert . sign ( @rsa2048 , "sha256" )
111+ ee_cert . sign ( @rsa1 , "sha256" )
119112
120113 ee_keyid = get_subject_key_id ( ee_cert . to_der , hex : false )
121114 assert_equal ca_keyid , ee_cert . authority_key_identifier
122115 assert_equal ee_keyid , ee_cert . subject_key_identifier
123116 end
124117
125118 def test_akiski_missing
126- cert = issue_cert ( @ee1 , @rsa2048 , 1 , [ ] , nil , nil )
119+ cert = issue_cert ( @ee1 , @rsa1 , 1 , [ ] , nil , nil )
127120 assert_nil ( cert . authority_key_identifier )
128121 assert_nil ( cert . subject_key_identifier )
129122 end
130123
131124 def test_crl_uris_no_crl_distribution_points
132- cert = issue_cert ( @ee1 , @rsa2048 , 1 , [ ] , nil , nil )
125+ cert = issue_cert ( @ee1 , @rsa1 , 1 , [ ] , nil , nil )
133126 assert_nil ( cert . crl_uris )
134127 end
135128
@@ -141,10 +134,10 @@ def test_crl_uris
141134 URI.1 = http://www.example.com/crl
142135 URI.2 = ldap://ldap.example.com/cn=ca?certificateRevocationList;binary
143136 _cnf_
144- cdp_cert = generate_cert ( @ee1 , @rsa2048 , 3 , nil )
137+ cdp_cert = generate_cert ( @ee1 , @rsa1 , 3 , nil )
145138 ef . subject_certificate = cdp_cert
146139 cdp_cert . add_extension ( ef . create_extension ( "crlDistributionPoints" , "@crlDistPts" ) )
147- cdp_cert . sign ( @rsa2048 , "sha256" )
140+ cdp_cert . sign ( @rsa1 , "sha256" )
148141 assert_equal (
149142 [ "http://www.example.com/crl" , "ldap://ldap.example.com/cn=ca?certificateRevocationList;binary" ] ,
150143 cdp_cert . crl_uris
@@ -158,10 +151,10 @@ def test_crl_uris_multiple_general_names
158151 [crlDistPts_section]
159152 fullname = URI:http://www.example.com/crl, URI:ldap://ldap.example.com/cn=ca?certificateRevocationList;binary
160153 _cnf_
161- cdp_cert = generate_cert ( @ee1 , @rsa2048 , 3 , nil )
154+ cdp_cert = generate_cert ( @ee1 , @rsa1 , 3 , nil )
162155 ef . subject_certificate = cdp_cert
163156 cdp_cert . add_extension ( ef . create_extension ( "crlDistributionPoints" , "crlDistPts_section" ) )
164- cdp_cert . sign ( @rsa2048 , "sha256" )
157+ cdp_cert . sign ( @rsa1 , "sha256" )
165158 assert_equal (
166159 [ "http://www.example.com/crl" , "ldap://ldap.example.com/cn=ca?certificateRevocationList;binary" ] ,
167160 cdp_cert . crl_uris
@@ -177,22 +170,22 @@ def test_crl_uris_no_uris
177170 [dirname_section]
178171 CN = dirname
179172 _cnf_
180- cdp_cert = generate_cert ( @ee1 , @rsa2048 , 3 , nil )
173+ cdp_cert = generate_cert ( @ee1 , @rsa1 , 3 , nil )
181174 ef . subject_certificate = cdp_cert
182175 cdp_cert . add_extension ( ef . create_extension ( "crlDistributionPoints" , "crlDistPts_section" ) )
183- cdp_cert . sign ( @rsa2048 , "sha256" )
176+ cdp_cert . sign ( @rsa1 , "sha256" )
184177 assert_nil ( cdp_cert . crl_uris )
185178 end
186179
187180 def test_aia_missing
188- cert = issue_cert ( @ee1 , @rsa2048 , 1 , [ ] , nil , nil )
181+ cert = issue_cert ( @ee1 , @rsa1 , 1 , [ ] , nil , nil )
189182 assert_nil ( cert . ca_issuer_uris )
190183 assert_nil ( cert . ocsp_uris )
191184 end
192185
193186 def test_aia
194187 ef = OpenSSL ::X509 ::ExtensionFactory . new
195- aia_cert = generate_cert ( @ee1 , @rsa2048 , 4 , nil )
188+ aia_cert = generate_cert ( @ee1 , @rsa1 , 4 , nil )
196189 ef . subject_certificate = aia_cert
197190 aia_cert . add_extension (
198191 ef . create_extension (
@@ -204,7 +197,7 @@ def test_aia
204197 false
205198 )
206199 )
207- aia_cert . sign ( @rsa2048 , "sha256" )
200+ aia_cert . sign ( @rsa1 , "sha256" )
208201 assert_equal (
209202 [ "http://www.example.com/caIssuers" , "ldap://ldap.example.com/cn=ca?authorityInfoAccessCaIssuers;binary" ] ,
210203 aia_cert . ca_issuer_uris
@@ -217,7 +210,7 @@ def test_aia
217210
218211 def test_invalid_extension
219212 integer = OpenSSL ::ASN1 ::Integer . new ( 0 )
220- invalid_exts_cert = generate_cert ( @ee1 , @rsa1024 , 1 , nil )
213+ invalid_exts_cert = generate_cert ( @ee1 , @rsa1 , 1 , nil )
221214 [ "subjectKeyIdentifier" , "authorityKeyIdentifier" , "crlDistributionPoints" , "authorityInfoAccess" ] . each do |ext |
222215 invalid_exts_cert . add_extension (
223216 OpenSSL ::X509 ::Extension . new ( ext , integer . to_der )
@@ -241,82 +234,30 @@ def test_invalid_extension
241234 }
242235 end
243236
244- def test_sign_and_verify_rsa_sha1
245- cert = issue_cert ( @ca , @rsa2048 , 1 , [ ] , nil , nil , digest : "SHA1" )
246- assert_equal ( false , cert . verify ( @rsa1024 ) )
247- assert_equal ( true , cert . verify ( @rsa2048 ) )
248- assert_equal ( false , certificate_error_returns_false { cert . verify ( @dsa256 ) } )
249- assert_equal ( false , certificate_error_returns_false { cert . verify ( @dsa512 ) } )
237+ def test_sign_and_verify
238+ cert = issue_cert ( @ca , @rsa1 , 1 , [ ] , nil , nil , digest : "SHA256" )
239+ assert_equal ( true , cert . verify ( @rsa1 ) )
240+ assert_equal ( false , cert . verify ( @rsa2 ) )
241+ assert_equal ( false , certificate_error_returns_false { cert . verify ( @ec1 ) } )
250242 cert . serial = 2
251- assert_equal ( false , cert . verify ( @rsa2048 ) )
252- rescue OpenSSL ::X509 ::CertificateError # RHEL 9 disables SHA1
253- end
254-
255- def test_sign_and_verify_rsa_md5
256- cert = issue_cert ( @ca , @rsa2048 , 1 , [ ] , nil , nil , digest : "md5" )
257- assert_equal ( false , cert . verify ( @rsa1024 ) )
258- assert_equal ( true , cert . verify ( @rsa2048 ) )
259-
260- assert_equal ( false , certificate_error_returns_false { cert . verify ( @dsa256 ) } )
261- assert_equal ( false , certificate_error_returns_false { cert . verify ( @dsa512 ) } )
262- cert . subject = @ee1
263- assert_equal ( false , cert . verify ( @rsa2048 ) )
264- rescue OpenSSL ::X509 ::CertificateError # RHEL7 disables MD5
265- end
266-
267- def test_sign_and_verify_dsa
268- cert = issue_cert ( @ca , @dsa512 , 1 , [ ] , nil , nil )
269- assert_equal ( false , certificate_error_returns_false { cert . verify ( @rsa1024 ) } )
270- assert_equal ( false , certificate_error_returns_false { cert . verify ( @rsa2048 ) } )
271- assert_equal ( false , cert . verify ( @dsa256 ) )
272- assert_equal ( true , cert . verify ( @dsa512 ) )
273- cert . not_after = Time . now
274- assert_equal ( false , cert . verify ( @dsa512 ) )
243+ assert_equal ( false , cert . verify ( @rsa1 ) )
275244 end
276245
277- def test_sign_and_verify_rsa_dss1
278- cert = issue_cert ( @ca , @rsa2048 , 1 , [ ] , nil , nil , digest : OpenSSL ::Digest . new ( 'DSS1' ) )
279- assert_equal ( false , cert . verify ( @rsa1024 ) )
280- assert_equal ( true , cert . verify ( @rsa2048 ) )
281- assert_equal ( false , certificate_error_returns_false { cert . verify ( @dsa256 ) } )
282- assert_equal ( false , certificate_error_returns_false { cert . verify ( @dsa512 ) } )
283- cert . subject = @ee1
284- assert_equal ( false , cert . verify ( @rsa2048 ) )
285- rescue OpenSSL ::X509 ::CertificateError
286- end if defined? ( OpenSSL ::Digest ::DSS1 )
287-
288- def test_sign_and_verify_dsa_md5
289- assert_raise ( OpenSSL ::X509 ::CertificateError ) {
290- issue_cert ( @ca , @dsa512 , 1 , [ ] , nil , nil , digest : "md5" )
291- }
292- end
293-
294- def test_sign_and_verify_ed25519
246+ def test_sign_and_verify_nil_digest
295247 # Ed25519 is not FIPS-approved.
296248 omit_on_fips
297249 ed25519 = OpenSSL ::PKey ::generate_key ( "ED25519" )
298250 cert = issue_cert ( @ca , ed25519 , 1 , [ ] , nil , nil , digest : nil )
299251 assert_equal ( true , cert . verify ( ed25519 ) )
300252 end
301253
302- def test_dsa_with_sha2
303- cert = issue_cert ( @ca , @dsa256 , 1 , [ ] , nil , nil , digest : "sha256" )
304- assert_equal ( "dsa_with_SHA256" , cert . signature_algorithm )
305- # TODO: need more tests for dsa + sha2
306-
307- # SHA1 is allowed from OpenSSL 1.0.0 (0.9.8 requires DSS1)
308- cert = issue_cert ( @ca , @dsa256 , 1 , [ ] , nil , nil , digest : "sha1" )
309- assert_equal ( "dsaWithSHA1" , cert . signature_algorithm )
310- rescue OpenSSL ::X509 ::CertificateError # RHEL 9 disables SHA1
311- end
312-
313254 def test_check_private_key
314- cert = issue_cert ( @ca , @rsa2048 , 1 , [ ] , nil , nil )
315- assert_equal ( true , cert . check_private_key ( @rsa2048 ) )
255+ cert = issue_cert ( @ca , @rsa1 , 1 , [ ] , nil , nil )
256+ assert_equal ( true , cert . check_private_key ( @rsa1 ) )
316257 end
317258
318259 def test_read_from_file
319- cert = issue_cert ( @ca , @rsa2048 , 1 , [ ] , nil , nil )
260+ cert = issue_cert ( @ca , @rsa1 , 1 , [ ] , nil , nil )
320261 Tempfile . create ( "cert" ) { |f |
321262 f << cert . to_pem
322263 f . rewind
@@ -325,28 +266,28 @@ def test_read_from_file
325266 end
326267
327268 def test_read_der_then_pem
328- cert1 = issue_cert ( @ca , @rsa2048 , 1 , [ ] , nil , nil )
269+ cert1 = issue_cert ( @ca , @rsa1 , 1 , [ ] , nil , nil )
329270 exts = [
330271 # A new line before PEM block
331272 [ "nsComment" , "Another certificate:\n " + cert1 . to_pem ] ,
332273 ]
333- cert2 = issue_cert ( @ca , @rsa2048 , 2 , exts , nil , nil )
274+ cert2 = issue_cert ( @ca , @rsa1 , 2 , exts , nil , nil )
334275
335276 assert_equal cert2 , OpenSSL ::X509 ::Certificate . new ( cert2 . to_der )
336277 assert_equal cert2 , OpenSSL ::X509 ::Certificate . new ( cert2 . to_pem )
337278 end
338279
339280 def test_eq
340281 now = Time . now
341- cacert = issue_cert ( @ca , @rsa1024 , 1 , [ ] , nil , nil ,
282+ cacert = issue_cert ( @ca , @rsa1 , 1 , [ ] , nil , nil ,
342283 not_before : now , not_after : now + 3600 )
343- cert1 = issue_cert ( @ee1 , @rsa2048 , 2 , [ ] , cacert , @rsa1024 ,
284+ cert1 = issue_cert ( @ee1 , @rsa2 , 2 , [ ] , cacert , @rsa1 ,
344285 not_before : now , not_after : now + 3600 )
345- cert2 = issue_cert ( @ee1 , @rsa2048 , 2 , [ ] , cacert , @rsa1024 ,
286+ cert2 = issue_cert ( @ee1 , @rsa2 , 2 , [ ] , cacert , @rsa1 ,
346287 not_before : now , not_after : now + 3600 )
347- cert3 = issue_cert ( @ee1 , @rsa2048 , 3 , [ ] , cacert , @rsa1024 ,
288+ cert3 = issue_cert ( @ee1 , @rsa2 , 3 , [ ] , cacert , @rsa1 ,
348289 not_before : now , not_after : now + 3600 )
349- cert4 = issue_cert ( @ee1 , @rsa2048 , 2 , [ ] , cacert , @rsa1024 ,
290+ cert4 = issue_cert ( @ee1 , @rsa2 , 2 , [ ] , cacert , @rsa1 ,
350291 digest : "sha512" , not_before : now , not_after : now + 3600 )
351292
352293 assert_equal false , cert1 == 12345
@@ -358,9 +299,9 @@ def test_eq
358299
359300 def test_marshal
360301 now = Time . now
361- cacert = issue_cert ( @ca , @rsa1024 , 1 , [ ] , nil , nil ,
302+ cacert = issue_cert ( @ca , @rsa1 , 1 , [ ] , nil , nil ,
362303 not_before : now , not_after : now + 3600 )
363- cert = issue_cert ( @ee1 , @rsa2048 , 2 , [ ] , cacert , @rsa1024 ,
304+ cert = issue_cert ( @ee1 , @rsa2 , 2 , [ ] , cacert , @rsa1 ,
364305 not_before : now , not_after : now + 3600 )
365306 deserialized = Marshal . load ( Marshal . dump ( cert ) )
366307
@@ -378,8 +319,8 @@ def test_load_file_empty_pem
378319 end
379320
380321 def test_load_file_fullchain_pem
381- cert1 = issue_cert ( @ee1 , @rsa2048 , 1 , [ ] , nil , nil )
382- cert2 = issue_cert ( @ca , @rsa2048 , 1 , [ ] , nil , nil )
322+ cert1 = issue_cert ( @ee1 , @rsa1 , 1 , [ ] , nil , nil )
323+ cert2 = issue_cert ( @ca , @rsa2 , 1 , [ ] , nil , nil )
383324
384325 Tempfile . create ( "fullchain.pem" ) do |f |
385326 f . puts cert1 . to_pem
@@ -394,7 +335,7 @@ def test_load_file_fullchain_pem
394335 end
395336
396337 def test_load_file_certificate_der
397- cert = issue_cert ( @ca , @rsa2048 , 1 , [ ] , nil , nil )
338+ cert = issue_cert ( @ca , @rsa1 , 1 , [ ] , nil , nil )
398339 Tempfile . create ( "certificate.der" , binmode : true ) do |f |
399340 f . write cert . to_der
400341 f . close
@@ -419,7 +360,7 @@ def test_load_file_fullchain_garbage
419360 end
420361
421362 def test_tbs_precert_bytes
422- cert = issue_cert ( @ca , @rsa2048 , 1 , [ ] , nil , nil )
363+ cert = issue_cert ( @ca , @rsa1 , 1 , [ ] , nil , nil )
423364 seq = OpenSSL ::ASN1 . decode ( cert . tbs_bytes )
424365
425366 assert_equal 7 , seq . value . size
0 commit comments