summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAshish SHUKLA <ashish.is@lostca.se>2026-08-19 10:27:10 +0000
committerAndreas Enge <andreas@enge.fr>2026-08-24 16:02:07 +0200
commitd5d8f66e4675636993c61f5e30bdd8ab8df71ea8 (patch)
tree8575be72f7427500249ba51fe68667bedc86f65f
parentd6f60297ecfae67b171c63397b7f2eae8492268e (diff)
gnu: php-8.5: Update to 8.5.9.
* gnu/packages/php.scm (php-8.5): Update to 8.5.9. [source]<patches>: Remove extra patches. * gnu/packages/patches/php-01-fix-expired-certificate.patch: Delete file. * gnu/packages/patches/php-02-fix-sni-tests.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Unregister patches. Signed-off-by: Andreas Enge <andreas@enge.fr>
-rw-r--r--gnu/local.mk2
-rw-r--r--gnu/packages/patches/php-01-fix-expired-certificate.patch773
-rw-r--r--gnu/packages/patches/php-02-fix-sni-tests.patch211
-rw-r--r--gnu/packages/php.scm8
4 files changed, 3 insertions, 991 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 9ead246abae..e170320b745 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -2227,8 +2227,6 @@ dist_patch_DATA = \
2227 %D%/packages/patches/perl-www-curl-remove-symbol.patch \ 2227 %D%/packages/patches/perl-www-curl-remove-symbol.patch \
2228 %D%/packages/patches/perl-xml-libxml-fix-function-prototypes.patch \ 2228 %D%/packages/patches/perl-xml-libxml-fix-function-prototypes.patch \
2229 %D%/packages/patches/phoronix-test-suite-fsdg.patch \ 2229 %D%/packages/patches/phoronix-test-suite-fsdg.patch \
2230 %D%/packages/patches/php-01-fix-expired-certificate.patch \
2231 %D%/packages/patches/php-02-fix-sni-tests.patch \
2232 %D%/packages/patches/php-03-fix-ftp-certificate.patch \ 2230 %D%/packages/patches/php-03-fix-ftp-certificate.patch \
2233 %D%/packages/patches/picprog-non-intel-support.patch \ 2231 %D%/packages/patches/picprog-non-intel-support.patch \
2234 %D%/packages/patches/pidgin-add-search-path.patch \ 2232 %D%/packages/patches/pidgin-add-search-path.patch \
diff --git a/gnu/packages/patches/php-01-fix-expired-certificate.patch b/gnu/packages/patches/php-01-fix-expired-certificate.patch
deleted file mode 100644
index a238b6db458..00000000000
--- a/gnu/packages/patches/php-01-fix-expired-certificate.patch
+++ /dev/null
@@ -1,773 +0,0 @@
1From 0f38bfdef2d9e5ccbb266658b29bd576e36ed8a8 Mon Sep 17 00:00:00 2001
2From: Jakub Zelenka <bukka@php.net>
3Date: Fri, 3 Apr 2026 21:49:54 +0200
4Subject: [PATCH] Fix GH-21617: sni_server self signed certifcate expired
5
6It changes the SNI tests to use certificate generator like other TLS
7tests.
8
9Closes GH-21628
10
11Upstream-Status: Merged in master.
12---
13 ext/openssl/tests/gh9310.phpt | 59 +++++++++++------
14 .../openssl_x509_checkpurpose_basic.phpt | 2 +-
15 .../openssl_x509_export_to_file_leak.phpt | 2 +-
16 .../{sni_server_uk.pem => sni_server.pem} | 0
17 ext/openssl/tests/sni_server.phpt | 29 +++++++--
18 ext/openssl/tests/sni_server_ca.pem | 63 -------------------
19 ext/openssl/tests/sni_server_cs.pem | 57 -----------------
20 ext/openssl/tests/sni_server_cs_cert.pem | 30 ---------
21 ext/openssl/tests/sni_server_cs_key.pem | 27 --------
22 ext/openssl/tests/sni_server_key_cert.phpt | 45 ++++++++++---
23 ext/openssl/tests/sni_server_uk_cert.pem | 30 ---------
24 ext/openssl/tests/sni_server_uk_key.pem | 27 --------
25 ext/openssl/tests/sni_server_us.pem | 57 -----------------
26 ext/openssl/tests/sni_server_us_cert.pem | 30 ---------
27 ext/openssl/tests/sni_server_us_key.pem | 27 --------
28 15 files changed, 106 insertions(+), 379 deletions(-)
29 rename ext/openssl/tests/{sni_server_uk.pem => sni_server.pem} (100%)
30 delete mode 100644 ext/openssl/tests/sni_server_ca.pem
31 delete mode 100644 ext/openssl/tests/sni_server_cs.pem
32 delete mode 100644 ext/openssl/tests/sni_server_cs_cert.pem
33 delete mode 100644 ext/openssl/tests/sni_server_cs_key.pem
34 delete mode 100644 ext/openssl/tests/sni_server_uk_cert.pem
35 delete mode 100644 ext/openssl/tests/sni_server_uk_key.pem
36 delete mode 100644 ext/openssl/tests/sni_server_us.pem
37 delete mode 100644 ext/openssl/tests/sni_server_us_cert.pem
38 delete mode 100644 ext/openssl/tests/sni_server_us_key.pem
39
40diff --git a/ext/openssl/tests/gh9310.phpt b/ext/openssl/tests/gh9310.phpt
41index 07a7d442cec..874ed4c781d 100644
42--- a/ext/openssl/tests/gh9310.phpt
43+++ b/ext/openssl/tests/gh9310.phpt
44@@ -23,7 +23,21 @@
45
46 copy($certFile, $baseDirCertFile);
47 copy($pkFile, $baseDirPkFile);
48-copy(__DIR__ . '/sni_server_uk_cert.pem', $baseDir . '/sni_server_uk_cert.pem');
49+
50+$sniCaFile = __DIR__ . '/gh9310_sni_ca.pem.tmp';
51+$sniCsFile = __DIR__ . '/gh9310_sni_cs.pem.tmp';
52+$sniUkCertFile = __DIR__ . '/gh9310_sni_uk_cert.pem.tmp';
53+$sniUkKeyFile = __DIR__ . '/gh9310_sni_uk_key.pem.tmp';
54+$sniUsCertFile = __DIR__ . '/gh9310_sni_us_cert.pem.tmp';
55+$sniUsKeyFile = __DIR__ . '/gh9310_sni_us_key.pem.tmp';
56+$baseDirSniUkCertFile = $baseDir . '/sni_uk_cert.pem';
57+
58+$certificateGenerator->saveCaCert($sniCaFile);
59+$certificateGenerator->saveNewCertAsFileWithKey('cs.php.net', $sniCsFile);
60+$certificateGenerator->saveNewCertAndKey('uk.php.net', $sniUkCertFile, $sniUkKeyFile);
61+$certificateGenerator->saveNewCertAndKey('us.php.net', $sniUsCertFile, $sniUsKeyFile);
62+
63+copy($sniUkCertFile, $baseDirSniUkCertFile);
64
65
66 $serverCodeTemplate = <<<'CODE'
67@@ -60,7 +74,7 @@
68 $flags = STREAM_SERVER_BIND|STREAM_SERVER_LISTEN;
69 $ctx = stream_context_create(['ssl' => [
70 'SNI_server_certs' => [
71- "cs.php.net" => __DIR__ . "/sni_server_cs.pem",
72+ "cs.php.net" => '%s',
73 ]
74 ]]);
75
76@@ -69,6 +83,7 @@
77
78 stream_socket_accept($server);
79 CODE;
80+$sniServerCodeV1 = sprintf($sniServerCodeV1, $sniCsFile);
81
82 $sniServerCodeV2 = <<<'CODE'
83 ini_set('log_errors', 'On');
84@@ -77,8 +92,8 @@
85 $ctx = stream_context_create(['ssl' => [
86 'SNI_server_certs' => [
87 "uk.php.net" => [
88- 'local_cert' => __DIR__ . '/gh9310/sni_server_uk_cert.pem',
89- 'local_pk' => __DIR__ . '/sni_server_uk_key.pem',
90+ 'local_cert' => '%s',
91+ 'local_pk' => '%s',
92 ]
93 ]
94 ]]);
95@@ -88,6 +103,7 @@
96
97 stream_socket_accept($server);
98 CODE;
99+$sniServerCodeV2 = sprintf($sniServerCodeV2, $baseDirSniUkCertFile, $sniUkKeyFile);
100
101 $sniServerCodeV3 = <<<'CODE'
102 ini_set('log_errors', 'On');
103@@ -96,8 +112,8 @@
104 $ctx = stream_context_create(['ssl' => [
105 'SNI_server_certs' => [
106 "us.php.net" => [
107- 'local_cert' => __DIR__ . '/sni_server_us_cert.pem',
108- 'local_pk' => __DIR__ . '/sni_server_us_key.pem',
109+ 'local_cert' => '%s',
110+ 'local_pk' => '%s',
111 ]
112 ]
113 ]]);
114@@ -107,14 +123,15 @@
115
116 stream_socket_accept($server);
117 CODE;
118+$sniServerCodeV3 = sprintf($sniServerCodeV3, $sniUsCertFile, $sniUsKeyFile);
119
120 $sniClientCodeTemplate = <<<'CODE'
121 $flags = STREAM_CLIENT_CONNECT;
122 $ctxArr = [
123- 'cafile' => __DIR__ . '/sni_server_ca.pem',
124+ 'cafile' => '%s',
125+ 'peer_name' => '%s',
126 ];
127
128- $ctxArr['peer_name'] = '%s';
129 $ctx = stream_context_create(['ssl' => $ctxArr]);
130 @stream_socket_client("tls://{{ ADDR }}", $errno, $errstr, 1, $flags, $ctx);
131 CODE;
132@@ -131,13 +148,13 @@
133 $serverCode = sprintf($serverCodeTemplate, $baseDirCertFile, $pkFile);
134 ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
135
136-$sniClientCode = sprintf($sniClientCodeTemplate, 'cs.php.net');
137+$sniClientCode = sprintf($sniClientCodeTemplate, $sniCaFile, 'cs.php.net');
138 ServerClientTestCase::getInstance()->run($sniClientCode, $sniServerCodeV1);
139
140-$sniClientCode = sprintf($sniClientCodeTemplate, 'uk.php.net');
141+$sniClientCode = sprintf($sniClientCodeTemplate, $sniCaFile, 'uk.php.net');
142 ServerClientTestCase::getInstance()->run($sniClientCode, $sniServerCodeV2);
143
144-$sniClientCode = sprintf($sniClientCodeTemplate, 'us.php.net');
145+$sniClientCode = sprintf($sniClientCodeTemplate, $sniCaFile, 'us.php.net');
146 ServerClientTestCase::getInstance()->run($sniClientCode, $sniServerCodeV3);
147
148 ?>
149@@ -149,7 +166,13 @@
150 @unlink(__DIR__ . '/gh9310.key');
151 @unlink($baseDir . '/cert.crt');
152 @unlink($baseDir . '/private.key');
153-@unlink($baseDir . '/sni_server_uk_cert.pem');
154+@unlink($baseDir . '/sni_uk_cert.pem');
155+@unlink(__DIR__ . '/gh9310_sni_ca.pem.tmp');
156+@unlink(__DIR__ . '/gh9310_sni_cs.pem.tmp');
157+@unlink(__DIR__ . '/gh9310_sni_uk_cert.pem.tmp');
158+@unlink(__DIR__ . '/gh9310_sni_uk_key.pem.tmp');
159+@unlink(__DIR__ . '/gh9310_sni_us_cert.pem.tmp');
160+@unlink(__DIR__ . '/gh9310_sni_us_key.pem.tmp');
161 @rmdir($baseDir);
162 ?>
163 --EXPECTF--
164@@ -169,15 +192,15 @@
165 PHP Warning: stream_socket_accept(): Unable to get real path of private key file `%sgh9310.key' in %s
166 PHP Warning: stream_socket_accept(): Failed to enable crypto in %s
167 PHP Warning: stream_socket_accept(): Accept failed: %s
168-PHP Warning: stream_socket_accept(): open_basedir restriction in effect. File(%ssni_server_cs.pem) is not within the allowed path(s): (%sgh9310) in %s
169-PHP Warning: stream_socket_accept(): Failed setting local cert chain file `%ssni_server_cs.pem'; file not found in %s
170+PHP Warning: stream_socket_accept(): open_basedir restriction in effect. File(%sgh9310_sni_cs.pem.tmp) is not within the allowed path(s): (%sgh9310) in %s
171+PHP Warning: stream_socket_accept(): Failed setting local cert chain file `%sgh9310_sni_cs.pem.tmp'; file not found in %s
172 PHP Warning: stream_socket_accept(): Failed to enable crypto in %s
173 PHP Warning: stream_socket_accept(): Accept failed: %s
174-PHP Warning: stream_socket_accept(): open_basedir restriction in effect. File(%ssni_server_uk_key.pem) is not within the allowed path(s): (%sgh9310) in %s
175-PHP Warning: stream_socket_accept(): Failed setting local private key file `%ssni_server_uk_key.pem'; could not open file in %s
176+PHP Warning: stream_socket_accept(): open_basedir restriction in effect. File(%sgh9310_sni_uk_key.pem.tmp) is not within the allowed path(s): (%sgh9310) in %s
177+PHP Warning: stream_socket_accept(): Failed setting local private key file `%sgh9310_sni_uk_key.pem.tmp'; could not open file in %s
178 PHP Warning: stream_socket_accept(): Failed to enable crypto in %s
179 PHP Warning: stream_socket_accept(): Accept failed: %s
180-PHP Warning: stream_socket_accept(): open_basedir restriction in effect. File(%ssni_server_us_cert.pem) is not within the allowed path(s): (%sgh9310) in %s
181-PHP Warning: stream_socket_accept(): Failed setting local cert chain file `%ssni_server_us_cert.pem'; could not open file in %s
182+PHP Warning: stream_socket_accept(): open_basedir restriction in effect. File(%sgh9310_sni_us_cert.pem.tmp) is not within the allowed path(s): (%sgh9310) in %s
183+PHP Warning: stream_socket_accept(): Failed setting local cert chain file `%sgh9310_sni_us_cert.pem.tmp'; could not open file in %s
184 PHP Warning: stream_socket_accept(): Failed to enable crypto in %s
185 PHP Warning: stream_socket_accept(): Accept failed: %s
186diff --git a/ext/openssl/tests/openssl_x509_checkpurpose_basic.phpt b/ext/openssl/tests/openssl_x509_checkpurpose_basic.phpt
187index d09317b1d22..c1dba964bc6 100644
188--- a/ext/openssl/tests/openssl_x509_checkpurpose_basic.phpt
189+++ b/ext/openssl/tests/openssl_x509_checkpurpose_basic.phpt
190@@ -17,7 +17,7 @@
191 $bert = "file://" . __DIR__ . "/bug41033.pem";
192 $sert = "file://" . __DIR__ . "/san-cert.pem";
193 $cpca = __DIR__ . "/san-cert.pem";
194-$utfl = __DIR__ . "/sni_server_uk.pem";
195+$utfl = __DIR__ . "/sni_server.pem";
196 $rcrt = openssl_x509_read($cert);
197
198 /* int openssl_x509_checkpurpose ( mixed $x509cert , int $purpose); */
199diff --git a/ext/openssl/tests/openssl_x509_export_to_file_leak.phpt b/ext/openssl/tests/openssl_x509_export_to_file_leak.phpt
200index 5775c2597c3..59a942d6a67 100644
201--- a/ext/openssl/tests/openssl_x509_export_to_file_leak.phpt
202+++ b/ext/openssl/tests/openssl_x509_export_to_file_leak.phpt
203@@ -5,7 +5,7 @@
204 --FILE--
205 <?php
206
207-$path = "file://" . __DIR__ . "/sni_server_ca.pem";
208+$path = "file://" . __DIR__ . "/cert.crt";
209 var_dump(openssl_x509_export_to_file($path, str_repeat("a", 10000)));
210
211 ?>
212diff --git a/ext/openssl/tests/sni_server_uk.pem b/ext/openssl/tests/sni_server.pem
213similarity index 100%
214rename from ext/openssl/tests/sni_server_uk.pem
215rename to ext/openssl/tests/sni_server.pem
216diff --git a/ext/openssl/tests/sni_server.phpt b/ext/openssl/tests/sni_server.phpt
217index 7f9a4e82872..db0b0190dab 100644
218--- a/ext/openssl/tests/sni_server.phpt
219+++ b/ext/openssl/tests/sni_server.phpt
220@@ -8,13 +8,25 @@
221 ?>
222 --FILE--
223 <?php
224+$caFile = __DIR__ . DIRECTORY_SEPARATOR . 'sni_server_ca.pem.tmp';
225+$csFile = __DIR__ . DIRECTORY_SEPARATOR . 'sni_server_cs.pem.tmp';
226+$ukFile = __DIR__ . DIRECTORY_SEPARATOR . 'sni_server_uk.pem.tmp';
227+$usFile = __DIR__ . DIRECTORY_SEPARATOR . 'sni_server_us.pem.tmp';
228+
229+include 'CertificateGenerator.inc';
230+$certificateGenerator = new CertificateGenerator();
231+$certificateGenerator->saveCaCert($caFile);
232+$certificateGenerator->saveNewCertAsFileWithKey('cs.php.net', $csFile);
233+$certificateGenerator->saveNewCertAsFileWithKey('uk.php.net', $ukFile);
234+$certificateGenerator->saveNewCertAsFileWithKey('us.php.net', $usFile);
235+
236 $serverCode = <<<'CODE'
237 $flags = STREAM_SERVER_BIND|STREAM_SERVER_LISTEN;
238 $ctx = stream_context_create(['ssl' => [
239 'SNI_server_certs' => [
240- "cs.php.net" => __DIR__ . "/sni_server_cs.pem",
241- "uk.php.net" => __DIR__ . "/sni_server_uk.pem",
242- "us.php.net" => __DIR__ . "/sni_server_us.pem"
243+ "cs.php.net" => '%s',
244+ "uk.php.net" => '%s',
245+ "us.php.net" => '%s',
246 ]
247 ]]);
248
249@@ -25,11 +37,12 @@
250 @stream_socket_accept($server, 3);
251 }
252 CODE;
253+$serverCode = sprintf($serverCode, $csFile, $ukFile, $usFile);
254
255 $clientCode = <<<'CODE'
256 $flags = STREAM_CLIENT_CONNECT;
257 $ctxArr = [
258- 'cafile' => __DIR__ . '/sni_server_ca.pem',
259+ 'cafile' => '%s',
260 'capture_peer_cert' => true
261 ];
262
263@@ -51,10 +64,18 @@
264 $cert = stream_context_get_options($ctx)['ssl']['peer_certificate'];
265 var_dump(openssl_x509_parse($cert)['subject']['CN']);
266 CODE;
267+$clientCode = sprintf($clientCode, $caFile);
268
269 include 'ServerClientTestCase.inc';
270 ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
271 ?>
272+--CLEAN--
273+<?php
274+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'sni_server_ca.pem.tmp');
275+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'sni_server_cs.pem.tmp');
276+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'sni_server_uk.pem.tmp');
277+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'sni_server_us.pem.tmp');
278+?>
279 --EXPECTF--
280 string(%d) "cs.php.net"
281 string(%d) "uk.php.net"
282diff --git a/ext/openssl/tests/sni_server_ca.pem b/ext/openssl/tests/sni_server_ca.pem
283deleted file mode 100644
284index b2522884565..00000000000
285--- a/ext/openssl/tests/sni_server_ca.pem
286+++ /dev/null
287@@ -1,63 +0,0 @@
288------BEGIN CERTIFICATE-----
289-MIIFejCCA2KgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwQzELMAkGA1UEBhMCR0Ix
290-EDAOBgNVBAgMB0VuZ2xhbmQxEDAOBgNVBAoMB1BIUC5uZXQxEDAOBgNVBAMMB3Bo
291-cC5uZXQwHhcNMTcxMTIyMTQyODIzWhcNMjcxMTIwMTQyODIzWjBVMQswCQYDVQQG
292-EwJHQjEQMA4GA1UECAwHRW5nbGFuZDEQMA4GA1UECgwHUEhQLm5ldDEQMA4GA1UE
293-CwwHb3BlbnNzbDEQMA4GA1UEAwwHcGhwLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
294-ggIPADCCAgoCggIBAMeENPus84HfIaypUVybbn5ZZyu1gXSYZAnDYYHhOlHu5kFh
295-26ohnHnoheapXVRbUtDZgUW5BztA+vDhKkM5G3U4p+YsqcSA/IkF2JQBkJH1jrxs
296-XMDtXIA4/MzYAVtyySqoMsrbkSCDzvI8imsbZI9O1x02VgaqoaQ9JZvglt1nhTIY
297-YpTbTKGCzMmrnFGHITeBsVose1ACFIAtqKqvUaA6TxcCtVcrENY3T3N/vEmoHHBg
298-O7j9+UvYN/WRPNcv0aIOlro83O9xQuJdRCygPmcv/jkqWRKm2Pu0lEkvbMCvOJr/
299-Fz/kQg/6EVmIMsR/dgOMIjWjmpeTx24UJaNHUdNCeUbxIyTIyl9ISLWLM0Ipoq3L
300-95ygH6FSESAOpc8rVE2A5YZCtKlwvogMx3C/tMH1gWwMlfxn0CopP4Jx6lngw3yn
301-IpP0hnuCauQikBkyhsGu4J0Lbx5BsyDWQLwjiq4s8EcEy0vTdAvhDMRUGvpnjWaa
302-zBDVVrzHaRFvp6ueh35xf+dYieGL5UTICyrrQX9wwSafHV90a87y6XU+RwA25Dmc
303-V/kTn8/xkFv/4CbZp+0yArKpwXjqBMsQFbkFjT+Ky9MN+nedoFUMl7slgjpBs6RI
304-T08Hoa7/kMZGtLCiGcRXlwiIhB00gDz2avUvFTxwik9ssjDqBJGzNbBvZGb/AgMB
305-AAGjZjBkMB0GA1UdDgQWBBTjyuOBGnHnb+x20diIHG3sPuJFGjAfBgNVHSMEGDAW
306-gBQ0s99BNsV4Dszph6PArogA8HP4TDASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1Ud
307-DwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAFrQMmCoSe8uJbJLqPGMPW4ZE
308-0U81WWboc9FrSfezBYkTKuCjMTjQFv8oLp4pnuWZw22mHrOiz9izjNnXcR/rdVbG
309-Cip/JSHlTzHd3gnxSSd2diXvVrSb4zuLyN6WIficlsj3QdIP4Cdfv1pdHBTsRPbW
310-vuHpwYqqjxPBjqvoVZyZRyRM1pqpxLCvxOt4S3z4uZXyIH2UI7yWxI6MvdHBZg5m
311-TwiVi1gEQuRnYRy4sK9qJlBo5jERvzDr46W1e9Yz5sNMPfwWb64Hkkys3GqJt5am
312-OKxvgF3lvIK90vBjenGDfYEENP+0qdmdpHQkxGM2cl9iPqW8iyRGBVjdbzTIeRgB
313-u+CEbffSKWCpbm1Zcszv3FHMlsU4Px2pUTdLwEMgBQUPW/ngBMdRgVZE01GI7D1k
314-AM3hO347eehQTWoyuHgsnB2uaANEeR/XFBGDFmbs5ggAzxxRsH1FxoHXrv3iDIPW
315-9lKnSow+OZGcPKgaY5Nsregt4jO+pQqhzxlMa2QMfrMoGkEvrKNcDqeEI6KQa1SI
316-Zbq7sjf2w+VL0oQcse+gtg4q771dKy9V/XcfnPbiBAXfQqGj/v0LmZRn3ZRrkgzl
317-CaZocqVRJZbqu7/iu/p9pDRMR03vhBWPn7iM8VqzkhKjAlD0rolnQqvOAXyPpd/O
318-qYuYP+6Ymt/rUWXGVh0=
319------END CERTIFICATE-----
320------BEGIN CERTIFICATE-----
321-MIIFbDCCA1SgAwIBAgIJAJcrLHeFQrGEMA0GCSqGSIb3DQEBCwUAMEMxCzAJBgNV
322-BAYTAkdCMRAwDgYDVQQIDAdFbmdsYW5kMRAwDgYDVQQKDAdQSFAubmV0MRAwDgYD
323-VQQDDAdwaHAubmV0MB4XDTE3MTExNTE5MTEwMVoXDTM4MDUyOTE5MTEwMVowQzEL
324-MAkGA1UEBhMCR0IxEDAOBgNVBAgMB0VuZ2xhbmQxEDAOBgNVBAoMB1BIUC5uZXQx
325-EDAOBgNVBAMMB3BocC5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
326-AQC4bIXbh+e+OCbLum2FYB8i6ZnOShp1teWNEE/8A4ot20wkPxLeXFSU1Egn+3BG
327-fxHKrWxV/FOiL7bims/SfwptFkgNZkwE52HVk49zgQevG38smsnIGuBMXMKebLPT
328-wlsIWRqCmZqEmh1wNcC9+qwoHoYjvJvMYfFvofiSc7qkTFsjoBVe+ho90vjYMznr
329-Bs9DlD88iXO0kKN0Bsu2igz68JWkUsoNeD6UKSir16SmQZxdFPCM0O0gxmOyz4NZ
330-w8pJ5XGDJyS82fVp13tYCOBFhK0QBvvzaz/gN6De5arefm6cer9TX0HE+VvGhx4T
331-2lqydFLfAVKTTNoZHOQk2mFVUm7dlMzLvsgNKdEZH6wAa12eBImCea+CyJNkbGLC
332-nrN6a93iGqTft75sbDyvzRk/BdnxadkAPlOxgK1qGrOgeS0+7chPMh24MRoKj5bU
333-lYGdcp7Y9qIW1hZXFfgPJO0yMOug/7J14jybp+YhymBIBTZYi1zbGqGNXdLPyp77
334-9KTfyJE9KkbGegBvwqJmZTW8QoUDllopDjr1zaIqHWJqfAK7vGivu0iLVJHBRbRs
335-w9c48RCjfIh7AkvFKsdIDt9SMdZOdm9D8SXosYPM1zMFQsFFRPh/nKyl9QnhWbwd
336-Vs1tIFDrb10Z2sn0pF/V0F0gubR5rvYs+3h/dLciLVFobQIDAQABo2MwYTAdBgNV
337-HQ4EFgQUNLPfQTbFeA7M6YejwK6IAPBz+EwwHwYDVR0jBBgwFoAUNLPfQTbFeA7M
338-6YejwK6IAPBz+EwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJ
339-KoZIhvcNAQELBQADggIBAIkctDRCNcNVs2qP/O3zZsVZ1cqlqYNjcHIVHqNZRvVb
340-bPtInZ/i/6BbwA5QM/giKpl2aMwetUnezjHVD+7/m24Mfs1FWyPD3joCMIANj7hR
341-MNbmX1LQBMt/bD3E5trq9S9rZ++/ny4gn/z2jH3x+lzDMBDiam/wXbvSmyIUPUX6
342-V8FFpkTBNERpurUvX1NEFLuiilWKrI7/u1qS11PGBcX3pNQNfhKNMtuFz74hAE7C
343-RE8756CGu2bZzydYCarUXSNTXqNm5ly2J0UN6Al4myFwj/6XnLnDhXDAI8CaqDMD
344-MwmxUzJvzuphNS085ZIntrSgPJESGozevEsf9bGD8GyoBQN/cSqOJCFfnJqxtKHb
345-wNa2F78SXYsiWkRb5EzoyCeon+0tygG6gLBouVY8ouCerExkH9qzRLLzFInxmCm2
346-ill7c8Xmml4H2BxJE33dz/Qh7PM3eF2A2VriioLDj4+HOiWq/1BjdW6/Xiwx5iP2
347-nC6Cex+lBt6HkP9WIiJbGxVeamF5jxNWWvLoUkrjFhpukjb5BPR9zFt7mAty9J/T
348-iQt26yylP4ucmL9KB6lv4ISW4Ri8mhMcYh6nF3tIYWZMCSQKqkyvymhKdLMZa20A
349-IME2oxnfZcmsfMpM6BYsN4XDfGBeYctqqt2AFRNLkI4wFkFFdPTMcTi1q0iRH2Xk
350------END CERTIFICATE-----
351diff --git a/ext/openssl/tests/sni_server_cs.pem b/ext/openssl/tests/sni_server_cs.pem
352deleted file mode 100644
353index 9f5a201b26d..00000000000
354--- a/ext/openssl/tests/sni_server_cs.pem
355+++ /dev/null
356@@ -1,57 +0,0 @@
357------BEGIN RSA PRIVATE KEY-----
358-MIIEpQIBAAKCAQEAvy5NhzktzEdsHTbGB6vqYANms5rn1zXFmTJrGlWCwoIsNmTf
359-ahvZkrC1cCXTZ7fbPB8XQbpAtz2ZSU7OcwBW9B8okYUPo9zi/ptwcrgsQsN0hrcD
360-8MBRUccevwime5fLvg8E9RJ/68y9y3BnRcVWYO2sAK9juTfidNjETU3Bb05oXv8D
361-SD/6onXQu4uXDgsQ3cRXeld9UB0xazmQXyyiIqXc/cpTAnaEVYzn28aj7NlUbzNq
362-511UXMXY44x9EcXWpPVZ7heNcJNzY5DCNzmtXKrt9yiMpWQcPXEzsESVxAMqib9u
363-TFOlvVX17LIPxBG656PjTD9J1h6kBbMCUxzs7wIDAQABAoIBAQC85lBeY0X4ST3v
364-I7bJz7kWQ2YP4uhfAdeLhoDDFWjNLffniwYhfwEc6xNri0R2f/jUT9gX7qORKwEx
365-qPdeNCC2t67LElGg1FlJv2Z9Q7MgCKYzkdQH5s6y4e9kTHTLO/JpiceZKz1QTQ3f
366-XOH9032E6nIAf0wmr6xHTgOwajrN8VI5BuPEMVmEwIw3AtYeqVuPCNKyGR4HUVkC
367-2bAydnGngbRJRnNzmKcWJancxpHDGBSFqPyuXMFC7Jgo3ZmyCbGp99vuXVk/sW9x
368-5aj94M9nRE0guk05ivH2/JZao2uLYkIgjFWlhNxKdWgWRk8DEuN4djC8mKS9YH1q
369-crYRToMhAoGBAOspUTtKP54mpZmyhxuDqj02JaJRzNTskPHsiF1UhtXuw7uT+ryV
370-ekUFLNXoFmn9mbx1WVaUvGH4qjilvQOxz7u++lz0ApqJEfyM3jc/cC40Y5zcuGSu
371-Etbg+SyDoytlgMCIydJyrS7NNALSo5p5oG6XY2f8yd/DCAmo8LzypaHRAoGBANAf
372-R1SlBMc/bOsi6GrJxcBVSCFMiKYiO5woL5aUKa9yM+UQuQ/6xbQ7Q+sOlt0FH3xo
373-AJ2L60qTdjyXVtjOdtXs5ZC4l+C6AfnCx6yLr+fNc4SOYXEfqS4LZylgwKd9KyVB
374-asspIW9Idbgebmi6vPyt9LDkIp0h1VuFGjkvQJK/AoGBAI4pbS0dprXyARyYW6sb
375-fpgAmuG099IkrT9DUfCx/81myTclr2fAKal+BmvOIXaz0/OlMXvw8K19iVIzh7+r
376-B70lJ+93p/dKM/BsLI5TsHqOO0YB/QsIXOVAHgJ2FfdPJnW+e9vYba+kZ/Po6PSi
377-4ITaykJ8BIJcQgis89QWEGFxAoGBAJhQO+jzuDKF9ZWEf6ofrw0anOZZ16wWY5/e
378-PS2rk3JmVxpuibHrKqPDt+ogTELHDAsFJmYmz3VNxHuFmrajK49Wh4/JuMVr/CQo
379-6+8YcA1qa/94IFIlBLDBAafjujsZvOjQHnM+z8xcsGKmStF00Pjv6qNG4xoyd646
380-FD4DmfOLAoGAWXehpopZKXE9gRAni881ucK6WqxPPBoofbozi09D0MmfarIVaSkv
381-jNVVHBfLWd7IEXTjiipPBeUqq6Jc3pscN1Vp4rrl8jTmVTdazEv0LuzpdUFqmNo2
382-M+xw17uz9D9Q32/aW1Lar0PdIaL/wGEDEyzEBFwrGppcENLilPz8gzU=
383------END RSA PRIVATE KEY-----
384------BEGIN CERTIFICATE-----
385-MIIFIjCCAwqgAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwVTELMAkGA1UEBhMCR0Ix
386-EDAOBgNVBAgMB0VuZ2xhbmQxEDAOBgNVBAoMB1BIUC5uZXQxEDAOBgNVBAsMB29w
387-ZW5zc2wxEDAOBgNVBAMMB3BocC5uZXQwHhcNMTgwMTE0MTgzNjEyWhcNMjYwNDAy
388-MTgzNjEyWjBGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRW5nbGFuZDEQMA4GA1UE
389-CgwHUEhQLm5ldDETMBEGA1UEAwwKY3MucGhwLm5ldDCCASIwDQYJKoZIhvcNAQEB
390-BQADggEPADCCAQoCggEBAL8uTYc5LcxHbB02xger6mADZrOa59c1xZkyaxpVgsKC
391-LDZk32ob2ZKwtXAl02e32zwfF0G6QLc9mUlOznMAVvQfKJGFD6Pc4v6bcHK4LELD
392-dIa3A/DAUVHHHr8IpnuXy74PBPUSf+vMvctwZ0XFVmDtrACvY7k34nTYxE1NwW9O
393-aF7/A0g/+qJ10LuLlw4LEN3EV3pXfVAdMWs5kF8soiKl3P3KUwJ2hFWM59vGo+zZ
394-VG8zauddVFzF2OOMfRHF1qT1We4XjXCTc2OQwjc5rVyq7fcojKVkHD1xM7BElcQD
395-Kom/bkxTpb1V9eyyD8QRuuej40w/SdYepAWzAlMc7O8CAwEAAaOCAQkwggEFMAkG
396-A1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMGCWCGSAGG+EIBDQQmFiRPcGVu
397-U1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFHPfd8dK
398-Lz1R0Ck4WV1B9AWXd5DSMGwGA1UdIwRlMGOAFOPK44Eacedv7HbR2Igcbew+4kUa
399-oUekRTBDMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRW5nbGFuZDEQMA4GA1UECgwH
400-UEhQLm5ldDEQMA4GA1UEAwwHcGhwLm5ldIICEAAwDgYDVR0PAQH/BAQDAgWgMBMG
401-A1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUAA4ICAQB6WSIHEyDXLZxH
402-hZjqSNQOA7Wc9Z2FCAiD29xYkGTL8WuPVGGP1mu4B92ytj+PMWwqSReDa7eTGLE7
403-O7ozw9l+c+gNmHFNikSsGjlV2E8CToQOFMny+jAQYMSXf8UbTp9xDfgG02t/71hv
404-SLWqdeHMLcR0xi0nBQH0vDOkwUbuWYqFa3jejHieGhykHM6CkIk6lqnyOEO+ooIF
405-ZsLprrg1ss/mXCPI6niP0hze55ERKdxI7Rk8sZ4pVkf2SUWqZrUS0aJ+Ymmwi6Xd
406-2V7izq5N30PkJS8MtqII4FAjRBIkwPh0sy8PmW/DzkYU+lYQnDfYLKDFKcj8xJK/
407-o8oZUBsQltrSj0KlM9QuqxCTCBCy1nXZ9WHOhq+jdLiTc1Oi60uEHcUMrLK8aYc4
408-HqIvZS6C2iwMI0d1OP3VxmAbMQ9yqRi+FbLYavJ3H40jrU9SYqdxa0BrTaz8MJNE
409-6AEwgQDPChczSghvHME+Fs4mtGCY3TesbNZKVahQRjaFIhMZIZ4RP4CRc0bJOBG+
410-8Me4+KHNsD2ki5b03wAN6C1P2QrMzI+gH9fXLZYp761ciDAsX6YIzrhHHYLxYpJH
411-BkQKKs8dCQWE5IzgVrdlvC3Z1/l9om66wHqqx7nKnPfYs/Sfnwe9MpCD6xJrXiTm
412-WS7NM6fbQpO9APNr7o0ZOjbbWFzlNw==
413------END CERTIFICATE-----
414diff --git a/ext/openssl/tests/sni_server_cs_cert.pem b/ext/openssl/tests/sni_server_cs_cert.pem
415deleted file mode 100644
416index b77c7b83e2a..00000000000
417--- a/ext/openssl/tests/sni_server_cs_cert.pem
418+++ /dev/null
419@@ -1,30 +0,0 @@
420------BEGIN CERTIFICATE-----
421-MIIFIjCCAwqgAwIBAgICEAIwDQYJKoZIhvcNAQELBQAwVTELMAkGA1UEBhMCR0Ix
422-EDAOBgNVBAgMB0VuZ2xhbmQxEDAOBgNVBAoMB1BIUC5uZXQxEDAOBgNVBAsMB29w
423-ZW5zc2wxEDAOBgNVBAMMB3BocC5uZXQwHhcNMTgwMTE0MTgzNjEyWhcNMjYwNDAy
424-MTgzNjEyWjBGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRW5nbGFuZDEQMA4GA1UE
425-CgwHUEhQLm5ldDETMBEGA1UEAwwKY3MucGhwLm5ldDCCASIwDQYJKoZIhvcNAQEB
426-BQADggEPADCCAQoCggEBAL8uTYc5LcxHbB02xger6mADZrOa59c1xZkyaxpVgsKC
427-LDZk32ob2ZKwtXAl02e32zwfF0G6QLc9mUlOznMAVvQfKJGFD6Pc4v6bcHK4LELD
428-dIa3A/DAUVHHHr8IpnuXy74PBPUSf+vMvctwZ0XFVmDtrACvY7k34nTYxE1NwW9O
429-aF7/A0g/+qJ10LuLlw4LEN3EV3pXfVAdMWs5kF8soiKl3P3KUwJ2hFWM59vGo+zZ
430-VG8zauddVFzF2OOMfRHF1qT1We4XjXCTc2OQwjc5rVyq7fcojKVkHD1xM7BElcQD
431-Kom/bkxTpb1V9eyyD8QRuuej40w/SdYepAWzAlMc7O8CAwEAAaOCAQkwggEFMAkG
432-A1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMGCWCGSAGG+EIBDQQmFiRPcGVu
433-U1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFHPfd8dK
434-Lz1R0Ck4WV1B9AWXd5DSMGwGA1UdIwRlMGOAFOPK44Eacedv7HbR2Igcbew+4kUa
435-oUekRTBDMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRW5nbGFuZDEQMA4GA1UECgwH
436-UEhQLm5ldDEQMA4GA1UEAwwHcGhwLm5ldIICEAAwDgYDVR0PAQH/BAQDAgWgMBMG
437-A1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUAA4ICAQB6WSIHEyDXLZxH
438-hZjqSNQOA7Wc9Z2FCAiD29xYkGTL8WuPVGGP1mu4B92ytj+PMWwqSReDa7eTGLE7
439-O7ozw9l+c+gNmHFNikSsGjlV2E8CToQOFMny+jAQYMSXf8UbTp9xDfgG02t/71hv
440-SLWqdeHMLcR0xi0nBQH0vDOkwUbuWYqFa3jejHieGhykHM6CkIk6lqnyOEO+ooIF
441-ZsLprrg1ss/mXCPI6niP0hze55ERKdxI7Rk8sZ4pVkf2SUWqZrUS0aJ+Ymmwi6Xd
442-2V7izq5N30PkJS8MtqII4FAjRBIkwPh0sy8PmW/DzkYU+lYQnDfYLKDFKcj8xJK/
443-o8oZUBsQltrSj0KlM9QuqxCTCBCy1nXZ9WHOhq+jdLiTc1Oi60uEHcUMrLK8aYc4
444-HqIvZS6C2iwMI0d1OP3VxmAbMQ9yqRi+FbLYavJ3H40jrU9SYqdxa0BrTaz8MJNE
445-6AEwgQDPChczSghvHME+Fs4mtGCY3TesbNZKVahQRjaFIhMZIZ4RP4CRc0bJOBG+
446-8Me4+KHNsD2ki5b03wAN6C1P2QrMzI+gH9fXLZYp761ciDAsX6YIzrhHHYLxYpJH
447-BkQKKs8dCQWE5IzgVrdlvC3Z1/l9om66wHqqx7nKnPfYs/Sfnwe9MpCD6xJrXiTm
448-WS7NM6fbQpO9APNr7o0ZOjbbWFzlNw==
449------END CERTIFICATE-----
450diff --git a/ext/openssl/tests/sni_server_cs_key.pem b/ext/openssl/tests/sni_server_cs_key.pem
451deleted file mode 100644
452index bf1e9f25193..00000000000
453--- a/ext/openssl/tests/sni_server_cs_key.pem
454+++ /dev/null
455@@ -1,27 +0,0 @@
456------BEGIN RSA PRIVATE KEY-----
457-MIIEpQIBAAKCAQEAvy5NhzktzEdsHTbGB6vqYANms5rn1zXFmTJrGlWCwoIsNmTf
458-ahvZkrC1cCXTZ7fbPB8XQbpAtz2ZSU7OcwBW9B8okYUPo9zi/ptwcrgsQsN0hrcD
459-8MBRUccevwime5fLvg8E9RJ/68y9y3BnRcVWYO2sAK9juTfidNjETU3Bb05oXv8D
460-SD/6onXQu4uXDgsQ3cRXeld9UB0xazmQXyyiIqXc/cpTAnaEVYzn28aj7NlUbzNq
461-511UXMXY44x9EcXWpPVZ7heNcJNzY5DCNzmtXKrt9yiMpWQcPXEzsESVxAMqib9u
462-TFOlvVX17LIPxBG656PjTD9J1h6kBbMCUxzs7wIDAQABAoIBAQC85lBeY0X4ST3v
463-I7bJz7kWQ2YP4uhfAdeLhoDDFWjNLffniwYhfwEc6xNri0R2f/jUT9gX7qORKwEx
464-qPdeNCC2t67LElGg1FlJv2Z9Q7MgCKYzkdQH5s6y4e9kTHTLO/JpiceZKz1QTQ3f
465-XOH9032E6nIAf0wmr6xHTgOwajrN8VI5BuPEMVmEwIw3AtYeqVuPCNKyGR4HUVkC
466-2bAydnGngbRJRnNzmKcWJancxpHDGBSFqPyuXMFC7Jgo3ZmyCbGp99vuXVk/sW9x
467-5aj94M9nRE0guk05ivH2/JZao2uLYkIgjFWlhNxKdWgWRk8DEuN4djC8mKS9YH1q
468-crYRToMhAoGBAOspUTtKP54mpZmyhxuDqj02JaJRzNTskPHsiF1UhtXuw7uT+ryV
469-ekUFLNXoFmn9mbx1WVaUvGH4qjilvQOxz7u++lz0ApqJEfyM3jc/cC40Y5zcuGSu
470-Etbg+SyDoytlgMCIydJyrS7NNALSo5p5oG6XY2f8yd/DCAmo8LzypaHRAoGBANAf
471-R1SlBMc/bOsi6GrJxcBVSCFMiKYiO5woL5aUKa9yM+UQuQ/6xbQ7Q+sOlt0FH3xo
472-AJ2L60qTdjyXVtjOdtXs5ZC4l+C6AfnCx6yLr+fNc4SOYXEfqS4LZylgwKd9KyVB
473-asspIW9Idbgebmi6vPyt9LDkIp0h1VuFGjkvQJK/AoGBAI4pbS0dprXyARyYW6sb
474-fpgAmuG099IkrT9DUfCx/81myTclr2fAKal+BmvOIXaz0/OlMXvw8K19iVIzh7+r
475-B70lJ+93p/dKM/BsLI5TsHqOO0YB/QsIXOVAHgJ2FfdPJnW+e9vYba+kZ/Po6PSi
476-4ITaykJ8BIJcQgis89QWEGFxAoGBAJhQO+jzuDKF9ZWEf6ofrw0anOZZ16wWY5/e
477-PS2rk3JmVxpuibHrKqPDt+ogTELHDAsFJmYmz3VNxHuFmrajK49Wh4/JuMVr/CQo
478-6+8YcA1qa/94IFIlBLDBAafjujsZvOjQHnM+z8xcsGKmStF00Pjv6qNG4xoyd646
479-FD4DmfOLAoGAWXehpopZKXE9gRAni881ucK6WqxPPBoofbozi09D0MmfarIVaSkv
480-jNVVHBfLWd7IEXTjiipPBeUqq6Jc3pscN1Vp4rrl8jTmVTdazEv0LuzpdUFqmNo2
481-M+xw17uz9D9Q32/aW1Lar0PdIaL/wGEDEyzEBFwrGppcENLilPz8gzU=
482------END RSA PRIVATE KEY-----
483diff --git a/ext/openssl/tests/sni_server_key_cert.phpt b/ext/openssl/tests/sni_server_key_cert.phpt
484index 49ed6aa5328..878f97c1e35 100644
485--- a/ext/openssl/tests/sni_server_key_cert.phpt
486+++ b/ext/openssl/tests/sni_server_key_cert.phpt
487@@ -8,21 +8,36 @@
488 ?>
489 --FILE--
490 <?php
491+$caFile = __DIR__ . DIRECTORY_SEPARATOR . 'sni_server_ca_kc.pem.tmp';
492+$csCertFile = __DIR__ . DIRECTORY_SEPARATOR . 'sni_server_cs_cert.pem.tmp';
493+$csKeyFile = __DIR__ . DIRECTORY_SEPARATOR . 'sni_server_cs_key.pem.tmp';
494+$ukCertFile = __DIR__ . DIRECTORY_SEPARATOR . 'sni_server_uk_cert.pem.tmp';
495+$ukKeyFile = __DIR__ . DIRECTORY_SEPARATOR . 'sni_server_uk_key.pem.tmp';
496+$usCertFile = __DIR__ . DIRECTORY_SEPARATOR . 'sni_server_us_cert.pem.tmp';
497+$usKeyFile = __DIR__ . DIRECTORY_SEPARATOR . 'sni_server_us_key.pem.tmp';
498+
499+include 'CertificateGenerator.inc';
500+$certificateGenerator = new CertificateGenerator();
501+$certificateGenerator->saveCaCert($caFile);
502+$certificateGenerator->saveNewCertAndKey('cs.php.net', $csCertFile, $csKeyFile);
503+$certificateGenerator->saveNewCertAndKey('uk.php.net', $ukCertFile, $ukKeyFile);
504+$certificateGenerator->saveNewCertAndKey('us.php.net', $usCertFile, $usKeyFile);
505+
506 $serverCode = <<<'CODE'
507 $flags = STREAM_SERVER_BIND|STREAM_SERVER_LISTEN;
508 $ctx = stream_context_create(['ssl' => [
509 'SNI_server_certs' => [
510 "cs.php.net" => [
511- 'local_cert' => __DIR__ . "/sni_server_cs_cert.pem",
512- 'local_pk' => __DIR__ . "/sni_server_cs_key.pem"
513+ 'local_cert' => '%s',
514+ 'local_pk' => '%s',
515 ],
516 "uk.php.net" => [
517- 'local_cert' => __DIR__ . "/sni_server_uk_cert.pem",
518- 'local_pk' => __DIR__ . "/sni_server_uk_key.pem"
519+ 'local_cert' => '%s',
520+ 'local_pk' => '%s',
521 ],
522 "us.php.net" => [
523- 'local_cert' => __DIR__ . "/sni_server_us_cert.pem",
524- 'local_pk' => __DIR__ . "/sni_server_us_key.pem"
525+ 'local_cert' => '%s',
526+ 'local_pk' => '%s',
527 ],
528 ]
529 ]]);
530@@ -34,11 +49,16 @@
531 @stream_socket_accept($server, 3);
532 }
533 CODE;
534+$serverCode = sprintf($serverCode,
535+ $csCertFile, $csKeyFile,
536+ $ukCertFile, $ukKeyFile,
537+ $usCertFile, $usKeyFile
538+);
539
540 $clientCode = <<<'CODE'
541 $flags = STREAM_CLIENT_CONNECT;
542 $ctxArr = [
543- 'cafile' => __DIR__ . '/sni_server_ca.pem',
544+ 'cafile' => '%s',
545 'capture_peer_cert' => true
546 ];
547
548@@ -60,10 +80,21 @@
549 $cert = stream_context_get_options($ctx)['ssl']['peer_certificate'];
550 var_dump(openssl_x509_parse($cert)['subject']['CN']);
551 CODE;
552+$clientCode = sprintf($clientCode, $caFile);
553
554 include 'ServerClientTestCase.inc';
555 ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
556 ?>
557+--CLEAN--
558+<?php
559+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'sni_server_ca_kc.pem.tmp');
560+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'sni_server_cs_cert.pem.tmp');
561+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'sni_server_cs_key.pem.tmp');
562+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'sni_server_uk_cert.pem.tmp');
563+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'sni_server_uk_key.pem.tmp');
564+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'sni_server_us_cert.pem.tmp');
565+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'sni_server_us_key.pem.tmp');
566+?>
567 --EXPECTF--
568 string(%d) "cs.php.net"
569 string(%d) "uk.php.net"
570diff --git a/ext/openssl/tests/sni_server_uk_cert.pem b/ext/openssl/tests/sni_server_uk_cert.pem
571deleted file mode 100644
572index 57663855e59..00000000000
573--- a/ext/openssl/tests/sni_server_uk_cert.pem
574+++ /dev/null
575@@ -1,30 +0,0 @@
576------BEGIN CERTIFICATE-----
577-MIIFIjCCAwqgAwIBAgICEAMwDQYJKoZIhvcNAQELBQAwVTELMAkGA1UEBhMCR0Ix
578-EDAOBgNVBAgMB0VuZ2xhbmQxEDAOBgNVBAoMB1BIUC5uZXQxEDAOBgNVBAsMB29w
579-ZW5zc2wxEDAOBgNVBAMMB3BocC5uZXQwHhcNMTgwMTE0MTgzNjMyWhcNMjYwNDAy
580-MTgzNjMyWjBGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRW5nbGFuZDEQMA4GA1UE
581-CgwHUEhQLm5ldDETMBEGA1UEAwwKdWsucGhwLm5ldDCCASIwDQYJKoZIhvcNAQEB
582-BQADggEPADCCAQoCggEBAKzKRXj0jVBzRwolFn7Ej0MR2kE6Q36IBCEiDLhquSYR
583-Lh1spR0XudSVmRot/Wvz2PawApX4P6qj57scBQ6KL4ULKvSndCZ7F1tdQjEqogYp
584-n/L8oBhP1dgyDonsewG/PucxC+3Aqzcl3w5Pg7qE+zad42khP7t9TjFAMxc+PxC+
585-2as5ZCDJBwfxksCyCQfFWx7eB7p39vGy63k3Izv+UKTZEhbSdT721kb91oXkecpE
586-EFhihfVYMGMEtC7u2JLSxdkRhWYSMqVCvI2syYsLAUUNH2kgqQF00j2Iddhg3oMA
587-IiqhpC/n2slHVhp56WE1TsrGC/JgqIvQK9AT4LRxFb8CAwEAAaOCAQkwggEFMAkG
588-A1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMGCWCGSAGG+EIBDQQmFiRPcGVu
589-U1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFJK58uJe
590-Lv8WDOR8TTLUcSxO1zCyMGwGA1UdIwRlMGOAFOPK44Eacedv7HbR2Igcbew+4kUa
591-oUekRTBDMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRW5nbGFuZDEQMA4GA1UECgwH
592-UEhQLm5ldDEQMA4GA1UEAwwHcGhwLm5ldIICEAAwDgYDVR0PAQH/BAQDAgWgMBMG
593-A1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUAA4ICAQDHayU795hFnQNj
594-fuYV21sEmkSjgtp6X4rV9JfoCp8U2gieL4mizoCPx9Q8HYaAf98hPYTofGUaCSd+
595-Xlzd8lhLt9GCU+BsCxGtJocrjOQDhyhkioN8iirQRTtJpRVC6a4RCBGpenOD7Z7C
596-Z32uGXohzFuigP/J8/SXBdHrlpNSa03iEkkisPR46mbGj06lFVOFHJDNKA3CnQwM
597-3VfqvZt0ksZi/gAOol8dtrAd3k5JBfJ2BtqsPbycEGAhsGrTK/MeqiFcO8QZiXpN
598-qf0wZzOMFZJ4HqTiHs4TMMQaDK8c4qfR0l1OE224ijcB5NlqMjGAZabMfHgNZcl7
599-fYPX+POsOMaqubv98uoC0PCK8NCTyfB4V/el72EEoVfwKYOxm3eYXBEE2ZNyIci6
600-YKYhNa9e2k+cFueYMztV06HTGgkcHcSJATP+3ISTRx3tj1BPmc4O4WAMEMx1E0gg
601-PaVrBVAylGzt8kaMaOQMBImpsALSfutq6+KtQiu0OTGS3yVUGamV4AyRjuwF1/ZA
602-kZbjmNEGsf9d2rzS89ckds24QUx0zrfJ56p7lRvyVK/pML7iadv8dUH3fKDDDerD
603-oocLjOjNxFGN9Woz+kfidA8Siu0zsfQ6CLPlaQrVAVQH4iMuCZraqMc3TqAiUKRj
604-iHKp6FFrRZmY8W8HEKHv98uGofn+3g==
605------END CERTIFICATE-----
606diff --git a/ext/openssl/tests/sni_server_uk_key.pem b/ext/openssl/tests/sni_server_uk_key.pem
607deleted file mode 100644
608index 3baa6efd776..00000000000
609--- a/ext/openssl/tests/sni_server_uk_key.pem
610+++ /dev/null
611@@ -1,27 +0,0 @@
612------BEGIN RSA PRIVATE KEY-----
613-MIIEowIBAAKCAQEArMpFePSNUHNHCiUWfsSPQxHaQTpDfogEISIMuGq5JhEuHWyl
614-HRe51JWZGi39a/PY9rAClfg/qqPnuxwFDoovhQsq9Kd0JnsXW11CMSqiBimf8vyg
615-GE/V2DIOiex7Ab8+5zEL7cCrNyXfDk+DuoT7Np3jaSE/u31OMUAzFz4/EL7Zqzlk
616-IMkHB/GSwLIJB8VbHt4Hunf28bLreTcjO/5QpNkSFtJ1PvbWRv3WheR5ykQQWGKF
617-9VgwYwS0Lu7YktLF2RGFZhIypUK8jazJiwsBRQ0faSCpAXTSPYh12GDegwAiKqGk
618-L+fayUdWGnnpYTVOysYL8mCoi9Ar0BPgtHEVvwIDAQABAoIBAGpg7XyWMxpAno/k
619-XYEWSo0kRJa75CnWW5R6fhJbwjlpglajONQ8czAqGeRARDFeI0lc+3qRJ8FKv7Q2
620-f/Z/pNnoEj4liiDWz350X/gdIztgDRVv6rCNFj7QMps/eEuPDo8PZySs5bxCGJ2a
621-3qLKlE7/za4/xhkMAEPaHppEvFb15dpomqP2Fjqei9afp8tD+xJv9BGtkFIy9acw
622-94AWQi974kgW7ZzfEf8RqHM0ExKiESCc26knbcBu0tQ892YHggMccUMk/UrVgR5d
623-vuGOBurlYGLBstSDSKCCe6la4N/FX3FiC3WhVNescnuTZPXcX3zebh7roGjgrTdd
624-6UJYBIECgYEA09XYihdwW66G9Y09OatzlzBh1Rvzjv2Vl5NmWHHb6vh38H4PcOof
625-S1pT0JvRzpt8uEs4i+Eda5PyQyp4iGtD+DQ07Dxh2jiixsE3PRFRG2wg2QCgDHnS
626-6vgV1VOqA/A4on4nhxLZXxhX4YvHaJYlm1bZ+amG+j5XiI/NtHJm9k8CgYEA0NB9
627-bAoaZnc06+T8rMaO45boX5SvYsCZbtY3VRl75SrbMal0IKfnXHELVHuei12LmlMs
628-LuFgG8jGO3+ncxUqMytoGvrmk/cM9tCNbDKVHtFbqz0qt9lkDAwLsBougKnVsNDW
629-Aae/tz/wYXJct86unfLh0xtvkx5Iz1we4cS1fZECgYA8YR+vfK7R8xUUuIVTAsOX
630-vHqmO6lYgH87DRCG9S0x9FB7g/LyxEjXOY/aTg+nTDpobUhY1nmESE8tRdXFTI27
631-GWZcT3m0sZ/z9u6/wUfVAST7tWnpJHAx+TR/8bDsHnSGHF836O98Y3vpFeZosSNW
632-+5J1zxRiD5LzocmIPXOLkQKBgEgHApxXx898YwbTj8zRGMysay89DFpV8RboUWHL
633-To83/y/cMbBp+kZKwAu+MGwGMndjJSRunUY4NRik6c+qh0nrORfFX+++Efy4529g
634-60scEDC7Apc0J2x4Yze1cED1VD6PaqJbiKffKD2UwyKr6lOVSgwVtKDcm2Tbc9OQ
635-lMHhAoGBAIPwYVxzWM6I6pr8x2TucpBZZReLytz7uzybMNvbKCrwlETbNNXubnfp
636-nPuPKzpeRI0y26pIIAbijzFW0MXq+kIu3H7we8TaImsJ1AaQCTYeoLWBVcr6RISk
637-3d4i7iT35aWCuhPVve0FNIv/u3jrqX2H2C2MXMiLOsw1GFxPvpi4
638------END RSA PRIVATE KEY-----
639diff --git a/ext/openssl/tests/sni_server_us.pem b/ext/openssl/tests/sni_server_us.pem
640deleted file mode 100644
641index 170a8a96e75..00000000000
642--- a/ext/openssl/tests/sni_server_us.pem
643+++ /dev/null
644@@ -1,57 +0,0 @@
645------BEGIN RSA PRIVATE KEY-----
646-MIIEpQIBAAKCAQEA1QkC3tiNYDY+ZxMmPbagYUbMpzuXo9mVBvYh86bYZaeB7bts
647-QCBK+6VD4D2LjR3RszpzmOzhJXjm8j0t+GeRS3OMIM75/BKAnixXicRSIb8zdIPz
648-JP992vvMq8p46/XftAfBhAMOaCqcD85zpyX4PhfC9733nOyN4yqx58O4UhVTKih6
649-W9/ldp3uwSYAW+HyoINnHls/bFO8vv60K5VIhkxK30LHnC5PvByGfuHOgrscEThs
650-jW0ESqO0+9l88KhGdmLgzvbBlGxNziCMfn0LcFH6p2ITc3foD4LSzGEFtJ92OZi3
651-buCOfbFsN7vWHTsEi89fRcCnWGtMwLUx0TCluQIDAQABAoIBAQCnsUQ1Lrl6trhA
652-Yu6DPbLZX+XQ7jPbonaQ2Ea5iOhmfIjmHdaEU+cyV1EqvseO+Z4MO0KraiuAV79T
653-h50cIEpa3kW7vbFCHz5nQ/hUVdlg/yT93rASu5rSOctOnz64Xv8Ms948kDtS+9eF
654-Cbo4JMdX+VRbt4mmWP8HhqAsFACPexEoWxJcIxwFcI24GTGzySjemNjQzbmcVhzM
655-a4k6n8DolCL1cRS54C5Aaf5g4+IFDgyydcgZXp1lnX3MnqivSNkejnPnY55NcmrH
656-X3ZWPlAi9GHOJE33uy8bGWnip7Tn4iTt6tJvjz/yP82TGACDg1B8XsKrqsuQLsoU
657-cNBVGcQBAoGBAPteCgNmuNOpo4SRA1UVRw1WgnE8YtnNA6vYyVcTLSpqabq33UaD
658-03L9CQsbHtj88U+E8OH24Iqj3U9x7QJfH8DVmWuBrlwez80JsKGnLdViHydjKcAz
659-H2Cbv+SiWeaWXkFCkN4Jf7k3q0Ew4SG2LOq5PVUy/NB4bilbJD2ExKpZAoGBANj2
660-Hpwo35IQ4XfSSsGaCdn+8ajMcNUMMGZ6YkZqmVO4kogqobyrPL/2KE9ol/hlacw6
661-U/6Digox5/wqruYfqyM8lqGOq2/0Xf7c4XfiOTS9Na4JN3OGzlyqPvcn2zdqhYFY
662-iHPu2RqpA+LhCHW9Zs8C1Bp/KAEPdRP6OabqVaphAoGACLrHVj7nBFLL3vq6RuYq
663-RYhPl2cld7LrAbjRpTiBRQvVCCsCgERrv36SJdSXSanfJ4fSZcaRHb97HBs0w/RR
664-wfypC1bBm2lmhhRkEfkgWlzCADgtZwNff5dpHqOUw7FNLK8HIO7rhJ8uT2FHMEiH
665-Xs94FdFjfknwaXdE1u4ZdmECgYEAgxfbkQHFbO2UPqErGGXp0/WOsS6ucpyF1jXW
666-kbOxZ3vb1jjkNyrEbzzeSHTrdmRYk9UekWeLjfNvt9dWjKfP8V+XqJCbF+9wqCFw
667-fs6LQEmfWMQq5DwtDqKznwVPGOHdPzVuZZaJSemb9oeAZBwINccAv+3bDyD23hZQ
668-pYFsN6ECgYEA33QYDNG/spki4D8rlxyxZ+1MdB/efnrGBhO8FsJpG5+AtmYhWgD9
669-sl29+3aiRkmDznoy36z+hoeZePILEAKMcbHyXOymixOHPuaZJ95hbvq6sqd6WMAe
670-w5tHnxlfEuu11zatolk6WiAmTmG3sZpN5Tqloq0Ye4dvlhVKNV3Bn3E=
671------END RSA PRIVATE KEY-----
672------BEGIN CERTIFICATE-----
673-MIIFIjCCAwqgAwIBAgICEAQwDQYJKoZIhvcNAQELBQAwVTELMAkGA1UEBhMCR0Ix
674-EDAOBgNVBAgMB0VuZ2xhbmQxEDAOBgNVBAoMB1BIUC5uZXQxEDAOBgNVBAsMB29w
675-ZW5zc2wxEDAOBgNVBAMMB3BocC5uZXQwHhcNMTgwMTE0MTgzNjQ0WhcNMjYwNDAy
676-MTgzNjQ0WjBGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRW5nbGFuZDEQMA4GA1UE
677-CgwHUEhQLm5ldDETMBEGA1UEAwwKdXMucGhwLm5ldDCCASIwDQYJKoZIhvcNAQEB
678-BQADggEPADCCAQoCggEBANUJAt7YjWA2PmcTJj22oGFGzKc7l6PZlQb2IfOm2GWn
679-ge27bEAgSvulQ+A9i40d0bM6c5js4SV45vI9LfhnkUtzjCDO+fwSgJ4sV4nEUiG/
680-M3SD8yT/fdr7zKvKeOv137QHwYQDDmgqnA/Oc6cl+D4Xwve995zsjeMqsefDuFIV
681-Uyooelvf5Xad7sEmAFvh8qCDZx5bP2xTvL7+tCuVSIZMSt9Cx5wuT7wchn7hzoK7
682-HBE4bI1tBEqjtPvZfPCoRnZi4M72wZRsTc4gjH59C3BR+qdiE3N36A+C0sxhBbSf
683-djmYt27gjn2xbDe71h07BIvPX0XAp1hrTMC1MdEwpbkCAwEAAaOCAQkwggEFMAkG
684-A1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMGCWCGSAGG+EIBDQQmFiRPcGVu
685-U1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFOXnUeNs
686-grKQb+EvG36DXjjDDmsFMGwGA1UdIwRlMGOAFOPK44Eacedv7HbR2Igcbew+4kUa
687-oUekRTBDMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRW5nbGFuZDEQMA4GA1UECgwH
688-UEhQLm5ldDEQMA4GA1UEAwwHcGhwLm5ldIICEAAwDgYDVR0PAQH/BAQDAgWgMBMG
689-A1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUAA4ICAQBDLwuLbx75ACSU
690-5cF2L/D17JEnhlna62MgKNdpNLJSpaofK2Lk2BqsmnQf5JdkrXWMUN/DsmXZc9pq
691-25XmprfABUP9Cx18KPVqLQ43Z9o+R9xI1Ospt5mrpxGp6l2BHSs/4G69nuPFpcIJ
692-iabnLYdUk2Z+64lPe4EMBrZH+pj4xn3JA59BACJYNYn0nLaw45DIAyzyLJ0vVSwc
693-0JtjsztXQov4UqdWXxLRFfe2nEGoK8ZkTJ8ELcCYu6sNSBjw9Ech78uXN1BQOBTK
694-lhAgN3FKqOp3hqf0umqf35gDvmWwLB/eptUYZ96gBYT0tbPA0P+YsW+iZmamxXma
695-Odgg8iRcPxKl9bVPt57NLaDy/RQhOxTGXQs1Q2jp7UhzqoZDClwVSDxd6DEppAFA
696-OZAY+Rsrm7VoCwVQ/1KbcJHmJ/79tArvaWJk3KHLGMpdZq4KwrC3hM8/QxYtyX/6
697-cfnXvShBYCdfTGgNlj3t/mNAgp1ZB3s9ClGqRBR/P0Db+ryv5DuxYM6nzEB3Od0y
698-kT5tHbXDQY+1HCExjOMi7Al0cmC2r3+oxDA4UjGv+npgcfeoxQhXmm/SQRiPdKlb
699-vT0D594sLoB23jqA9bMehpxEyI7eGjfFUmXwMeu0tJhipvpJI3ogJoM+SCFTyLkc
700-12cPiz/sR/ALhvhUJXTeUH8wxPjzbA==
701------END CERTIFICATE-----
702diff --git a/ext/openssl/tests/sni_server_us_cert.pem b/ext/openssl/tests/sni_server_us_cert.pem
703deleted file mode 100644
704index 4452e3c6cfb..00000000000
705--- a/ext/openssl/tests/sni_server_us_cert.pem
706+++ /dev/null
707@@ -1,30 +0,0 @@
708------BEGIN CERTIFICATE-----
709-MIIFIjCCAwqgAwIBAgICEAQwDQYJKoZIhvcNAQELBQAwVTELMAkGA1UEBhMCR0Ix
710-EDAOBgNVBAgMB0VuZ2xhbmQxEDAOBgNVBAoMB1BIUC5uZXQxEDAOBgNVBAsMB29w
711-ZW5zc2wxEDAOBgNVBAMMB3BocC5uZXQwHhcNMTgwMTE0MTgzNjQ0WhcNMjYwNDAy
712-MTgzNjQ0WjBGMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRW5nbGFuZDEQMA4GA1UE
713-CgwHUEhQLm5ldDETMBEGA1UEAwwKdXMucGhwLm5ldDCCASIwDQYJKoZIhvcNAQEB
714-BQADggEPADCCAQoCggEBANUJAt7YjWA2PmcTJj22oGFGzKc7l6PZlQb2IfOm2GWn
715-ge27bEAgSvulQ+A9i40d0bM6c5js4SV45vI9LfhnkUtzjCDO+fwSgJ4sV4nEUiG/
716-M3SD8yT/fdr7zKvKeOv137QHwYQDDmgqnA/Oc6cl+D4Xwve995zsjeMqsefDuFIV
717-Uyooelvf5Xad7sEmAFvh8qCDZx5bP2xTvL7+tCuVSIZMSt9Cx5wuT7wchn7hzoK7
718-HBE4bI1tBEqjtPvZfPCoRnZi4M72wZRsTc4gjH59C3BR+qdiE3N36A+C0sxhBbSf
719-djmYt27gjn2xbDe71h07BIvPX0XAp1hrTMC1MdEwpbkCAwEAAaOCAQkwggEFMAkG
720-A1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMGCWCGSAGG+EIBDQQmFiRPcGVu
721-U1NMIEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFOXnUeNs
722-grKQb+EvG36DXjjDDmsFMGwGA1UdIwRlMGOAFOPK44Eacedv7HbR2Igcbew+4kUa
723-oUekRTBDMQswCQYDVQQGEwJHQjEQMA4GA1UECAwHRW5nbGFuZDEQMA4GA1UECgwH
724-UEhQLm5ldDEQMA4GA1UEAwwHcGhwLm5ldIICEAAwDgYDVR0PAQH/BAQDAgWgMBMG
725-A1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBCwUAA4ICAQBDLwuLbx75ACSU
726-5cF2L/D17JEnhlna62MgKNdpNLJSpaofK2Lk2BqsmnQf5JdkrXWMUN/DsmXZc9pq
727-25XmprfABUP9Cx18KPVqLQ43Z9o+R9xI1Ospt5mrpxGp6l2BHSs/4G69nuPFpcIJ
728-iabnLYdUk2Z+64lPe4EMBrZH+pj4xn3JA59BACJYNYn0nLaw45DIAyzyLJ0vVSwc
729-0JtjsztXQov4UqdWXxLRFfe2nEGoK8ZkTJ8ELcCYu6sNSBjw9Ech78uXN1BQOBTK
730-lhAgN3FKqOp3hqf0umqf35gDvmWwLB/eptUYZ96gBYT0tbPA0P+YsW+iZmamxXma
731-Odgg8iRcPxKl9bVPt57NLaDy/RQhOxTGXQs1Q2jp7UhzqoZDClwVSDxd6DEppAFA
732-OZAY+Rsrm7VoCwVQ/1KbcJHmJ/79tArvaWJk3KHLGMpdZq4KwrC3hM8/QxYtyX/6
733-cfnXvShBYCdfTGgNlj3t/mNAgp1ZB3s9ClGqRBR/P0Db+ryv5DuxYM6nzEB3Od0y
734-kT5tHbXDQY+1HCExjOMi7Al0cmC2r3+oxDA4UjGv+npgcfeoxQhXmm/SQRiPdKlb
735-vT0D594sLoB23jqA9bMehpxEyI7eGjfFUmXwMeu0tJhipvpJI3ogJoM+SCFTyLkc
736-12cPiz/sR/ALhvhUJXTeUH8wxPjzbA==
737------END CERTIFICATE-----
738diff --git a/ext/openssl/tests/sni_server_us_key.pem b/ext/openssl/tests/sni_server_us_key.pem
739deleted file mode 100644
740index 8b0d73d7d63..00000000000
741--- a/ext/openssl/tests/sni_server_us_key.pem
742+++ /dev/null
743@@ -1,27 +0,0 @@
744------BEGIN RSA PRIVATE KEY-----
745-MIIEpQIBAAKCAQEA1QkC3tiNYDY+ZxMmPbagYUbMpzuXo9mVBvYh86bYZaeB7bts
746-QCBK+6VD4D2LjR3RszpzmOzhJXjm8j0t+GeRS3OMIM75/BKAnixXicRSIb8zdIPz
747-JP992vvMq8p46/XftAfBhAMOaCqcD85zpyX4PhfC9733nOyN4yqx58O4UhVTKih6
748-W9/ldp3uwSYAW+HyoINnHls/bFO8vv60K5VIhkxK30LHnC5PvByGfuHOgrscEThs
749-jW0ESqO0+9l88KhGdmLgzvbBlGxNziCMfn0LcFH6p2ITc3foD4LSzGEFtJ92OZi3
750-buCOfbFsN7vWHTsEi89fRcCnWGtMwLUx0TCluQIDAQABAoIBAQCnsUQ1Lrl6trhA
751-Yu6DPbLZX+XQ7jPbonaQ2Ea5iOhmfIjmHdaEU+cyV1EqvseO+Z4MO0KraiuAV79T
752-h50cIEpa3kW7vbFCHz5nQ/hUVdlg/yT93rASu5rSOctOnz64Xv8Ms948kDtS+9eF
753-Cbo4JMdX+VRbt4mmWP8HhqAsFACPexEoWxJcIxwFcI24GTGzySjemNjQzbmcVhzM
754-a4k6n8DolCL1cRS54C5Aaf5g4+IFDgyydcgZXp1lnX3MnqivSNkejnPnY55NcmrH
755-X3ZWPlAi9GHOJE33uy8bGWnip7Tn4iTt6tJvjz/yP82TGACDg1B8XsKrqsuQLsoU
756-cNBVGcQBAoGBAPteCgNmuNOpo4SRA1UVRw1WgnE8YtnNA6vYyVcTLSpqabq33UaD
757-03L9CQsbHtj88U+E8OH24Iqj3U9x7QJfH8DVmWuBrlwez80JsKGnLdViHydjKcAz
758-H2Cbv+SiWeaWXkFCkN4Jf7k3q0Ew4SG2LOq5PVUy/NB4bilbJD2ExKpZAoGBANj2
759-Hpwo35IQ4XfSSsGaCdn+8ajMcNUMMGZ6YkZqmVO4kogqobyrPL/2KE9ol/hlacw6
760-U/6Digox5/wqruYfqyM8lqGOq2/0Xf7c4XfiOTS9Na4JN3OGzlyqPvcn2zdqhYFY
761-iHPu2RqpA+LhCHW9Zs8C1Bp/KAEPdRP6OabqVaphAoGACLrHVj7nBFLL3vq6RuYq
762-RYhPl2cld7LrAbjRpTiBRQvVCCsCgERrv36SJdSXSanfJ4fSZcaRHb97HBs0w/RR
763-wfypC1bBm2lmhhRkEfkgWlzCADgtZwNff5dpHqOUw7FNLK8HIO7rhJ8uT2FHMEiH
764-Xs94FdFjfknwaXdE1u4ZdmECgYEAgxfbkQHFbO2UPqErGGXp0/WOsS6ucpyF1jXW
765-kbOxZ3vb1jjkNyrEbzzeSHTrdmRYk9UekWeLjfNvt9dWjKfP8V+XqJCbF+9wqCFw
766-fs6LQEmfWMQq5DwtDqKznwVPGOHdPzVuZZaJSemb9oeAZBwINccAv+3bDyD23hZQ
767-pYFsN6ECgYEA33QYDNG/spki4D8rlxyxZ+1MdB/efnrGBhO8FsJpG5+AtmYhWgD9
768-sl29+3aiRkmDznoy36z+hoeZePILEAKMcbHyXOymixOHPuaZJ95hbvq6sqd6WMAe
769-w5tHnxlfEuu11zatolk6WiAmTmG3sZpN5Tqloq0Ye4dvlhVKNV3Bn3E=
770------END RSA PRIVATE KEY-----
771--
7722.52.0
773
diff --git a/gnu/packages/patches/php-02-fix-sni-tests.patch b/gnu/packages/patches/php-02-fix-sni-tests.patch
deleted file mode 100644
index a03f6624d60..00000000000
--- a/gnu/packages/patches/php-02-fix-sni-tests.patch
+++ /dev/null
@@ -1,211 +0,0 @@
1From 178a30b9e700d32a8aac4f49864838829bedd389 Mon Sep 17 00:00:00 2001
2From: Jakub Zelenka <bukka@php.net>
3Date: Sat, 4 Apr 2026 00:28:29 +0200
4Subject: [PATCH] Fix SNI tests for bugs #80770 and #74796
5
6Upstream-Status: Merged in master.
7---
8 ext/openssl/tests/bug74796.phpt | 29 ++++++++++++++++++++------
9 ext/openssl/tests/bug80770.phpt | 31 ++++++++++++++++------------
10 php-8.3.30.manifest | 36 +++++++++++++++++++++++++++++++++
11 3 files changed, 77 insertions(+), 19 deletions(-)
12 create mode 100644 php-8.3.30.manifest
13
14diff --git a/ext/openssl/tests/bug74796.phpt b/ext/openssl/tests/bug74796.phpt
15index b3f594d5e60..8ec5590c064 100644
16--- a/ext/openssl/tests/bug74796.phpt
17+++ b/ext/openssl/tests/bug74796.phpt
18@@ -12,13 +12,24 @@
19 --FILE--
20 <?php
21
22+include 'CertificateGenerator.inc';
23+$certificateGenerator = new CertificateGenerator();
24+$caFile = __DIR__ . '/bug74796_ca.pem.tmp';
25+$csFile = __DIR__ . '/bug74796_cs.pem.tmp';
26+$ukFile = __DIR__ . '/bug74796_uk.pem.tmp';
27+$usFile = __DIR__ . '/bug74796_us.pem.tmp';
28+$certificateGenerator->saveCaCert($caFile);
29+$certificateGenerator->saveNewCertAsFileWithKey('cs.php.net', $csFile);
30+$certificateGenerator->saveNewCertAsFileWithKey('uk.php.net', $ukFile);
31+$certificateGenerator->saveNewCertAsFileWithKey('us.php.net', $usFile);
32+
33 $serverCode = <<<'CODE'
34 $serverFlags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
35 $ctx = stream_context_create(['ssl' => [
36 'SNI_server_certs' => [
37- "cs.php.net" => __DIR__ . "/sni_server_cs.pem",
38- "uk.php.net" => __DIR__ . "/sni_server_uk.pem",
39- "us.php.net" => __DIR__ . "/sni_server_us.pem"
40+ "cs.php.net" => '%s',
41+ "uk.php.net" => '%s',
42+ "us.php.net" => '%s',
43 ]
44 ]]);
45
46@@ -33,6 +44,7 @@
47
48 phpt_wait();
49 CODE;
50+$serverCode = sprintf($serverCode, $csFile, $ukFile, $usFile);
51
52 $proxyCode = <<<'CODE'
53 function parse_sni_from_client_hello($data) {
54@@ -134,7 +146,7 @@ function parse_sni_from_client_hello($data) {
55 $clientCode = <<<'CODE'
56 $clientCtx = stream_context_create([
57 'ssl' => [
58- 'cafile' => __DIR__ . '/sni_server_ca.pem',
59+ 'cafile' => '%s',
60 'verify_peer' => true,
61 'verify_peer_name' => true,
62 ],
63@@ -155,16 +167,21 @@ function parse_sni_from_client_hello($data) {
64
65 phpt_notify('server');
66 CODE;
67+$clientCode = sprintf($clientCode, $caFile);
68
69 include 'ServerClientTestCase.inc';
70 ServerClientTestCase::getInstance()->run($clientCode, [
71- 'server' => $serverCode,
72- 'proxy' => $proxyCode,
73+ 'server' => $serverCode,
74+ 'proxy' => $proxyCode,
75 ]);
76 ?>
77 --CLEAN--
78 <?php
79 @unlink(__DIR__ . "/bug74796_proxy_sni.log");
80+@unlink(__DIR__ . '/bug74796_ca.pem.tmp');
81+@unlink(__DIR__ . '/bug74796_cs.pem.tmp');
82+@unlink(__DIR__ . '/bug74796_uk.pem.tmp');
83+@unlink(__DIR__ . '/bug74796_us.pem.tmp');
84 ?>
85 --EXPECT--
86 string(19) "Hello from server 0"
87diff --git a/ext/openssl/tests/bug80770.phpt b/ext/openssl/tests/bug80770.phpt
88index 9100aaa5aa1..21860dc78eb 100644
89--- a/ext/openssl/tests/bug80770.phpt
90+++ b/ext/openssl/tests/bug80770.phpt
91@@ -11,14 +11,25 @@
92 <?php
93 $clientCertFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug80770_client.pem.tmp';
94 $caCertFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug80770_ca.pem.tmp';
95+$csFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug80770_cs.pem.tmp';
96+$ukFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug80770_uk.pem.tmp';
97+$usFile = __DIR__ . DIRECTORY_SEPARATOR . 'bug80770_us.pem.tmp';
98+
99+include 'CertificateGenerator.inc';
100+$certificateGenerator = new CertificateGenerator();
101+$certificateGenerator->saveCaCert($caCertFile);
102+$certificateGenerator->saveNewCertAsFileWithKey('cs.php.net', $csFile);
103+$certificateGenerator->saveNewCertAsFileWithKey('uk.php.net', $ukFile);
104+$certificateGenerator->saveNewCertAsFileWithKey('us.php.net', $usFile);
105+$certificateGenerator->saveNewCertAsFileWithKey('Bug80770 Test Client', $clientCertFile);
106
107 $serverCode = <<<'CODE'
108 $flags = STREAM_SERVER_BIND|STREAM_SERVER_LISTEN;
109 $ctx = stream_context_create(['ssl' => [
110 'SNI_server_certs' => [
111- "cs.php.net" => __DIR__ . "/sni_server_cs.pem",
112- "uk.php.net" => __DIR__ . "/sni_server_uk.pem",
113- "us.php.net" => __DIR__ . "/sni_server_us.pem"
114+ "cs.php.net" => '%s',
115+ "uk.php.net" => '%s',
116+ "us.php.net" => '%s',
117 ],
118 'verify_peer' => true,
119 'cafile' => '%s',
120@@ -28,7 +39,6 @@
121 ]]);
122 $server = stream_socket_server('tcp://127.0.0.1:0', $errno, $errstr, $flags, $ctx);
123 phpt_notify_server_start($server);
124-
125 $client = stream_socket_accept($server, 30);
126 if ($client) {
127 $success = stream_socket_enable_crypto($client, true, STREAM_CRYPTO_METHOD_TLS_SERVER);
128@@ -43,7 +53,7 @@
129 phpt_notify(message: "ACCEPT_FAILED");
130 }
131 CODE;
132-$serverCode = sprintf($serverCode, $caCertFile);
133+$serverCode = sprintf($serverCode, $csFile, $ukFile, $usFile, $caCertFile);
134
135 $clientCode = <<<'CODE'
136 $flags = STREAM_CLIENT_CONNECT;
137@@ -58,19 +68,11 @@
138 if ($client) {
139 stream_socket_enable_crypto($client, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
140 }
141-
142 $result = phpt_wait();
143 echo trim($result);
144 CODE;
145 $clientCode = sprintf($clientCode, $clientCertFile);
146
147-include 'CertificateGenerator.inc';
148-
149-// Generate CA and client certificate signed by that CA
150-$certificateGenerator = new CertificateGenerator();
151-$certificateGenerator->saveCaCert($caCertFile);
152-$certificateGenerator->saveNewCertAsFileWithKey('Bug80770 Test Client', $clientCertFile);
153-
154 include 'ServerClientTestCase.inc';
155 ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
156 ?>
157@@ -78,6 +80,9 @@
158 <?php
159 @unlink(__DIR__ . DIRECTORY_SEPARATOR . 'bug80770_client.pem.tmp');
160 @unlink(__DIR__ . DIRECTORY_SEPARATOR . 'bug80770_ca.pem.tmp');
161+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'bug80770_cs.pem.tmp');
162+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'bug80770_uk.pem.tmp');
163+@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'bug80770_us.pem.tmp');
164 ?>
165 --EXPECTF--
166 CLIENT_CERT_CAPTURED
167diff --git a/php-8.3.30.manifest b/php-8.3.30.manifest
168new file mode 100644
169index 00000000000..ef6ffe8aa80
170--- /dev/null
171+++ b/php-8.3.30.manifest
172@@ -0,0 +1,36 @@
173+php-8.3.30.tar.bz2
174+SHA256 hash: 800b7b6ed50b73c8ee7844ee5f2f7cc612faa7875a0aa7c4529e8ed5866a5030
175+PGP signature:
176+-----BEGIN PGP SIGNATURE-----
177+
178+iHUEABYKAB0WIQTCjZN1dWA+tKu3JYYcB3ncXAqd5AUCaWbJsAAKCRAcB3ncXAqd
179+5FioAPwK1gjqwBbGr5g3y1TikqxgKVWMHCtir1n46yGN2hYvtwD/flOR9EqRejNU
180+wW4RMkmRwXGsXY28V1DH+NKnDKTEWQ8=
181+=jkCu
182+-----END PGP SIGNATURE-----
183+
184+
185+php-8.3.30.tar.gz
186+SHA256 hash: e587dc95fb7f62730299fa7b36b6e4f91e6708aaefa2fff68a0098d320c16386
187+PGP signature:
188+-----BEGIN PGP SIGNATURE-----
189+
190+iHUEABYKAB0WIQTCjZN1dWA+tKu3JYYcB3ncXAqd5AUCaWbJsAAKCRAcB3ncXAqd
191+5F4eAP44IkpP3p3FRq3S9pDm9Y6bJnrpzxafqfXlZ949ECmUIgEAxFb+m5Tz7gcb
192+DSU+taIv2W6EQeijjaXPvAE2t1dGswo=
193+=kn1U
194+-----END PGP SIGNATURE-----
195+
196+
197+php-8.3.30.tar.xz
198+SHA256 hash: 67f084d36852daab6809561a7c8023d130ca07fc6af8fb040684dd1414934d48
199+PGP signature:
200+-----BEGIN PGP SIGNATURE-----
201+
202+iHUEABYKAB0WIQTCjZN1dWA+tKu3JYYcB3ncXAqd5AUCaWbJsQAKCRAcB3ncXAqd
203+5NYpAP9Is0pCLlEuLiSRdAbgWPDee0jPA5JGoriGOFNkdMk67AD/WTzYCx7+dEVG
204+8Gb54wK005bk9nRGYQqwvZb+r1gqaQU=
205+=vSr4
206+-----END PGP SIGNATURE-----
207+
208+
209--
2102.52.0
211
diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm
index e4faf8814ff..cda9e201bb5 100644
--- a/gnu/packages/php.scm
+++ b/gnu/packages/php.scm
@@ -68,18 +68,16 @@
68(define-public php-8.5 68(define-public php-8.5
69 (package 69 (package
70 (name "php") 70 (name "php")
71 (version "8.5.5") 71 (version "8.5.9")
72 (home-page "https://www.php.net/") 72 (home-page "https://www.php.net/")
73 (source 73 (source
74 (origin 74 (origin
75 (method url-fetch) 75 (method url-fetch)
76 (uri (string-append home-page "distributions/" "php-" version ".tar.xz")) 76 (uri (string-append home-page "distributions/" "php-" version ".tar.xz"))
77 (sha256 77 (sha256
78 (base32 "1wh27552f6vd20f1yy4l0jlvknfq0kn5hapmiq55f05xyj1c7glm")) 78 (base32 "1x08nwwwqr73488n4vqgmv9abxnnhki3bnrcb4fspl5w4mgqbdqd"))
79 (patches 79 (patches
80 (search-patches "php-01-fix-expired-certificate.patch" 80 (search-patches "php-03-fix-ftp-certificate.patch"))
81 "php-02-fix-sni-tests.patch"
82 "php-03-fix-ftp-certificate.patch"))
83 (modules '((guix build utils))) 81 (modules '((guix build utils)))
84 (snippet 82 (snippet
85 '(with-directory-excursion "ext" 83 '(with-directory-excursion "ext"