Edit report at http://bugs.php.net/bug.php?id=54992&edit=1

 ID:                 54992
 User updated by:    laird_ngrps at dodo dot com dot au
 Reported by:        laird_ngrps at dodo dot com dot au
 Summary:            Stream not closed and error not returned when SSL
                     CN_match fails
 Status:             Open
 Type:               Bug
 Package:            Streams related
 Operating System:   Linux
 PHP Version:        5.3.6
 Block user comment: N
 Private report:     N

 New Comment:

I should probably add that when I provide the correct CN, this is the output 
that 

I get both pre-patching and post-patching:



SENT:: A test message

RCVD:: Hello from the server.<EOF>


Previous Comments:
------------------------------------------------------------------------
[2011-06-04 14:10:04] laird_ngrps at dodo dot com dot au

Description:
------------
When the CN_match stream context option is specified for an SSL stream opened 

with stream_socket_client(), if the CN supplied does not match, then the stream 

connection does not fail and does not return an error as it should.



After the supplied patch was applied, the stream socket returned an error as 

expected; the output then was (I haven't delved deep enough into the code to 

work out how to set a meaningful error message and error number with the patch; 

all values in square brackets are my edits for privacy; line 17 is that of the 

call to stream_socket_client()):



Warning: stream_socket_client(): Peer certificate CN=`TempCert' did not match 

expected CN=`TempCert.bad' in [filepath] on line 17



Warning: stream_socket_client(): Failed to enable crypto in [filepath] on line 

17



Warning: stream_socket_client(): unable to connect to ssl://[ipaddress]:[port] 

(Unknown error) in [filepath] on line 17

SSL socket connection error: "" (0)



--------



I've checked and this bug seems to also apply to the current versions of the 
PHP 

source in the subversion repositories.

Test script:
---------------
        /* First set $server, $port and $cafile */



        $context = stream_context_create(array('ssl' => array(

                'verify_peer'       => true,

                'cafile'            => $cafile,

                'CN_match'          => 'TempCert.bad',

        )));



        $sock = stream_socket_client("ssl://$server:$port", $errno, $errstr, 5, 
STREAM_CLIENT_CONNECT, $context);

        if ($sock === false) die("SSL socket connection error: \"$errstr\" 
($errno)\n");

        $msg = "A test message";

        if (fputs($sock, "$msg<EOF>\n") === false) echo "fputs returned 
false\n";

        else {

                echo "SENT:: $msg\n";

                $line = fgets($sock);

                echo "RCVD:: $line\n";

        }

        fclose($sock);



Expected result:
----------------
SSL socket connection error: "[some error message indicating that the CN failed 

to match]" ([some error number])

Actual result:
--------------
Warning: stream_socket_client(): Peer certificate CN=`TempCert' did not match 

expected CN=`TempCert.bad' in [filepath] on line 17

SENT:: A test message

RCVD:: [a bunch of random characters, different each time]


------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=54992&edit=1

Reply via email to