php stream_socket_server 用ssl的问题

yebaomiao 2012-11-20 05:22:10
Server.php

<?php
$pem_passphrase = 'mykey';
$pemfile = './server.pem';
$ca = './server.crt';

$context = stream_context_create ();

// local_cert must be in PEM format
stream_context_set_option ( $context, 'ssl', 'local_cert', $pemfile );
stream_context_set_option ( $context, 'ssl', 'cafile', $ca );
stream_context_set_option ( $context, 'ssl', 'capath', "./");
// Pass Phrase (password) of private key
stream_context_set_option ( $context, 'ssl', 'passphrase', $pem_passphrase );

stream_context_set_option ( $context, 'ssl', 'allow_self_signed', true );
stream_context_set_option ( $context, 'ssl', 'verify_peer', true );

// Create the server socket
$server = stream_socket_server ( 'ssl://192.168.1.91:1100', $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $context );

while ( true ) {
$buffer = '';
print "waiting...\n";
$client = stream_socket_accept ( $server );
if ($client) {
print "accepted " . stream_socket_get_name ( $client, true ) . "\n";
$buffer .= fread ( $client, 1024 );
print $buffer;
// Respond to client
fwrite ( $client, "Hello client! ");
fclose ( $client );
} else {
print "error.\n";
}
}

?>



client.php

<?php
$option = array (
"ssl" => array (
'local_cert' => "client.pem",
// 'cafile' => "client-cert.pem",
// 'capath' => "./",
'verify_peer' => true,
'allow_self_signed' => true,
'passphrase' => "mykey",
)
);

$host = '192.168.1.91';
$port = 1100;

$context = stream_context_create ( $option );
$fp = stream_socket_client ( 'ssl://' . $host . ':' . $port, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context );
if ($fp) {
$r = fwrite ( $fp, "hello server" );
echo fread ( $fp, 1024 );
fclose ( $fp );
} else {
echo "ERROR: $errno - $errstr<br />\n";
}

?>




服务器端报错:
[root@localhost www]# php -f Server.php
waiting...
PHP Warning: stream_socket_accept(): SSL operation failed with code 1. OpenSSL Error messages:
error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate in /www/epp/www/Server.php on line 53

Warning: stream_socket_accept(): SSL operation failed with code 1. OpenSSL Error messages:
error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate in /www/epp/www/Server.php on line 53
PHP Warning: stream_socket_accept(): Failed to enable crypto in /www/epp/www/Server.php on line 53

Warning: stream_socket_accept(): Failed to enable crypto in /www/epp/www/Server.php on line 53
PHP Warning: stream_socket_accept(): accept failed: Success in /www/epp/www/Server.php on line 53

Warning: stream_socket_accept(): accept failed: Success in /www/epp/www/Server.php on line 53
error.
waiting...

客户端报错:
Warning: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error
messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify faile
d in E:\www\client.php on line 15

Warning: stream_socket_client(): Failed to enable crypto in E:\www\client.php on line 15

Warning: stream_socket_client(): unable to connect to ssl://192.168.1.91:1100 (U
nknown error) in E:\www\client.php on line 15
ERROR: 0 - <br />


...全文
925 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunflw 2012-11-20
  • 打赏
  • 举报
回复
做个标记,坐等高手来解答。。这个东西用来干吗的?
mingfish2 2012-11-20
  • 打赏
  • 举报
回复
好深的学问,ssl没接触过

20,398

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧