オープン ワイヤレス ネットワーク上の多数のハードウェア デバイスからデータを収集する単純なサーバー プログラムがあります。ポートに接続する人がコマンドを送信したり、トラフィックをリッスンしたりできないようにしたいので、クライアントを検証するためにサーバーが必要です。いくつかの例を見つけましたが、ほとんどはクライアント側からサーバーを検証するアプローチを取っているようです。SSL とソケットのプログラミングは初めてです。
お持ちのお客様より
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);
そして、私が持っているサーバーで
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);
すべてが何をしているのか正確にはわかりませんが、例から、それは双方向認証であることがわかりました。これらのコードの 1 つだけが必要だと思いますが、SSL を十分に理解していないため、どれがどれかを知ることができません。どちらの側にキーストアが必要ですか? キーと証明書が必要なのは誰ですか? ありがとう