ich zur Zeit einer TCP-Socket bin mit Daten zwischen einem Server auszutauschen und einem Client mit Socket-Streams in PHP. Ich möchte, dass jeder Client ein eindeutiges Zertifikat (das ich für sie erzeugen werde) hat, um auf meinen Server zuzugreifen, so dass nur Leute, die ich kenne, in der Lage sein werden, es zu benutzen. Ich habe nur gesucht und gefunden, wie man das Zertifikat auf der Serverseite verwendet, was es mir ermöglicht, eine SSL-Socket-Verbindung herzustellen, aber was ich tatsächlich brauche, ist ein Client-Server-Zertifikat, um den Client zu identifizieren, der eine Verbindung zu meinem Server herstellt. Ist das mit PHP möglich?PHP - SSL Socket-Client-Zertifikat
würde ich den Client vorstellen, wie diese zu verbinden:
$clientCert = './clientCert.pem';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $clientCert);
$server = stream_socket_client('ssl://IP', $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
Aber wie funktioniert der Server Griff (identifizieren, etc.), um dieses Client-Seite Zertifikat?
Hoffnung war ich mit meiner Frage klar.
Vielen Dank im Voraus, Rafael
Okay, also auf dem Client muss ich verify_peer auf true und kafile auf den Pfad des Schlüssels der _server_ setzen? Soll ich auch einen stream_context auf dem Server erstellen? Wenn ja, welche Optionen sollte ich einstellen? Übrigens, danke für die schnelle Antwort! – user2308602
@ user2308602: Sie müssen einen Stream-Kontext auf dem Server erstellen, wenn Sie den Client tatsächlich authentifizieren möchten. Gleiche Optionen wie auf der Clientseite, alles ist symmetrisch. – Jon
Es muss etwas auf meinem Server-Code fehlen. Derzeit kann jeder, der einen Socket initiiert, erfolgreich eine Verbindung herstellen, auch ohne ein Zertifikat. Auf der Serverseite erstelle ich den Kontext mit den Optionen: local_cert = myCert.pem; verify-peer = wahr; allow_self_signed = false; kafile = myKey.pem; Dann erstelle ich die Fassung: '$ server = stream_socket_server ('ssl: //0.0.0.0: 500', $ errno, $ errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $ streamContext);' Und hören Verbindungen: ' while (wahr) { $ client = stream_socket_accept ($ server); Echo 'Client verbunden'; } ' Irgendwelche Ideen? – user2308602