安全连接Java套接字
我有一个关于我用java创建的桌面应用程序的问题,它在登录部分。事实证明,我不知道如何进行安全登录,我是通过套接字进行的,但问题是,这是一个公开的应用程序,所以我不知道如何使用SSL套接字而不为每个人使用密码,这是可以破解的,你能帮我吗?我目前有这段代码,可以在消息中的一个简单示例中看到它 对于服务器安全连接Java套接字,java,sockets,Java,Sockets,我有一个关于我用java创建的桌面应用程序的问题,它在登录部分。事实证明,我不知道如何进行安全登录,我是通过套接字进行的,但问题是,这是一个公开的应用程序,所以我不知道如何使用SSL套接字而不为每个人使用密码,这是可以破解的,你能帮我吗?我目前有这段代码,可以在消息中的一个简单示例中看到它 对于服务器 //static ServerSocket variable private static ServerSocket server; //socket server port on
//static ServerSocket variable
private static ServerSocket server;
//socket server port on which it will listen
private static int port = 9876;
public static void main(String args[]) throws IOException, ClassNotFoundException{
//create the socket server object
server = new ServerSocket(port);
//keep listens indefinitely until receives 'exit' call or program terminates
while(true){
System.out.println("Waiting for the client request");
//creating socket and waiting for client connection
Socket socket = server.accept();
//read from socket to ObjectInputStream object
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
//convert ObjectInputStream object to String
String message = (String) ois.readObject();
System.out.println("Message Received: " + message);
//create ObjectOutputStream object
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
//write object to Socket
oos.writeObject("Hi Client "+message);
//close resources
ois.close();
oos.close();
socket.close();
//terminate the server if client sends exit request
if(message.equalsIgnoreCase("exit")) break;
}
System.out.println("Shutting down Socket server!!");
//close the ServerSocket object
server.close();
}
}
为客户
public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException, InterruptedException{
//get the localhost IP address, if server is running on some other IP, you need to use that
InetAddress host = InetAddress.getLocalHost();
Socket socket = null;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
for(int i=0; i<5;i++){
//establish socket connection to server
socket = new Socket(host.getHostName(), 9876);
//write to socket using ObjectOutputStream
oos = new ObjectOutputStream(socket.getOutputStream());
System.out.println("Sending request to Socket Server");
if(i==4)oos.writeObject("exit");
else oos.writeObject(""+i);
//read the server response message
ois = new ObjectInputStream(socket.getInputStream());
String message = (String) ois.readObject();
System.out.println("Message: " + message);
//close resources
ois.close();
oos.close();
Thread.sleep(100);
}
}
}
公共静态void main(字符串[]args)抛出UnknownHostException、IOException、ClassNotFoundException、InterruptedException{
//获取本地主机IP地址,如果服务器在其他IP上运行,则需要使用该地址
InetAddress主机=InetAddress.getLocalHost();
套接字=空;
ObjectOutputStream oos=null;
ObjectInputStream ois=null;
对于(inti=0;i如果你想以这种方式处理500个客户机-忘记套接字和手动实现TLS处理。最后,选择Spring Boot或类似的方法
像上面那样编写临时代码可以让您快速进入web通信,但会使下一步更加困难。看起来您希望在这里实现两件事。第一件事是确保渠道的完整性和机密性。第二件事是验证客户端。编写您自己的TLS su通过套接字进行支持将很困难,而且容易出错。编写您自己的对称加密并将机密存储在bots服务器和客户端本地可能更容易。这也将向服务器验证客户端。但问题是-将有多少个客户端?一个?客户端的代码是否公开?另一个想法是要使用已经支持TLS的服务器和标准,例如编写自己的REST端点并将其部署到Tomcat上。使用TLS保护所有内容。使您的客户端通过TLS连接。标准功能。该应用程序将有大约500个客户端。但是,如何使用相同的simetric密码处理客户端和服务器,如何将密码发送给客户端t、 该应用程序将使用Java,因此任何人都可以反编译代码为什么我不能使用套接字?而且它不是web,而是Java桌面应用程序。相信我,你不想使用套接字实现TLS。桌面应用程序也可以使用各种web协议,如REST、HTTP等。使用USB编写桌面应用程序是一种常见的做法你能给我举个例子吗?虽然我欣赏并同意你对使用更高级协议和工具的关注,但我觉得你夸大了在Java中使用TLS的难度。Java支持服务器和客户端的TLS套接字。API与套接字API非常相似。