Bug #69524 [Com]: openssl-pkey-get-public() kill mysql(i) connection with ssl
Edit report at https://bugs.php.net/bug.php?id=69524&edit=1
ID: 69524
Comment by: samm at net-art dot cz
Reported by: js at xim dot de
Summary: openssl-pkey-get-public() kill mysql(i) connection
with ssl
Status: Open
Type: Bug
Package: MySQLi related
Operating System: Linux Debian
PHP Version: 5.6.8
Block user comment: N
Private report: N
New Comment:
I can confirm the issue with pdo-mysql:
This is a test script:
<?php
$pdo = new PDO(
'mysql:host=dbhost.com;dbname=db',
'dbuser',
'dbpass',
array(
/* PDO::MYSQL_ATTR_SSL_KEY =>'/path/to/client-key.pem',
PDO::MYSQL_ATTR_SSL_CERT=>'/path/to/client-cert.pem', */
PDO::MYSQL_ATTR_SSL_CA =>'/etc/rds-combined-ca-bundle.pem'
));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query="SELECT 1+1";
$query = $pdo->prepare($query);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
var_dump($row);
$openssl_pkey_get_public = openssl_pkey_get_public('-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6ZkX4HXSiL5YPdaHeAIZ
IsE+jOTdQQzl2R8geQuOB2ODtlSUzMSWEH1o4AQtdTdoQljdiUfoUQQUaMAVj4K9
QsPV8I+by3nhR2kkgjkobspnxfTbMnVkhNlAAeBOrVDO1OF32r/SWrHH1W+WnjRp
g+60bAFvO06OEfVjOTlc4jJAuQq1BCuHalU88yb6wED6A9iP9FLQrQDtKUhTNXRe
v/iBpCKTDGzakao6hJspNrw8sS2FsdzQ8TZdlJ4jTaT8DjMGYsu29Mrov0ybUk0D
zG1Uk+os/0Bz1BnNcCIqRNuNQo5zjOOTE3DkK1Q9wse1TjEi/cCn74H9OWpSlYY3
CQIDAQAB
-----END PUBLIC KEY-----');
$query="SELECT 2+2";
$query = $pdo->prepare($query);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
var_dump($row);
?>
This is a return:
# php sqltest.php
array(1) {
["1+1"]=>
string(1) "2"
}
PHP Warning: PDOStatement::execute(): SSL operation failed with code 1. OpenSSL Error messages:
error:0906D06C:PEM routines:PEM_read_bio:no start line in /home/ubuntu/sqltest.php on line 31
PHP Warning: PDOStatement::execute(): MySQL server has gone away in /home/ubuntu/sqltest.php on
line 31
PHP Warning: PDOStatement::execute(): Error reading result set's header in
/home/ubuntu/sqltest.php on line 31
PHP Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone
away in /home/ubuntu/sqltest.php:31
Stack trace:
#0 /home/ubuntu/sqltest.php(31): PDOStatement->execute()
#1 {main}
thrown in /home/ubuntu/sqltest.php on line 31
As you could see - second query failed, right after openssl_pkey_get_public call.
root@ip-172-32-2-133:~# php -v
PHP 7.0.7-4+deb.sury.org~wily+1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
Previous Comments:
------------------------------------------------------------------------
[2016-05-02 16:36:33] roy at chameleon dot ad
I can confirm a similar issue when using openssl_public_encrypt
If the mysql_conn has been opened before (and is using ssl) calling failing $mysqli->query() will
fail with error
PHP Warning: mysqli::query(): SSL operation failed with code 1. OpenSSL Error
messages:\nerror:0906D06C:PEM routines:PEM_read_bio:no start line in XXXX on line 35\nPHP message:
PHP Warning: mysqli::query(): MySQL server has gone away in XXXX on line 35\nPHP message: PHP
Warning: mysqli::query(): Error reading result set's header in XXXX on line 35\n',
referer: http://chameleon.ad/signup.php
I am using php 5.6.18
------------------------------------------------------------------------
[2015-04-24 14:06:27] js at xim dot de
Description:
------------
mysqli => Uptime: 453701 Threads: 2 Questions: 34649 Slow queries: 0 Opens: 299 Flush
tables: 1 Open tables: 151 Queries per second avg: 0.076
mysqli => Resource id #10
Warning: mysqli::stat(): SSL operation failed with code 1. OpenSSL Error messages:
error:0906D06C:PEM routines:PEM_read_bio:no start line in ~/test.php on line 17
Warning: mysqli::stat(): MySQL server has gone away in ~/test.php on line 17
mysqli =>
---------------------
php version 5.6.6 works but not after :(
Test script:
---------------
$mysqli = mysqli_init();
if(!$mysqli) { exit(1);}
if(!$mysqli->real_connect('host', 'user', '*********',
'information_schema', 3306, NULL, MYSQLI_CLIENT_SSL)) { exit(2); }
echo 'mysqli => ' . $mysqli->stat() . "\n";
$openssl_pkey_get_public = openssl_pkey_get_public('-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6ZkX4HXSiL5YPdaHeAIZ
IsE+jOTdQQzl2R8geQuOB2ODtlSUzMSWEH1o4AQtdTdoQljdiUfoUQQUaMAVj4K9
QsPV8I+by3nhR2kkgjkobspnxfTbMnVkhNlAAeBOrVDO1OF32r/SWrHH1W+WnjRp
g+60bAFvO06OEfVjOTlc4jJAuQq1BCuHalU88yb6wED6A9iP9FLQrQDtKUhTNXRe
v/iBpCKTDGzakao6hJspNrw8sS2FsdzQ8TZdlJ4jTaT8DjMGYsu29Mrov0ybUk0D
zG1Uk+os/0Bz1BnNcCIqRNuNQo5zjOOTE3DkK1Q9wse1TjEi/cCn74H9OWpSlYY3
CQIDAQAB
-----END PUBLIC KEY-----');
echo 'mysqli => ' . print_r($openssl_pkey_get_public,true) . "\n";
echo 'mysqli => ' . $mysqli->stat() . "\n";
$mysqli->close();
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=69524&edit=1
Thread (9 messages)