@@ -230,6 +230,34 @@ def test_add_certificate_multiple_certs
230230 end
231231 end
232232
233+ def test_extra_chain_cert_auto_chain
234+ start_server { |port |
235+ server_connect ( port ) { |ssl |
236+ ssl . puts "abc" ; assert_equal "abc\n " , ssl . gets
237+ assert_equal @svr_cert . to_der , ssl . peer_cert . to_der
238+ assert_equal [ @svr_cert ] , ssl . peer_cert_chain
239+ }
240+ }
241+
242+ # AWS-LC enables SSL_MODE_NO_AUTO_CHAIN by default
243+ unless aws_lc?
244+ ctx_proc = -> ctx {
245+ # Sanity check: start_server won't set extra_chain_cert
246+ assert_nil ctx . extra_chain_cert
247+ ctx . cert_store = OpenSSL ::X509 ::Store . new . tap { |store |
248+ store . add_cert ( @ca_cert )
249+ }
250+ }
251+ start_server ( ctx_proc : ctx_proc ) { |port |
252+ server_connect ( port ) { |ssl |
253+ ssl . puts "abc" ; assert_equal "abc\n " , ssl . gets
254+ assert_equal @svr_cert . to_der , ssl . peer_cert . to_der
255+ assert_equal [ @svr_cert , @ca_cert ] , ssl . peer_cert_chain
256+ }
257+ }
258+ end
259+ end
260+
233261 def test_sysread_and_syswrite
234262 start_server { |port |
235263 server_connect ( port ) { |ssl |
@@ -396,11 +424,15 @@ def test_verify_mode_client_cert_required
396424
397425 def test_client_auth_success
398426 vflag = OpenSSL ::SSL ::VERIFY_PEER |OpenSSL ::SSL ::VERIFY_FAIL_IF_NO_PEER_CERT
399- start_server ( verify_mode : vflag ,
400- ctx_proc : proc { |ctx |
401- # LibreSSL doesn't support client_cert_cb in TLS 1.3
402- ctx . max_version = OpenSSL ::SSL ::TLS1_2_VERSION if libressl?
403- } ) { |port |
427+ ctx_proc = proc { |ctx |
428+ store = OpenSSL ::X509 ::Store . new
429+ store . add_cert ( @ca_cert )
430+ store . purpose = OpenSSL ::X509 ::PURPOSE_SSL_CLIENT
431+ ctx . cert_store = store
432+ # LibreSSL doesn't support client_cert_cb in TLS 1.3
433+ ctx . max_version = OpenSSL ::SSL ::TLS1_2_VERSION if libressl?
434+ }
435+ start_server ( verify_mode : vflag , ctx_proc : ctx_proc ) { |port |
404436 ctx = OpenSSL ::SSL ::SSLContext . new
405437 ctx . key = @cli_key
406438 ctx . cert = @cli_cert
@@ -445,6 +477,10 @@ def test_client_ca
445477 pend "LibreSSL doesn't support certificate_authorities" if libressl?
446478
447479 ctx_proc = Proc . new do |ctx |
480+ store = OpenSSL ::X509 ::Store . new
481+ store . add_cert ( @ca_cert )
482+ store . purpose = OpenSSL ::X509 ::PURPOSE_SSL_CLIENT
483+ ctx . cert_store = store
448484 ctx . client_ca = [ @ca_cert ]
449485 end
450486
@@ -510,7 +546,7 @@ def test_verify_result
510546 ssl . sync_close = true
511547 begin
512548 assert_raise ( OpenSSL ::SSL ::SSLError ) { ssl . connect }
513- assert_equal ( OpenSSL ::X509 ::V_ERR_SELF_SIGNED_CERT_IN_CHAIN , ssl . verify_result )
549+ assert_equal ( OpenSSL ::X509 ::V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY , ssl . verify_result )
514550 ensure
515551 ssl . close
516552 end
@@ -1162,9 +1198,7 @@ def test_connect_certificate_verify_failed_exception_message
11621198 start_server ( ignore_listener_error : true ) { |port |
11631199 ctx = OpenSSL ::SSL ::SSLContext . new
11641200 ctx . set_params
1165- # OpenSSL <= 1.1.0: "self signed certificate in certificate chain"
1166- # OpenSSL >= 3.0.0: "self-signed certificate in certificate chain"
1167- assert_raise_with_message ( OpenSSL ::SSL ::SSLError , /self.signed/ ) {
1201+ assert_raise_with_message ( OpenSSL ::SSL ::SSLError , /unable to get local issuer certificate/ ) {
11681202 server_connect ( port , ctx )
11691203 }
11701204 }
0 commit comments