Skip to content

Commit 54cbc32

Browse files
authored
Merge pull request #8258 from NicolaeIotu/add-curlrequest-curlopt_ssl_verifyhost
fix: [CURLRequest] skip hostname checks if options 'verify' false
2 parents bcc9b54 + 5b4482c commit 54cbc32

File tree

5 files changed

+49
-13
lines changed

5 files changed

+49
-13
lines changed

system/HTTP/CURLRequest.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -549,16 +549,18 @@ protected function setCURLOptions(array $curlOptions = [], array $config = [])
549549
// SSL Verification
550550
if (isset($config['verify'])) {
551551
if (is_string($config['verify'])) {
552-
$file = realpath($config['ssl_key']) ?: $config['ssl_key'];
552+
$file = realpath($config['verify']) ?: $config['verify'];
553553

554554
if (! is_file($file)) {
555-
throw HTTPException::forInvalidSSLKey($config['ssl_key']);
555+
throw HTTPException::forInvalidSSLKey($config['verify']);
556556
}
557557

558558
$curlOptions[CURLOPT_CAINFO] = $file;
559-
$curlOptions[CURLOPT_SSL_VERIFYPEER] = 1;
559+
$curlOptions[CURLOPT_SSL_VERIFYPEER] = true;
560+
$curlOptions[CURLOPT_SSL_VERIFYHOST] = 2;
560561
} elseif (is_bool($config['verify'])) {
561562
$curlOptions[CURLOPT_SSL_VERIFYPEER] = $config['verify'];
563+
$curlOptions[CURLOPT_SSL_VERIFYHOST] = $config['verify'] ? 2 : 0;
562564
}
563565
}
564566

tests/system/HTTP/CURLRequestDoNotShareOptionsTest.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -535,8 +535,7 @@ public function testSSLVerification(): void
535535
$file = __FILE__;
536536

537537
$this->request->request('get', 'http://example.com', [
538-
'verify' => 'yes',
539-
'ssl_key' => $file,
538+
'verify' => $file,
540539
]);
541540

542541
$options = $this->request->curl_options;
@@ -545,7 +544,10 @@ public function testSSLVerification(): void
545544
$this->assertSame($file, $options[CURLOPT_CAINFO]);
546545

547546
$this->assertArrayHasKey(CURLOPT_SSL_VERIFYPEER, $options);
548-
$this->assertSame(1, $options[CURLOPT_SSL_VERIFYPEER]);
547+
$this->assertTrue($options[CURLOPT_SSL_VERIFYPEER]);
548+
549+
$this->assertArrayHasKey(CURLOPT_SSL_VERIFYHOST, $options);
550+
$this->assertSame(2, $options[CURLOPT_SSL_VERIFYHOST]);
549551
}
550552

551553
public function testSSLWithBadKey(): void
@@ -554,8 +556,7 @@ public function testSSLWithBadKey(): void
554556
$this->expectException(HTTPException::class);
555557

556558
$this->request->request('get', 'http://example.com', [
557-
'verify' => 'yes',
558-
'ssl_key' => $file,
559+
'verify' => $file,
559560
]);
560561
}
561562

tests/system/HTTP/CURLRequestTest.php

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,7 @@ public function testSSLVerification(): void
518518
$file = __FILE__;
519519

520520
$this->request->request('get', 'http://example.com', [
521-
'verify' => 'yes',
522-
'ssl_key' => $file,
521+
'verify' => $file,
523522
]);
524523

525524
$options = $this->request->curl_options;
@@ -528,7 +527,25 @@ public function testSSLVerification(): void
528527
$this->assertSame($file, $options[CURLOPT_CAINFO]);
529528

530529
$this->assertArrayHasKey(CURLOPT_SSL_VERIFYPEER, $options);
531-
$this->assertSame(1, $options[CURLOPT_SSL_VERIFYPEER]);
530+
$this->assertTrue($options[CURLOPT_SSL_VERIFYPEER]);
531+
532+
$this->assertArrayHasKey(CURLOPT_SSL_VERIFYHOST, $options);
533+
$this->assertSame(2, $options[CURLOPT_SSL_VERIFYHOST]);
534+
}
535+
536+
public function testNoSSL(): void
537+
{
538+
$this->request->request('get', 'http://example.com', [
539+
'verify' => false,
540+
]);
541+
542+
$options = $this->request->curl_options;
543+
544+
$this->assertArrayHasKey(CURLOPT_SSL_VERIFYPEER, $options);
545+
$this->assertFalse($options[CURLOPT_SSL_VERIFYPEER]);
546+
547+
$this->assertArrayHasKey(CURLOPT_SSL_VERIFYHOST, $options);
548+
$this->assertSame(0, $options[CURLOPT_SSL_VERIFYHOST]);
532549
}
533550

534551
public function testSSLWithBadKey(): void
@@ -537,8 +554,7 @@ public function testSSLWithBadKey(): void
537554
$this->expectException(HTTPException::class);
538555

539556
$this->request->request('get', 'http://example.com', [
540-
'verify' => 'yes',
541-
'ssl_key' => $file,
557+
'verify' => $file,
542558
]);
543559
}
544560

user_guide_src/source/changelogs/v4.4.4.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ Validation rules matches and differs
2727
Bugs have been fixed in the case where ``matches`` and ``differs`` in the Strict
2828
and Traditional rules validate data of non-string types.
2929

30+
The use of the `ssl_key` option in CURLRequest was removed
31+
==========================================================
32+
33+
Due to a bug, we were using the undocumented `ssl_key` config option to define the CA bundle in CURLRequest.
34+
This was fixed and is now working according to documentation. You can define your CA bundle via the `verify` option.
35+
3036
***************
3137
Message Changes
3238
***************
@@ -49,6 +55,8 @@ Deprecations
4955
Bugs Fixed
5056
**********
5157

58+
- **CURLRequest:** Fixed a bug where the hostname was checked even if options 'verify' was set to *false*.
59+
5260
See the repo's
5361
`CHANGELOG.md <https://github.com/codeigniter4/CodeIgniter4/blob/develop/CHANGELOG.md>`_
5462
for a complete list of bugs fixed.

user_guide_src/source/installation/upgrade_444.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,15 @@ changed (fixed).
5858
Note that Traditional Rules should not be used to validate data that is not a
5959
string.
6060

61+
The use of the `ssl_key` option in CURLRequest was removed
62+
==========================================================
63+
64+
CURLRequest option `ssl_key` it's not recognized anymore.
65+
If in use, option `ssl_key` must be replaced with option `verify` in order to define the path
66+
to a CA bundle for CURLRequest.
67+
68+
CURLRequest option `verify` can also take *boolean* values as usual.
69+
6170
*********************
6271
Breaking Enhancements
6372
*********************

0 commit comments

Comments
 (0)