@@ -144,12 +144,13 @@ def test_add_cert_concurrently
144144
145145 cert_store = OpenSSL ::X509 ::Store . new
146146 assert cert_store . add_cert ( root_ca ) == cert_store
147- begin
147+ # NOTE: logic reverted in JOSSL 0.11.0 to match C-OpenSSL (just adds certificates wout checks)
148+ #begin
148149 cert_store . add_cert ( root_ca )
149- fail 'added same cert twice'
150- rescue OpenSSL ::X509 ::StoreError => e
151- assert_equal 'cert already in hash table' , e . message
152- end
150+ # fail 'added same cert twice'
151+ # rescue OpenSSL::X509::StoreError => e
152+ # assert_equal 'cert already in hash table', e.message
153+ # end
153154 end
154155
155156 def test_adding_pem_to_store_like_rubygems
@@ -235,7 +236,17 @@ def test_verify
235236 assert_not_equal ( OpenSSL ::X509 ::V_OK , store . error )
236237
237238 store . add_cert ( ca1_cert )
238- assert_equal ( true , store . verify ( ca2_cert ) )
239+ verify = store . verify ( ca1_cert )
240+ # TODO only works when cert_self_signed is reduced to do a EXFLAG_SI instead of EXFLAG_SS
241+ assert_equal [ "/DC=org/DC=ruby-lang/CN=CA1" ] ,
242+ store . chain . map { |cert | cert . subject . to_s }
243+ assert_equal ( true , verify )
244+
245+ verify = store . verify ( ca2_cert )
246+ assert_equal [ "/DC=org/DC=ruby-lang/CN=CA2" , "/DC=org/DC=ruby-lang/CN=CA1" ] ,
247+ store . chain . map { |cert | cert . subject . to_s }
248+ assert_equal ( true , verify )
249+
239250 assert_equal ( OpenSSL ::X509 ::V_OK , store . error )
240251 assert_equal ( "ok" , store . error_string )
241252 chain = store . chain
@@ -306,25 +317,48 @@ def test_verify
306317 store . add_crl ( crl1 ) # revoke no cert
307318 store . add_crl ( crl2 ) # revoke ee2_cert
308319 assert_equal ( true , store . verify ( ca1_cert ) )
320+ assert_equal [ "/DC=org/DC=ruby-lang/CN=CA1" ] ,
321+ store . chain . map { |cert | cert . subject . to_s }
322+
309323 assert_equal ( true , store . verify ( ca2_cert ) )
310- assert_equal ( true , store . verify ( ee1_cert , [ ca2_cert ] ) )
311- assert_equal ( false , store . verify ( ee2_cert , [ ca2_cert ] ) )
324+ assert_equal [ "/DC=org/DC=ruby-lang/CN=CA2" , "/DC=org/DC=ruby-lang/CN=CA1" ] ,
325+ store . chain . map { |cert | cert . subject . to_s }
326+
327+ verify = store . verify ( ee1_cert , [ ca2_cert ] )
328+ assert_equal ( true , verify )
329+
330+ verify = store . verify ( ee2_cert , [ ca2_cert ] )
331+ assert_equal ( false , verify )
312332
313333 store = OpenSSL ::X509 ::Store . new
314334 store . purpose = OpenSSL ::X509 ::PURPOSE_ANY
315335 store . flags = OpenSSL ::X509 ::V_FLAG_CRL_CHECK
316336 store . add_cert ( ca1_cert )
317337 store . add_crl ( crl1_2 ) # revoke ca2_cert
318338 store . add_crl ( crl2 ) # revoke ee2_cert
319- assert_equal ( true , store . verify ( ca1_cert ) )
320- assert_equal ( false , store . verify ( ca2_cert ) )
339+
340+ verify = store . verify ( ca1_cert )
341+ assert_equal [ "/DC=org/DC=ruby-lang/CN=CA1" ] ,
342+ store . chain . map { |cert | cert . subject . to_s }
343+ assert_equal ( true , verify )
344+
345+ verify = store . verify ( ca2_cert )
346+ assert_equal [ "/DC=org/DC=ruby-lang/CN=CA2" , "/DC=org/DC=ruby-lang/CN=CA1" ] ,
347+ store . chain . map { |cert | cert . subject . to_s }
348+ assert_equal ( false , verify )
349+
321350 assert_equal ( true , store . verify ( ee1_cert , [ ca2_cert ] ) ,
322351 "This test is expected to be success with OpenSSL 0.9.7c or later." )
323352 assert_equal ( false , store . verify ( ee2_cert , [ ca2_cert ] ) )
324353
325- store . flags =
326- OpenSSL ::X509 ::V_FLAG_CRL_CHECK |OpenSSL ::X509 ::V_FLAG_CRL_CHECK_ALL
327- assert_equal ( true , store . verify ( ca1_cert ) )
354+ store . flags = OpenSSL ::X509 ::V_FLAG_CRL_CHECK | OpenSSL ::X509 ::V_FLAG_CRL_CHECK_ALL
355+
356+ verify = store . verify ( ca1_cert )
357+ assert_equal [ "/DC=org/DC=ruby-lang/CN=CA1" ] ,
358+ store . chain . map { |cert | cert . subject . to_s }
359+ puts "verify(ca1_cert) #{ verify } - store.error: #{ store . error } (#{ store . error_string } )"
360+ assert_equal ( true , verify )
361+
328362 assert_equal ( false , store . verify ( ca2_cert ) )
329363 assert_equal ( false , store . verify ( ee1_cert , [ ca2_cert ] ) )
330364 assert_equal ( false , store . verify ( ee2_cert , [ ca2_cert ] ) )
0 commit comments