2013-05-06 25 views
5

我正在嘗試使用套接字創建安全登錄程序。這是我寫的代碼:使用套接字進行安全登錄

<?php 

$myusername=$_POST["username"]; 
$mypassword=$_POST["password"]; 
$host="localhost"; 
$port=80; 
$timeout=60; 
$target="/admin_area.php"; 
if($myusername=="admin" && $mypassword=="passwd") 

{ 
    if (!$sock=fsockopen("ssl://".$host,$port,$errnum,$errstr,$timeout)) 

    { 
    die ("Could not open socket: [$errnum] $errstr"); 
    } 

    else 
    { 
    $posted_vars=array("username"=>$myusername, 
         "password"=>$mypassword); 
    $body=""; 
    foreach ($posted_vars as $parameter=>$value) 

    { 
     $body.="&".$parameter."=".$value; 
    } 
    $headers="POST ".$target." HTTP/1.0 \r\n"; 
    $headers.="Content-Type: application/x-www-form-urlencoded \r\n"; 
    $headers.="Content-Length: ".strlen($body)." \r\n"; 
    $headers.="Connection: Keep-Alive \r\n"; 
    $headers.="Authorization: Basic ".base64_encode($myusername.":".$mypassword)." \r\n\r\n"; 
    fputs ($sock,$headers.$body); 
    $data=""; 
    while (!feof ($sock)) 

    { 
     $data.=fgets($sock,3000); 
    } 
    list($res_head,$res_body)=explode("\r\n\r\n",$data); 
    echo $res_body; 
    } 
} 

else 

{ 
    echo "Login not happened successfully"; 
} 

?> 

當我運行它,將返回以下警告:

Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol in C:\wamp\www\log_in.php on line 12

Warning: fsockopen(): Failed to enable crypto in C:\wamp\www\log_in.php on line 12

Warning: fsockopen(): unable to connect to ssl://localhost:80 (Unknown error) in C:\wamp\www\log_in.php on line 12

Could not open socket: [0]

的問題是,這個代碼可以正常工作,如果我刪除指令使用SSL協議fsockopen()函數,但我需要實現一個安全的HTTP連接。

我會非常感謝任何能告訴我我錯在哪裏的人。 謝謝!

+3

應該不要使用$端口= 443; – Aivar 2013-05-06 13:29:27

+0

我已經試過這個選項,但是它以這種方式返回另一個錯誤:fsockopen():無法連接到ssl:// localhost:443 – prisca 2013-05-06 13:32:28

+0

你確定localhost https正確運行? – Aivar 2013-05-06 13:37:03

回答

2

我會建議在這裏做一些改變,以確切地指定你需要什麼。

if (!$sock=fsockopen("ssl://".$host,$port,$errnum,$errstr,$timeout)) 

SSL不使用80端口,這將是默認的,所以指定$端口443

已經知道導致問題在某些系統的SSL正在使用的版本不指定,並依靠PHP來嘗試檢測它。我會建議嘗試要麼

if (!$sock=fsockopen("sslv2://".$host,443,$errnum,$errstr,$timeout)) 

if (!$sock=fsockopen("sslv3://".$host,443,$errnum,$errstr,$timeout)) 

如果您的服務器使用的SSLv2或SSLv3的根據。

這消除任何含糊之處,並明確指示服務器如何進行