2013-05-06 9 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

+0

私はすでにこのオプションを試しましたが、そのようにして別のエラーが返されます:fsockopen():sslに接続できません:// localhost:443 – prisca

+0

localhost httpsが正しく動作していますか? – Aivar

答えて

2

ここでは、必要なものを正確に指定するためにいくつかの変更を加えることをお勧めします。

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

SSLを使用しているSSLのバージョンがない場合それはいくつかのシステム上の問題を引き起こすことが知られているデフォルトになりますどのポート80を使用するので、443

として$ポートを指定しません指定され、それを検出しようとPHPに依存しています。私はあなたのサーバがSSLv2のかのSSLv3を使用している場合によっては

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

または

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

のいずれかを試すことをお勧め。

これは、任意のあいまいさを取り除き、明確

関連する問題