@@ -378,4 +378,68 @@ def test_verify
378
378
assert_equal ( false , store . verify ( ee2_cert ) )
379
379
end
380
380
381
+ def test_verify_same_subject_ca
382
+
383
+ puts JOpenSSL ::VERSION if defined? JRUBY_VERSION
384
+
385
+ @rsa1 = OpenSSL ::PKey ::RSA . generate 2048
386
+ @rsa2 = OpenSSL ::PKey ::RSA . generate 2048
387
+ @rsa3 = OpenSSL ::PKey ::RSA . generate 2048
388
+ @rsa4 = OpenSSL ::PKey ::RSA . generate 2048
389
+ @dsa1 = OpenSSL ::PKey ::DSA . generate 512
390
+ @dsa2 = OpenSSL ::PKey ::DSA . generate 512
391
+ @ca_same = OpenSSL ::X509 ::Name . parse ( "/DC=com/DC=same-name/CN=CA" )
392
+ @ca_other = OpenSSL ::X509 ::Name . parse ( "/DC=co/DC=anotherOne/CN=CA" )
393
+ @ee1 = OpenSSL ::X509 ::Name . parse ( "/DC=com/DC=example/CN=ServerCert1" )
394
+ @ee2 = OpenSSL ::X509 ::Name . parse ( "/DC=com/DC=example/CN=ServerCert2" )
395
+ @ee4 = OpenSSL ::X509 ::Name . parse ( "/DC=com/DC=example/CN=ServerCert4" )
396
+
397
+ now = Time . at ( Time . now . to_i )
398
+ not_before = now - 365 * 24 * 60 * 60
399
+ not_after = now + 24 * 60 * 60
400
+ ca_exts1 = [
401
+ [ "basicConstraints" , "CA:TRUE" , true ] ,
402
+ [ "keyUsage" , "cRLSign,keyCertSign" , true ] ,
403
+ ]
404
+ ca_exts2 = [
405
+ [ "basicConstraints" , "CA:TRUE" , true ] ,
406
+ [ "keyUsage" , "keyCertSign" , true ] ,
407
+ ]
408
+ ee_exts = [
409
+ [ "keyUsage" , "keyEncipherment,digitalSignature" , true ] ,
410
+ ]
411
+ ca1_cert = issue_cert ( @ca_same , @rsa1 , 1 , not_before , now - 60 * 60 , ca_exts1 ,
412
+ nil , nil , OpenSSL ::Digest ::SHA1 . new )
413
+ ca2_cert = issue_cert ( @ca_same , @rsa2 , 2 , not_before , not_after , ca_exts2 ,
414
+ nil , nil , OpenSSL ::Digest ::SHA1 . new )
415
+ ca3_cert = issue_cert ( @ca_other , @rsa3 , 3 , not_before , not_after , ca_exts1 ,
416
+ nil , nil , OpenSSL ::Digest ::SHA1 . new )
417
+ ca4_cert = issue_cert ( @ca_same , @rsa4 , 4 , not_before , not_after , ca_exts1 ,
418
+ nil , nil , OpenSSL ::Digest ::SHA1 . new )
419
+ ee1_cert = issue_cert ( @ee1 , @dsa1 , 10 , now - 60 , now + 1800 , ee_exts ,
420
+ ca1_cert , @rsa1 , OpenSSL ::Digest ::SHA1 . new )
421
+ ee2_cert = issue_cert ( @ee2 , @dsa2 , 20 , now - 60 , now + 1800 , ee_exts ,
422
+ ca2_cert , @rsa2 , OpenSSL ::Digest ::SHA1 . new )
423
+ ee4_cert = issue_cert ( @ee4 , @dsa2 , 20 , now - 60 , now + 1800 , ee_exts ,
424
+ ca4_cert , @rsa4 , OpenSSL ::Digest ::SHA1 . new )
425
+
426
+ cert_store = OpenSSL ::X509 ::Store . new
427
+ cert_store . add_cert ca1_cert
428
+ cert_store . add_cert ca2_cert
429
+ cert_store . add_cert ca3_cert
430
+ cert_store . add_cert ca4_cert
431
+
432
+ ok = cert_store . verify ( ee1_cert )
433
+ assert_equal 'certificate signature failure' , cert_store . error_string
434
+ assert_equal false , ok
435
+
436
+ ok = cert_store . verify ( ee2_cert )
437
+ assert_equal 'ok' , cert_store . error_string
438
+ assert_equal true , ok
439
+
440
+ ok = cert_store . verify ( ee4_cert )
441
+ assert_equal 'certificate signature failure' , cert_store . error_string
442
+ assert_equal false , ok # OpenSSL 1.1.1 behavior
443
+ end
444
+
381
445
end
0 commit comments