J'ai un programme serveur simple qui collecte des données à partir de nombreux périphériques matériels sur un réseau sans fil ouvert. Je veux m'assurer que quiconque se connecte à mon port ne peut pas envoyer de commandes ou écouter mon trafic, j'ai donc besoin du serveur pour valider le client. J'ai trouvé quelques exemples mais la plupart semblent prendre l'approche de la validation du serveur du côté client. Je suis nouveau à la programmation SSL et Socket.Authentification client Java Sockets SSL
À partir du client je
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(new FileInputStream("KeyStore"), "password".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(keystore);
SSLContext context = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = tmf.getTrustManagers();
context.init(null, trustManagers, null);
SSLSocketFactory sf = context.getSocketFactory();
return (SSLSocket) sf.createSocket(host, port);
Et sur le serveur je
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(newFileInputStream("server"),"password".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, "password".toCharArray());
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(kmf.getKeyManagers(), null, null);
SSLServerSocketFactory ssf = sc.getServerSocketFactory();
server = (SSLServerSocket) ssf.createServerSocket(this.port);
Je ne suis pas sûr de ce que tout est fait, mais l'exemple je l'ai trouvé est à 2 voies authentification, donc une certaine exagération. Je pense que j'ai juste besoin d'un de ces morceaux de code, mais je ne comprends pas assez bien le SSL pour savoir lequel. De quel côté a besoin du fichier de clés? Qui a besoin de clés et de certificats? Merci
L'authentification bidirectionnelle n'est pas une «overkill», c'est l'authentification du serveur et l'authentification du client, ce dont vous avez besoin si vous ne voulez pas que les autres écoutent votre trafic. Si le serveur doit faire confiance aux périphériques, les périphériques doivent également faire confiance au serveur sûrement? – EJP
Merci pour la réponse. La chose qui me préoccupe le plus est quelqu'un qui se connecte à mon port et qui tente d'envoyer des commandes au serveur. Je ne suis pas si préoccupé par l'authentification du serveur, car ces appareils maintiendront les connexions au serveur pendant de longues périodes. Je pensais que je réduirais l'entretien et la complexité en le gardant à sens unique. – Shoe