@@ -81,10 +81,42 @@ def test_debug_dev
8181 end
8282
8383 def test_verification_without_httpclient
84- raw_cert = "-----BEGIN CERTIFICATE-----\n MIIDOTCCAiGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMRMwEQYKCZImiZPyLGQB\n GRYDb3JnMRkwFwYKCZImiZPyLGQBGRYJcnVieS1sYW5nMRAwDgYDVQQDDAdSdWJ5\n IENBMB4XDTE2MDgxMDE3MjEzNFoXDTE3MDgxMDE3MjEzNFowSzETMBEGCgmSJomT\n 8ixkARkWA29yZzEZMBcGCgmSJomT8ixkARkWCXJ1YnktbGFuZzEZMBcGA1UEAwwQ\n UnVieSBjZXJ0aWZpY2F0ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB\n AJCfsSXpSMpmZCVa+ZCM+QDgomnhDlvnrGDq6pasTaIspGTXgws+7r8Dt/cNe6EH\n HJpRH2cGRiO4yPcfcT9eS4X7k8OC4f33wHfACOmLu6LeoNE8ujmSk6L6WzLUI+sE\n nLZbFrXxoAo4XHsm8vEG9C+jEoXZ1p+47wrAGaDwDQTnzlMy4dT9pRQEJP2G/Rry\n UkuZn8SUWmh3/YS78iaSzsNF1cgE1ealHOrPPFDjiCGDaH/LHyUPYlbFSLZ/B7Qx\n Lxi5sePLcywWq/EJrmWpgeVTDjtNijsdKv/A3qkY+fm/oD0pzt7XsfJaP9YKNyJO\n QFdxWZeiPcDF+Hwf+IwSr+kCAwEAAaMxMC8wDgYDVR0PAQH/BAQDAgeAMB0GA1Ud\n DgQWBBQNvzYzJyXemGhxbA8NMXLolDnPyjANBgkqhkiG9w0BAQsFAAOCAQEARIJV\n oKejGlOTn71QutnNnu07UtTu0IHs6YqjYzzND+m4JXLN+wvYm72AFUG0b1L7dRg0\n iK8XjQrlNQNVqP1Mc6tffchy20neOPOHeiO6qTdRU8P2S8D3Uwe+1qhgxjfE+cWc\n wZmWxYK4HA8c58PxWMqrkr2QqXDplG9KWLvOgrtPGiLLZcQSKhvvB63QzItHBDU6\n RayiJY3oPkK/HrIvFlySqFqzWmuyknkciOFywEHQMz/tcSFJ2QFpPj/tBz9VXohH\n Z8KscmfhZrTPBjo+ky1lz/WraWoz4LMiLnkC2ABczWLRSawu+v3Irx1NFJngt05e\n pqwtqIUeg7j+JLiTaA==\n -----END CERTIFICATE-----"
85- raw_ca_cert = "-----BEGIN CERTIFICATE-----\n MIIDYjCCAkqgAwIBAgIBATANBgkqhkiG9w0BAQsFADBCMRMwEQYKCZImiZPyLGQB\n GRYDb3JnMRkwFwYKCZImiZPyLGQBGRYJcnVieS1sYW5nMRAwDgYDVQQDDAdSdWJ5\n IENBMB4XDTE2MDgxMDE3MjA1NFoXDTE4MDgxMDE3MjA1NFowQjETMBEGCgmSJomT\n 8ixkARkWA29yZzEZMBcGCgmSJomT8ixkARkWCXJ1YnktbGFuZzEQMA4GA1UEAwwH\n UnVieSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALKGwyM3Ejtl\n po7CqaDlS71gDZn3gm6IwWpmRMLJofSI9LCwAbjijSC2HvO0xUWoYW40FbzjnnEi\n gszsWyPwuQIx9t0bhuAyllNIfImmkaQkrikXKBKzia4jPnbc4iXPnfjuThjESFWl\n tfbN6y1B5TjKhD1KelfakUO+iMu8WlIA9NKQZYfJ/F3QSpP5Iqb3KN/jVifFbDV8\n bAl3Ln4rT2kTCKrZZcl1jmWsJv8jBw6+P7hk0/Mu0JeHAITsjbNbpHd8UXpCfbVs\n sNGZrBU4uJdZ2YTG+Y27/t25jFNQwb+TWbvig7rfdX2sjssuxa00BBxarC08tIVj\n ZprM37KcNn8CAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\n AQYwHQYDVR0OBBYEFA2/NjMnJd6YaHFsDw0xcuiUOc/KMB8GA1UdIwQYMBYEFA2/\n NjMnJd6YaHFsDw0xcuiUOc/KMA0GCSqGSIb3DQEBCwUAA4IBAQAJSOw49XqvUll0\n 3vU9EAO6yUdeZSsQENIfYbRMQgapbnN1vTyrUjPZkGC5hIE1pVdoHtEoUEICxIwy\n r6BKxiSLBDLp+rvIuDdzMkXIWdUVvTZguVRyKtM2gfnpsPLpVnv+stBmAW2SMyxm\n kymhOpkjdv3He+45uorB3tdfBS9VVomDEUJdg38UE1b5eXRQ3D6gG0iCPFzKszXg\n LoAYhGxtjCJaKlbzduMK0YO6aelgW1+XnVIKcA7DJ9egk5d/dFZBPFfwumwr9hTH\n h7/fp3Fr87weI+CkfmFyJZrsEBlXJBVuvPesMVHTh3Whm5kmCdWcBJU0QmSq42ZL\n 72U0PXLR\n -----END CERTIFICATE-----"
86- ca_cert = ::OpenSSL ::X509 ::Certificate . new ( raw_ca_cert )
87- cert = ::OpenSSL ::X509 ::Certificate . new ( raw_cert )
84+ ca_cert = ::OpenSSL ::X509 ::Certificate . new ( %w[ -----BEGIN\ CERTIFICATE-----
85+ MIIC3jCCAcYCCQCUWi3t8e122TANBgkqhkiG9w0BAQsFADAxMQ0wCwYDVQQKDARS
86+ dWJ5MRMwEQYDVQQLDApodHRwY2xpZW50MQswCQYDVQQDDAJDQTAeFw0xODAyMjcx
87+ MTM0NDRaFw0yODAyMjUxMTM0NDRaMDExDTALBgNVBAoMBFJ1YnkxEzARBgNVBAsM
88+ Cmh0dHBjbGllbnQxCzAJBgNVBAMMAkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
89+ MIIBCgKCAQEAs6FPPj8PVl1uxsMZas4VC/ibRvtyXQkfrEa7TO032Kh+ETsOQNS8
90+ QJedhw/BMHuoVbU0/b6PZ//LJTUDN/C77/QWHKzcMoxkNye5PC2cJlSQMosaKjYG
91+ 1ERYmJ+FBiMMSpcLOCS5cYoP2fJHGtHqZPkxIPYy+IKQ7WuP3tUXkVC+ftpD6H4V
92+ 6MUnfLwagpaAAbRoFUJQoZISmH2+F5GOKX9KKiMBI94yqRRN4K/B9iqXgld45Hmg
93+ 67vX0ckRbqBhrz1CwPtaETLFB4hZT2ouBkMQYtrvpNXv80p7vcz+BwORo8b2Ns9B
94+ 4FqtpjMaS9Mf95z4Mn+NG7lanYtsHO2svwIDAQABMA0GCSqGSIb3DQEBCwUAA4IB
95+ AQBu614zHB5SS+ORYrRwl7tICKUipWHdCJfYsJOQy/FKwe7vedwd/Uclfe06GU+m
96+ bNv0y22/oF7vrM3EfnxFe2DNIKXTndszrQSLpT6OPBe4mAOSJxnIMy6B6/PyhK6I
97+ D7TWFSVlYX9a4OfolsoE0gQtxhyLud4rvJgXyAq9kRZ1FcNfI75cImk67rCa8jRY
98+ TJOTidKq1Kcn6RY7d8cf581HP7y/eK887K6lBvGiQE1aFDSLe2ZLY+rxS9GSMYfK
99+ 81XhUX2QKytGYch2y95ThMwOljVTg6fKDrtKGwj9mSsnlfTFX3gikvLLtB/o7JPR
100+ 2pWBic8PX7gnANQqH/4ahv1M
101+ -----END\ CERTIFICATE----- ] . join ( "\n " ) )
102+ cert = ::OpenSSL ::X509 ::Certificate . new ( %w[ -----BEGIN\ CERTIFICATE-----
103+ MIIC5zCCAc8CCQCz/lMJNLxQDjANBgkqhkiG9w0BAQsFADAxMQ0wCwYDVQQKDARS
104+ dWJ5MRMwEQYDVQQLDApodHRwY2xpZW50MQswCQYDVQQDDAJDQTAeFw0xODAyMjcx
105+ MTM1MTNaFw0yNzExMjcxMTM1MTNaMDoxDTALBgNVBAoMBFJ1YnkxEzARBgNVBAsM
106+ Cmh0dHBjbGllbnQxFDASBgNVBAMMC0NlcnRpZmljYXRlMIIBIjANBgkqhkiG9w0B
107+ AQEFAAOCAQ8AMIIBCgKCAQEAo/zP4oPyqerNyJYNTKzAGGQR8uKmP9wLnLm/yTf/
108+ jwzVLj3rvunw54aw89V3R4LLwBBMgFlE9OrUa+2zCvZJ8ykSoltU+w9E2EdXnXAR
109+ C/GW678MA06NPBuMNQyf+7Lv7dipdv+0hUNXFarwGiJkCms0zcmTonkOC8Bh7stZ
110+ EykkvQs5zmYVd+G26D5un8Wzjl6OckbBDcKTS9u9H1YveRcnN7odsh+qI4PjDmKG
111+ PXR8Gz/loNYN/I55Hqe7vkQJZ7r1PjSBp/fIcb4pNEkKS9DAcNWkoHF2j5nBNdOq
112+ mH3WR36vKlw5S4HLzDXQDeueFbtk3QGrWY2MWrpJNapeAQIDAQABMA0GCSqGSIb3
113+ DQEBCwUAA4IBAQB2CiGKAvHjr4kjOavWqGfPv115N4fhmBcPH4YAeJB9mHTzpoPV
114+ BCm0ouRG5Oqj/DJhm+mckFKSorZFSgVb/G92w0uXRvBMPJb4wyIbp5ld6K3138cn
115+ DtmeON3gbHwh3or741LdD6GIaulA9CL/qI3bbiyrJrHAZuHbpA6UqHfTKTBVi0uq
116+ kv8qmA8FrzI2itDqdp0dq3QMNGnG40OM8NSDX+8A9wMahPh+Oe3TePSvDTahXIU1
117+ o+dzaUEIVhUWEikQBnfeEnxzN8B/qtt3wEpliAip9Z3LuN0pVFb81Mx1wEZls2Bd
118+ Kj83iBw7flO651USNPnkOkU3DegNtcpTaT5M
119+ -----END\ CERTIFICATE----- ] . join ( "\n " ) )
88120 store = ::OpenSSL ::X509 ::Store . new
89121 store . add_cert ( ca_cert )
90122 assert ( store . verify ( cert ) )
@@ -245,10 +277,39 @@ def test_set_default_paths
245277 end
246278 end
247279
280+ def test_load_cacerts
281+ omit_if ( RUBY_ENGINE == 'jruby' , 'SSL_CERT_FILE environment does not work on JRuby' )
282+
283+ # disables loading default openssl paths
284+ stub_x509_const ( :DEFAULT_CERT_FILE , '/invalid' ) do
285+ assert_raise ( OpenSSL ::SSL ::SSLError ) do
286+ @client . get ( @url )
287+ end
288+
289+ setup_client
290+
291+ escape_env do
292+ ENV [ 'SSL_CERT_FILE' ] = File . join ( DIR , 'ca-chain.pem' )
293+ @client . get ( @url )
294+ end
295+ end
296+ end
297+
298+ def test_default_paths
299+ assert_raise ( OpenSSL ::SSL ::SSLError ) do
300+ @client . get ( @url )
301+ end
302+ escape_env do
303+ ENV [ 'SSL_CERT_FILE' ] = File . join ( DIR , 'ca-chain.pem' )
304+ setup_client
305+ @client . get ( @url )
306+ end
307+ end
308+
248309 def test_no_sslv3
249310 teardown_server
250311 setup_server_with_ssl_version ( :SSLv3 )
251- assert_raise ( OpenSSL :: SSL :: SSLError ) do
312+ assert_raise ( ) do
252313 @client . ssl_config . verify_mode = nil
253314 @client . get ( "https://localhost:#{ serverport } /hello" )
254315 end
@@ -264,7 +325,7 @@ def test_allow_tlsv1
264325 end
265326
266327 def test_use_higher_TLS
267- omit ( ' TODO: it does not pass with Java 7 or old openssl ' )
328+ # TODO: it does not pass with Java 7 or old openssl
268329 teardown_server
269330 setup_server_with_ssl_version ( 'TLSv1_2' )
270331 assert_nothing_raised do
@@ -429,6 +490,20 @@ def test_timeout
429490
430491private
431492
493+ def stub_x509_const ( name , value )
494+ OpenSSL ::X509 . module_eval do
495+ begin
496+ original = remove_const ( name )
497+ const_set ( name , value )
498+
499+ yield
500+ ensure
501+ remove_const ( name )
502+ const_set ( name , original )
503+ end
504+ end
505+ end
506+
432507 def cert ( filename )
433508 OpenSSL ::X509 ::Certificate . new ( File . read ( File . join ( DIR , filename ) ) )
434509 end
@@ -474,7 +549,7 @@ def setup_server_with_ssl_version(ssl_version)
474549 ssl_version = ssl_version . tr ( '_' , '.' )
475550 end
476551 logger = Logger . new ( STDERR )
477- logger . level = Logger ::Severity ::FATAL # avoid logging SSLError (ERROR level)
552+ logger . level = Logger ::Severity ::FATAL # avoid logging SSLError (ERROR level)
478553 @server = WEBrick ::HTTPServer . new (
479554 :BindAddress => "localhost" ,
480555 :Logger => logger ,
0 commit comments