ssl - how to make websocket secure connection in php socket -


i making chatroom using websockets, working fine when use unencrypted connection, after use certificate doesn't work anymore.

in javascript opening connection websocket server @ serverr.php this:

var wsuri = "ws://mydomain.com:9002/chat/serverr.php";  websocket1 = new websocket(wsuri); 

now know must use wss:// instead of ws:// using:

var wsuri = "wss://mydomain.com:9002/chat/serverr.php"; websocket1 = new websocket(wsuri); 

but following error:

websocket connection 'wss://mydomain.com:9002/chat/serverr.php' failed: error in connection establishment: net::err_ssl_protocol_error

but don't know how make wss:// connection. tried modify code following part:

set_time_limit(0);  require_once($_server['document_root']."../../../home/username/public_html/config/config.php");   $host = 'ssl://0.0.0.0'; //host $port = '9002'; //port $null = null; //null var  // generate certificate $privkey = openssl_pkey_new(); $cert    = openssl_csr_new($dn, $privkey); $cert    = openssl_csr_sign($cert, null, $privkey, 365);  // generate pem file # optionally change passphrase 'comet' whatever want, or leave empty no passphrase $pem_passphrase = 'comet'; $pem = array(); openssl_x509_export($cert, $pem[0]); openssl_pkey_export($privkey, $pem[1], $pem_passphrase); $pem = implode($pem);  // save pem file $pemfile = 'server.pem'; file_put_contents($pemfile, $pem);   //create tcp/ip sream socket $socket = socket_create(af_inet, sock_stream, sol_tcp); //reuseable port socket_set_option($socket, sol_socket, so_reuseaddr, 1); socket_set_option($socket, sol_socket, 'ssl', 'local_cert', $pemfile); socket_set_option($socket, sol_socket, 'ssl', 'passphrase', $pem_passphrase); socket_set_option($socket, sol_socket, 'ssl', 'allow_self_signed', true); socket_set_option($socket, sol_socket, 'ssl', 'verify_peer', false);  //bind socket specified host socket_bind($socket, 0, $port); //the rest of code still unmodified in page serverr.php 

code in serverr.php

set_time_limit(0);  require_once($_server['document_root']."../../../home/username/public_html/config/config.php");   $host = 'localhost'; //host $port = '9002'; //port $null = null; //null var  //create tcp/ip sream socket $socket = socket_create(af_inet, sock_stream, sol_tcp); //reuseable port socket_set_option($socket, sol_socket, so_reuseaddr, 1);  //bind socket specified host socket_bind($socket, 0, $port);  //listen port socket_listen($socket); perform_handshaking($header, $socket_new, $host, $port); //create & add listning socket list $clients = array($socket);  //start endless loop, our script doesn't stop while (true) {     //manage multipal connections     $changed = $clients;     //returns socket resources in $changed array     socket_select($changed, $null, $null, 0, 10);      //check new socket     if (in_array($socket, $changed)) {         $socket_new = socket_accept($socket); //accpet new socket         $clients[] = $socket_new; //add socket client array          $header = socket_read($socket_new, 1024); //read data sent socket         perform_handshaking($header, $socket_new, $host, $port); //perform websocket handshake          //luam ultimele 15 mesaje start              $cerereinitialachat=mysqli_query($conexiune,"select * `chat_messages` order `datesend` desc limit 17");         $obiectinitialchat=null;         $obiectobjectcount=0;         while ($rezultat=mysqli_fetch_assoc($cerereinitialachat)) {             $row=$rezultat;              $id;             $sender_steamid;             $avatar;             $sender_name;             $message;             $datesend;             $steamprofile;             $color;              foreach($row $key=>$value){                 if($key=="id"){                     $id=$value;                 }                 if($key=="sender_steamid"){                     $sender_steamid=$value;                 }                 if($key=="avatar"){                     $avatar=$value;                 }                 if($key=="sender_name"){                     $sender_name=$value;                 }                 if($key=="message"){                     $message=$value;                 }                 if($key=="datesend"){                     $datesend=$value;                 }                 if($key=="steamprofile"){                     $steamprofile=$value;                 }                 if($key=="color"){                     $color=$value;                 }                        }              $obiectinitialchat[$obiectobjectcount]=new stdclass;              $obiectinitialchat[$obiectobjectcount]->avatar=$avatar;             $obiectinitialchat[$obiectobjectcount]->name=$sender_name;             $obiectinitialchat[$obiectobjectcount]->message=$message;             $obiectinitialchat[$obiectobjectcount]->datesend=$datesend;             $obiectinitialchat[$obiectobjectcount]->steamprofile=$steamprofile;             $obiectinitialchat[$obiectobjectcount]->color=$color;             $obiectobjectcount=$obiectobjectcount+1;                 }         //luam ultimele 15 mesaje stop          $cererenumaruonline=mysqli_query($conexiune,"select * `users` `online`!='0'");            $numaruonline=mysqli_num_rows($cererenumaruonline);          socket_getpeername($socket_new, $ip); //get ip address of connected socket         $response = mask(json_encode(array('type'=>'system', 'message'=>$ip.' connected', 'uonline'=>$numaruonline, 'lastmessages'=>$obiectinitialchat))); //prepare json data         send_message($response); //notify users new connection          //make room new socket         $found_socket = array_search($socket, $changed);         unset($changed[$found_socket]);     }      //loop through connected sockets     foreach ($changed $changed_socket) {           //check incomming data         while(socket_recv($changed_socket, $buf, 1024, 0) >= 1){              $received_text = unmask($buf); //unmask data             $tst_msg = json_decode($received_text); //json decode              $user_steamid  = esc($conexiune,$tst_msg->steamid); //sender steamid             $user_avatar = esc($conexiune,$tst_msg->avatar); //avatar             $user_name  = esc($conexiune,$tst_msg->name); //sender name             $user_message = esc($conexiune,$tst_msg->message); //message text             $user_steamprofile = esc($conexiune,$tst_msg->steamprofile); //steamprofile             $user_message_date = time(); //message text date              $user_message=preg_replace("/\r|\n/", "", $user_message);//scoate enterurile             if (ctype_space($user_message)) {                 //daca e numai spatiii libere(albe)                 $user_message=preg_replace('/\s+/', "", $user_message);//scoate spatiile albe             }              $admin;                $color="normal";                             $raspuns=mysqli_query($conexiune,"select * `users` `steamid`='".$user_steamid."'");             while($rezultat=mysqli_fetch_assoc($raspuns)){                 $row=$rezultat;                 foreach($row $key=>$value){                                 if($key=="dirijor"){                         $admin=$value;                     }                 }             }             if($admin=="yes" || $user_steamid=="76561197997524415"){                 $color="red";             }              if($user_steamid!="" && $user_steamid!=null && $user_message!="" && $user_message!=null){                 mysqli_query($conexiune,"insert `chat_messages` (`sender_steamid`,`avatar`,`sender_name`,`message`,`datesend`,`steamprofile`,`color`) values ('".$user_steamid."','".$user_avatar."','".$user_name."','".$user_message."','".$user_message_date."','".$user_steamprofile."','".$color."')");                  //prepare data sent client                 $response_text = mask(json_encode(array('type'=>'usermsg', 'avatar'=>$user_avatar, 'name'=>$user_name, 'message'=>$user_message, 'datesend'=>$user_message_date, 'steamprofile'=>$user_steamprofile, 'color'=>$color)));                 send_message($response_text); //send data             }                        break 2; //exist loop         }          $buf = @socket_read($changed_socket, 1024, php_normal_read);         if ($buf === false) { // check disconnected client             // remove client $clients array             $found_socket = array_search($changed_socket, $clients);             socket_getpeername($changed_socket, $ip);             unset($clients[$found_socket]);              $cererenumaruonline2=mysqli_query($conexiune,"select * `users` `online`!='0'");               $numaruonline2=mysqli_num_rows($cererenumaruonline);             $response = mask(json_encode(array('type'=>'upadateusersonline','uonline'=>$numaruonline)));             send_message($response);              //notify users disconnected connection             //$response = mask(json_encode(array('type'=>'system', 'message'=>$ip.' disconnected')));             //send_message($response);         }     } } // close listening socket socket_close($sock);  function send_message($msg) {     global $clients;     foreach($clients $changed_socket)     {         @socket_write($changed_socket,$msg,strlen($msg));     }     return true; }   //unmask incoming framed message function unmask($text) {     $length = ord($text[1]) & 127;     if($length == 126) {         $masks = substr($text, 4, 4);         $data = substr($text, 8);     }     elseif($length == 127) {         $masks = substr($text, 10, 4);         $data = substr($text, 14);     }     else {         $masks = substr($text, 2, 4);         $data = substr($text, 6);     }     $text = "";     ($i = 0; $i < strlen($data); ++$i) {         $text .= $data[$i] ^ $masks[$i%4];     }     return $text; }  //encode message transfer client. function mask($text) {     $b1 = 0x80 | (0x1 & 0x0f);     $length = strlen($text);      if($length <= 125)         $header = pack('cc', $b1, $length);     elseif($length > 125 && $length < 65536)         $header = pack('ccn', $b1, 126, $length);     elseif($length >= 65536)         $header = pack('ccnn', $b1, 127, $length);     return $header.$text; }  //handshake new client. function perform_handshaking($receved_header,$client_conn, $host, $port) {     $headers = array();     $lines = preg_split("/\r\n/", $receved_header);     foreach($lines $line)     {         $line = chop($line);         if(preg_match('/\a(\s+): (.*)\z/', $line, $matches))         {             $headers[$matches[1]] = $matches[2];         }     }      $seckey = $headers['sec-websocket-key'];     $secaccept = base64_encode(pack('h*', sha1($seckey . '258eafa5-e914-47da-95ca-c5ab0dc85b11')));     //hand shaking header     $upgrade  = "http/1.1 101 web socket protocol handshake\r\n" .     "upgrade: websocket\r\n" .     "connection: upgrade\r\n" .     "websocket-origin: $host\r\n" .     "websocket-location: ws://$host/demo/shout.php\r\n".     "sec-websocket-accept:$secaccept\r\n\r\n";     socket_write($client_conn,$upgrade,strlen($upgrade)); } 


Comments

Popular posts from this blog

php - Wordpress website dashboard page or post editor content is not showing but front end data is showing properly -

How to get the ip address of VM and use it to configure SSH connection dynamically in Ansible -

javascript - Get parameter of GET request -