Attualmente sto utilizzando un socket TCP per scambiare dati tra un server e un client utilizzando i socket stream in PHP. Voglio che ogni cliente abbia un certificato univoco (che genererò per loro) per accedere al mio server in modo che solo le persone che conosco possano usarlo. Ho cercato e trovato solo come utilizzare il certificato sul lato server, che mi consentirà di stabilire una connessione socket SSL, ma quello di cui ho effettivamente bisogno è usare un certificato server client per identificare il client che si connette al mio server. È possibile usare PHP?PHP - Certificato client socket SSL
mi immagino il client di connettersi in questo modo:
$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);
Ma come fa la maniglia del server (identifico, ecc) questo certificato lato client?
Spero di essere stato chiaro con la mia domanda.
Grazie in anticipo, Rafael
OK, così sul client ho bisogno di impostare verify_peer su true e cafile sul percorso della chiave il _server_? Devo creare uno stream_context anche sul server? Se sì, quali opzioni dovrei impostare? A proposito, grazie per la rapida risposta! – user2308602
@ user2308602: è necessario creare un contesto di flusso sul server se si desidera autenticare realmente il client. Stesse opzioni del lato client, tutto è simmetrico. – Jon
Ci deve essere qualcosa che manca sul mio codice server. Al momento, chi inizia un socket su di esso può connettersi con successo, anche senza un certificato. Sul lato server creo il contesto con le opzioni: local_cert = myCert.pem; verify-peer = true; allow_self_signed = false; cafile = myKey.pem; Poi ho creare il socket: 'server = stream_socket_server $ ('ssl: //0.0.0.0: 500', $ errno, $ errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $ streamContext);' E ascoltare le connessioni: ' while (true) { $ client = stream_socket_accept ($ server); echo 'client connesso'; } Qualche idea? – user2308602