connexion reseau avec SSL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : connexion reseau avec SSL

par enneite » 26 juin 2009, 15:05


$xportlist = stream_get_transports();


le tableau dit :
Array ( [0] => tcp [1] => udp )

par stopher » 24 juin 2009, 22:19

Si il y a quelque chose à activer , c'est à la compilation ( pour le mode static ) , ou dans le php.ini ( pour la méthode module ).

Que te retourne :
$xportlist = stream_get_transports();
print_r($xportlist);
Pour la compilation sous linux , la ligne à compléter est la suivante :

Code : Tout sélectionner

--with-openssl[=DIR] Include OpenSSL support (requires OpenSSL >= 0.9.6)
Ch.

par enneite » 24 juin 2009, 22:04

Parce que je trouve ça plus sympa de maitriser les entêtes http que de se plonger dans la docu sur cURL, c'est mon coté bricoleur. Je pense que c'est préférable de maitriser une fonction plus generaliste comme fsocketopen qui est déjà comprise dans le package PHP.
je pense qu'il est plus facile de maitriser cURL après avoir bien compris et maitriser les sockets que l'inverse.

Ca permet en plus d'avoir une vue plus affinée sur les requêtes http, donc pour ma culture intenet, je pense que c'est mieux.
Ca permet peut être des évolutions plus large, ça permet peut être mieux d'anticiper des problèmes à venir (par rapport à l'utilisation d'une option de méthodes toutes faites)
Bref, c'est essentiellement pour avoir la possibilité de voir plus loin que mon seul problème.

Ceci dit cURL est très bien pour mon problème en cours. mais parfois il faut essayer de voir plus loin que la simple résolution de problème.
M'intresser aux sockets m'a permit d'ailleurs de corriger une faille de sécurité dans mon .htaccess.

par Sékiltoyai » 24 juin 2009, 18:56

Euh, question peut être idiote :
Pourquoi est ce que tu cherches à le faire à la main ?

connexion reseau avec SSL

par enneite » 24 juin 2009, 16:51

J'aimerais pouvoir établir une connexion réseau via fsocketopen() sur le port 443 (du ssl)

Ce que j'arrive à faire: c'est
1) etablir une connexion avec fsocketopen() et après avoir générer plus ou moins manuellement mon entete http en utilisant le port 80.

2) Je sais établir des connexions réseau sur le port 443 grâce à cURL, mais là ce qui m'intéresse c'est de pouvoir construire à la main mon entête http, c'est pour cela que dans ce cas précis je veux passer par fsocketopen().


VOICI MON CODE:
(lorsque le port vaut 80, cela fonctionne, mais si je mets 443, ça ne passe pas)
$id="id:smdp";
$id64=base64_encode($id);//echo $id64;

$serveur="www.monsite.com";


//$port=80;
$port=443;


$sock = fsockopen("$serveur", $port, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)\n");

$mots_cles="toto";
$data = "mots_cles=" . urlencode($mots_cles);



$methode="POST";
$uri="/dossier/page.php";

$header_demande="$methode $uri HTTP/1.1\r\n";
$header_demande.="Host: $serveur\r\n";
$header_demande.="Content-type: application/x-www-form-urlencoded\r\n";
$header_demande.="Content-length: " . strlen($data) . "\r\n";
$header_demande.="Accept: */*\r\n";
$header_demande.="Authorization: BASIC $id64\r\n";
$header_demande.="\r\n";

echo nl2br($header_demande);
fputs($sock,$header_demande);

$headers = "headers= ";
while ($str = trim(fgets($sock, 4096)))
{
	$headers .= "$str\n";
}
echo nl2br($headers);
echo "\n";$body = "";
while (!feof($sock))
{
	$body .= fgets($sock, 4096);
}
fclose($sock);
echo $body;

REMARQUE : la reponse est :
Bad Request
Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.
En gros ma requête http ne passe pas sur un port destiné au https.

Alors du coup , je me renseigne et je tombe sur le net sur un bout de code qui dit :
<?php
// preconditions
$port = 80 | 443
$host = "www.example.com";
$method = "POST" | "GET";
$contenttype = "text/html" | "text/plain" | "text/xml" | ...;
$data = "<something>";

// script
if($port == 443)
      $sslhost = "ssl://".$host;
else
      $sslhost = $host;
$fp = fsockopen($sslhost, $port);
fputs($fp, "$method $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Content-type: $contenttype\r\n");
fputs($fp, "Content-length: ".strlen($data)."\r\n");
fputs($fp, "Connection: close\r\n");
fputs($fp, "\r\n");
?>
(source = http://fr.php.net/fsockopen)

malheureusement si je tente d'utiliser :
fsockopen("ssl://$serveur", $port, $errno, $errstr, 30);
cela me renvoie l'erreur:
Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://web.fusacq.com:443 (Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?) in c:\chemin\page.php on line 18
alors je veux bien parametrer mon PHP pour le "socket transport ssl" comme on me dit, mais je ne sais absolument pas comment faire!

Quelqu'un le saurait-il?

NB: si quelqu'un sait comment passer des login et mot de passe de connexion grâce à curl (l'équivalent de $header_demande.="Authorization: BASIC $id64\r\n"; je suis preneur également.

alors je viens de trouver qq chose d'interessant qui concerne curl :
curl_setopt ($ch, CURLOPT_USERPWD, 'login:motdepasse');
Avec cela on peut passer les identifiants en parametres, mais bon, j'aimerais quand même savoir s'il y a un espoir avec fsocketopen();