Skip to content

Commit 3f6b127

Browse files
committed
Fix bug# 69215 (Crypto servers should send client CA list)
1 parent 49bd45a commit 3f6b127

File tree

6 files changed

+142
-5
lines changed

6 files changed

+142
-5
lines changed

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
in stream_select() contexts) (Chris Wright)
1919
. Fixed bug #69197 (openssl_pkcs7_sign handles default value incorrectly)
2020
(Daniel Lowrey)
21+
. Fixed bug #69215 (Crypto servers should send client CA list)
22+
(Daniel Lowrey)
2123

2224
19 Mar 2015, PHP 5.6.7
2325

ext/openssl/tests/bug69215-ca.pem

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIICfjCCAeegAwIBAgIJAMO7Amv3ZHJBMA0GCSqGSIb3DQEBCwUAMFgxCzAJBgNV
3+
BAYTAlhYMRUwEwYDVQQHDAxEZWZhdWx0IENpdHkxHDAaBgNVBAoME0RlZmF1bHQg
4+
Q29tcGFueSBMdGQxFDASBgNVBAMMC3BocCB0ZXN0IGNhMB4XDTE1MDMwMzE3NTQz
5+
OVoXDTI1MDIyODE3NTQzOVowWDELMAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1
6+
bHQgQ2l0eTEcMBoGA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDEUMBIGA1UEAwwL
7+
cGhwIHRlc3QgY2EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKac+r8AzEEk
8+
Cdnue7nx3gxmsXTYzwnywjjGJSknoWCdNEE+LqtT8RU0J+V76w4ehWRnhLVtu//v
9+
3InsrpcniGfTcov60NelHQOfn5XCCV5zqVi628WddwwdVw4AI58K3YrNk450VCBu
10+
dMy6m2Tm+dQwgVbtR+nIwzfm47CMWW2DAgMBAAGjUDBOMB0GA1UdDgQWBBTtMxRr
11+
plep4RW3PjhosYsIdIoMojAfBgNVHSMEGDAWgBTtMxRrplep4RW3PjhosYsIdIoM
12+
ojAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4GBADMF2pL8jCF6PFPhMuFN
13+
zxoLSuy6uLAkjkujo5e33kSUW5MI4jT/aoL2hnBPA4uJPC/TZXoBHKBpnPES2GkJ
14+
r7tOR51Jsk7HRTdvOMkcdD9Fe+M+Q5rOMUlCtyX/SRhc1uFnC2//Y/rx4Tc8djGl
15+
RqrH/Oi38u1083krmNRQNw/Z
16+
-----END CERTIFICATE-----

ext/openssl/tests/bug69215-client.pem

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
Proc-Type: 4,ENCRYPTED
3+
DEK-Info: DES-EDE3-CBC,CE3DEB59F7DF7AF4
4+
5+
9REujZuwDkwoN949Gw77c3aJiQvwoPiUXJ+cDirn4ii56OsHBSCWfCe4Mqn976GK
6+
9IAPwHJ5yRewPpFvb+xRqtMtnm8S7HIfVtZqW4FkG+g/paEg6rwqVpW78Jco/gww
7+
6XFGrmU1bwKWrB05YV1BWnbB4L7Q+/U0ZcNvdNISOBW//2HuHeKVWe1DKoaRtoVz
8+
v4BFQxr7F3A9tm3vz9Jn2JreVrihdWQVlVTVOsfiQk/yPVA7twxiT2Hfimp/gFSX
9+
l28rA+jB7xd6IhpA/EXAYnCbxSp9kSXYtba26dO3rQHlgRv1a38AwvCD/3igQzF/
10+
XjetX2a75ITi5c7bUT4ZpVX8ZPU8oVBqSo6MXisFWBT0Svx+KhWyyn2V0z66APdR
11+
X1V6dZiAcqN7giRg3Yj/lMDo0nV4Ph+Ce7p3Mv/p4qU0mxf7O8sPhp7DloHQFEF0
12+
HyooNp26YT4V47NDxwIlkoj9YZ5nkO/svQ1qxiTKWNUdfWw5r3lFiAw5xTyDDiBs
13+
Sz776DaFo3Ss3JSUr5RLe4rEEc02iVqYB9OPXoUaUwS+//1KKgzF3xq/yxsJM5dR
14+
ljphraCViZzJPw4z69Lmao9CPRfDxKChVOSLkKgmFIOeronLdTypieanc3/o002c
15+
2ecb/x9f7G2XAn0iwcfylMkSZHirxqaos8LodsPxg8GdNJT89C66n+EJerrFwi6i
16+
qT0EvNfkbxYd3zj82+j1weNFLsQuB0O1UJBWEdyj74gIX+4HkZpSYLQ2O8MTz3yE
17+
52JcRRyl9ECdNJw15jkDQIusUreYMHb7YW+u+3+ci21H94Iay5XSYw==
18+
-----END RSA PRIVATE KEY-----
19+
-----BEGIN CERTIFICATE-----
20+
MIICKDCCAZECCQD2yFUU99QJdzANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJY
21+
WDEVMBMGA1UEBwwMRGVmYXVsdCBDaXR5MRwwGgYDVQQKDBNEZWZhdWx0IENvbXBh
22+
bnkgTHRkMRQwEgYDVQQDDAtwaHAgdGVzdCBjYTAeFw0xNTAzMTAyMzM0MDNaFw0y
23+
NTAzMDcyMzM0MDNaMFkxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJTQzEVMBMGA1UE
24+
BwwMTXlydGxlIEJlYWNoMQwwCgYDVQQLDANQSFAxGDAWBgNVBAMMD2J1ZzY5MjE1
25+
LWNsaWVudDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyLTbIGryqx0wGDD+
26+
xdrJsrcwXFyTYpCOHUaxl1wt/6j6u7yW5m4TJFEDUtIGnqBGYiPE9iynkLkOwUF/
27+
IpheONJENIjXkdSJPUEy/Ggz9WOa0qO6dQZU44NpGO7LFW97HglBIsbhioOsdcf/
28+
INAgidoMJNizkuTBNRGW7iKp0lsCAwEAATANBgkqhkiG9w0BAQsFAAOBgQBKkZLQ
29+
aU12/cPvW5e9AXArnE9jxMhnzuCKy81eHj30CC/nHpId9i5YZytHcZEZyEOWE6DQ
30+
IsqmsP5ZheXq26mUtHOcEdEgcqcXTRotKXFwIxTZxP5jkCRn0xGbeHh7H9pg6TP0
31+
QekWTkWCh5qcf3NXvJtk4TCfLC6FSjehHkq9yQ==
32+
-----END CERTIFICATE-----

ext/openssl/tests/bug69215-server.pem

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
Proc-Type: 4,ENCRYPTED
3+
DEK-Info: DES-EDE3-CBC,4C7155D678EDABFA
4+
5+
NdOGB8UpC5xrnCFIOzxV6s4y4PZlxgX8s+iL/JeGVmS7a8pDSTzbb6wjauYy3n/2
6+
KCywHsFdAjifi8SGHJOJBVep3GS7dWw979vWdiKjQEAlJpoouv6P58Xpn4jDf1uX
7+
ZrpmSTXI0iH7HYE2pzrkxPbg0Cz5GV2d2VlL7U5d4+UxXh8fSBndgHligmoc8mCU
8+
1AG7ZmvPhMDTewhR333qKBYi9TBZuw75Crpy5CjPO30vBMfZpseOvtEnmI0JYGwe
9+
75Q3e6sgY0o9b7Q42+g9v+FpGBTHhmldwYD7k1TtOC/PT4eO68E3mDawR2v+X9r8
10+
4jL22d3tB4Q4qAfBwbR37umTaQHLIxtjzc2OjXb/Ju35LW9d0hEuaAQK3oY8yeEi
11+
gctYWrCN4K+cxZQwq1+ulpkHXULGs9QxXT9KJYfV1+HWkauWUSycFhA74jWW0mL5
12+
InlGaFf6oiRrP4lgRVXD3rtTLCwkCD2JcvTbF+re9+vCpui7zPW2peGwcE/W7TiK
13+
wHFJhQQyYGcAWsal7ekXshTLoz4jeaPgak7dg50ZjjwcWr0bJuJ3RRaocMhYZ6Bd
14+
DiF30nCijVSJfrLhugN2RJmSysT4WNXn5qaDGEOhVgkXZscZ3ClFGsMnxAz9sqbJ
15+
J+ZMbqxkwSIf/+dPfhnjOWm3HPpP3T9wioYZT7KuI98pfGnHMZmX5CaJ6d/uBO5G
16+
8jMvQLWOx+1WoDfWDkn7SfNDyTg4/dEo5IJFXv2S9zSPynCnQcBkYUevIfJ7vDo/
17+
7pXCkcY+C1zssW8R1J+WNbHI1syzVbvSg6hlgyEPXuDbErCRqiFm1g==
18+
-----END RSA PRIVATE KEY-----
19+
-----BEGIN CERTIFICATE-----
20+
MIICKDCCAZECCQD2yFUU99QJeDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJY
21+
WDEVMBMGA1UEBwwMRGVmYXVsdCBDaXR5MRwwGgYDVQQKDBNEZWZhdWx0IENvbXBh
22+
bnkgTHRkMRQwEgYDVQQDDAtwaHAgdGVzdCBjYTAeFw0xNTAzMTAyMzM1MjFaFw0y
23+
NTAzMDcyMzM1MjFaMFkxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJTQzEVMBMGA1UE
24+
BwwMTXlydGxlIEJlYWNoMQwwCgYDVQQLDANQSFAxGDAWBgNVBAMMD2J1ZzY5MjE1
25+
LXNlcnZlcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAup0kaIwQufxQWXmE
26+
QWbd7yxMQ69UHRhbb2stAo7qxmYMeH3bWCaR/oAPOswjtkXZQgyj0slLAWJDXKDg
27+
zCnEKsU2yWLnvQy/h1rq/kBIybMoLKMIkRZQtrGcApKJtyrq8OtTz6odKQ7k9hym
28+
DtPF+2lcVhSAd+qjngF3txrVKjsCAwEAATANBgkqhkiG9w0BAQsFAAOBgQCfXuL4
29+
TODLV54uKKVdVGwr8U3EQ3JdYOqN3Hr9kpmxe6StIcLxQ1e+mSDgKcixzw6CXN3P
30+
f++8NugAt4Ja2SDqqw1gzrX+9u6KZpnMKpEDIK0Z3Ss51ZwqilAXmFVybNTyYeVo
31+
HweM1IY/zrBpSTQv/aKs1R2Pyb0Heindnp0PUQ==
32+
-----END CERTIFICATE-----

ext/openssl/tests/bug69215.phpt

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
--TEST--
2+
Bug #69215: Crypto servers should send client CA list
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded("openssl")) die("skip openssl not loaded");
6+
if (!function_exists("proc_open")) die("skip no proc_open");
7+
--FILE--
8+
<?php
9+
$serverCode = <<<'CODE'
10+
$serverUri = "ssl://127.0.0.1:64321";
11+
$serverFlags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
12+
$serverCtx = stream_context_create(['ssl' => [
13+
'local_cert' => __DIR__ . '/bug69215-server.pem',
14+
'passphrase' => 'elephpant',
15+
'cafile' => __DIR__ . '/bug69215-ca.pem',
16+
'verify_peer' => true,
17+
'verify_peer_name' => true,
18+
'peer_name' => 'bug69215-client',
19+
]]);
20+
21+
$server = stream_socket_server($serverUri, $errno, $errstr, $serverFlags, $serverCtx);
22+
phpt_notify();
23+
24+
stream_socket_accept($server, 30);
25+
CODE;
26+
27+
$clientCode = <<<'CODE'
28+
$serverUri = "ssl://127.0.0.1:64321";
29+
$clientFlags = STREAM_CLIENT_CONNECT;
30+
$clientCtx = stream_context_create(['ssl' => [
31+
'local_cert' => __DIR__ . '/bug69215-client.pem',
32+
'passphrase' => 'elephpant',
33+
'cafile' => __DIR__ . '/bug69215-ca.pem',
34+
'verify_peer' => true,
35+
'verify_peer_name' => true,
36+
'peer_name' => 'bug69215-server',
37+
]]);
38+
39+
phpt_wait();
40+
41+
var_dump(stream_socket_client($serverUri, $errno, $errstr, 1, $clientFlags, $clientCtx));
42+
CODE;
43+
44+
include 'ServerClientTestCase.inc';
45+
ServerClientTestCase::getInstance()->run($clientCode, $serverCode);
46+
--EXPECTF--
47+
resource(%d) of type (stream)
48+

ext/openssl/xp_ssl.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -817,16 +817,26 @@ static int enable_peer_verification(SSL_CTX *ctx, php_stream *stream TSRMLS_DC)
817817
zval **val = NULL;
818818
char *cafile = NULL;
819819
char *capath = NULL;
820+
php_openssl_netstream_data_t *sslsock = (php_openssl_netstream_data_t*)stream->abstract;
820821

821822
GET_VER_OPT_STRING("cafile", cafile);
822823
GET_VER_OPT_STRING("capath", capath);
823824

824-
if (!cafile) {
825+
if (cafile == NULL) {
825826
cafile = zend_ini_string("openssl.cafile", sizeof("openssl.cafile"), 0);
826827
cafile = strlen(cafile) ? cafile : NULL;
828+
} else if (!sslsock->is_client) {
829+
/* Servers need to load and assign CA names from the cafile */
830+
STACK_OF(X509_NAME) *cert_names = SSL_load_client_CA_file(cafile);
831+
if (cert_names != NULL) {
832+
SSL_CTX_set_client_CA_list(ctx, cert_names);
833+
} else {
834+
php_error(E_WARNING, "SSL: failed loading CA names from cafile");
835+
return FAILURE;
836+
}
827837
}
828838

829-
if (!capath) {
839+
if (capath == NULL) {
830840
capath = zend_ini_string("openssl.capath", sizeof("openssl.capath"), 0);
831841
capath = strlen(capath) ? capath : NULL;
832842
}
@@ -842,9 +852,6 @@ static int enable_peer_verification(SSL_CTX *ctx, php_stream *stream TSRMLS_DC)
842852
SSL_CTX_set_cert_verify_callback(ctx, win_cert_verify_callback, (void *)stream);
843853
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
844854
#else
845-
php_openssl_netstream_data_t *sslsock;
846-
sslsock = (php_openssl_netstream_data_t*)stream->abstract;
847-
848855
if (sslsock->is_client && !SSL_CTX_set_default_verify_paths(ctx)) {
849856
php_error_docref(NULL TSRMLS_CC, E_WARNING,
850857
"Unable to set default verify locations and no CA settings specified");

0 commit comments

Comments
 (0)