Supposons que je dispose d'un code PHP exécuté à l'intérieur d'un serveur Web, par exemple, en exécutant une simple application CakePHP. A partir de cette application, je veux occasionnellement faire une connexion TLS sur un serveur pour échanger des données. Comment cela est-il typiquement fait? (J'ai peu d'expérience avec PHP.)Comment faire une connexion TLS à partir de PHP sur un serveur web, et en toute sécurité
Quels plugins ou bibliothèques PHP ou autre, sont recommandés pour accomplir les connexions TLS? Où sont les bons endroits pour commencer à chercher? (Mes premières recherches Google me donnent un énorme rapport entre le bruit et le signal.)
Quels sont les problèmes de sécurité liés à l'installation de la clé privée X509 sur le serveur Web? Pour faire une connexion TLS, je vais avoir besoin à la fois du certificat X509 et de la clé privée correspondante, comme peut-être des fichiers PEM, ou des fichiers DER, ou dans un keystore Java, ou autre. Cette clé privée va-t-elle rester vulnérable sous la racine web? Comment cela est-il généralement géré? Quels sont les problèmes de sécurité, en particulier, de la sécurisation de la clé privée à utiliser pour établir une connexion TLS? Quelles sont les meilleures pratiques? Edit: J'ai oublié de mentionner que le serveur auquel l'application PHP se connecte nécessite un certificat client pour être présenté. Le client a besoin de la clé privée pour se connecter. En outre, le serveur auquel je me connecte est et non un serveur HTTP - J'ai juste besoin de lire/écrire sur une connexion socket simple au serveur (via la connexion SSL/TLS).
Mon client * ne * besoin d'une clé privée, car il doit présenter un certificat de client au serveur. Dans ce cas, n'est-il pas préférable de le garder entièrement hors de la racine web, et puis, un script PHP peut y accéder mais il ne sera pas compromis par le serveur web (sous lequel le script PHP s'exécute)? En outre, CURL ne me laisse pas envoyer un flux de données arbitraires, n'est-ce pas? Il semblerait que CURL ne soit utile que si je me connecte à un serveur HTTP ou à un serveur FTP, ce que je ne suis pas. Existe-t-il une bibliothèque similaire couramment utilisée pour les flux de données simples? –
@Jim Flood PHP doit avoir accès au certificat, si votre application PHP est la propriété de votre certificat, il n'y a aucun moyen de contourner cela. CURL devrait être utilisé pour HTTPs, si vous voulez juste la connexion de la couche 4, alors vous pouvez utiliser fsockopen(), vérifiez mes mises à jour. – rook
Rook Je vois ce que vous voulez dire au sujet du risque pour la clé privée puisque PHP doit avoir accès.En ce qui concerne fsockopen, mon installation LAMP a PHP5 et fsockopen n'a plus "le sixième paramètre", mais j'ai trouvé stream_socket_client qui fonctionne bien avec local_cert, cafile, et verify_peer dans les options 'ssl' (pas 'tls'). Pourriez-vous le noter dans votre réponse? Merci. –