28
CS491B FINAL PROJECT REPORT JSIM-Server Abstract: JSIM (Java Secure Instant Messenger) is an instant messenger that has its own protocol and uses Secure Socket Layer (SSL) as opposed to regular sockets. This project is split into a client and a server side. In CS491A I developed the client side, and in CS491B I have developed the server side. The “server” is split into three and includes the main server application, an administrative application and database connectivity. Martin Jarnes Olsen Spring 2005

JSIM (Java Secure Instant Messenger)

Embed Size (px)

Citation preview

Page 1: JSIM (Java Secure Instant Messenger)

CS491B FINAL PROJECT REPORT

JSIM-Server

Abstract: JSIM (Java Secure Instant Messenger) is an instant messenger that has its own protocol and uses Secure Socket Layer (SSL) as opposed to regular sockets. This project is split into a client and a server side. In CS491A I developed the client side, and in CS491B I have developed the server side. The “server” is split into three and includes the main server application, an administrative application and database connectivity.

Martin Jarnes Olsen Spring 2005

Page 2: JSIM (Java Secure Instant Messenger)

Table of Contents1 Introduction ................................................................................................................3

1.1 Problem definition .................................................................................................3 1.2 Project description .................................................................................................3 1.3 Statement of scope.................................................................................................4

2 Technical background ................................................................................................5 2.1 Instant messengers .................................................................................................5 2.2 Java ........................................................................................................................5

3 System architecture ....................................................................................................6 3.1 Overview................................................................................................................6 3.2 The client ...............................................................................................................6 3.3 The server ..............................................................................................................8 3.4 The administrator...................................................................................................8 3.5 The database ..........................................................................................................9

4 Design and implementation details ..........................................................................10 4.1 SSL Sockets .........................................................................................................10 4.2 GUI Design..........................................................................................................11 4.3 Implemented features...........................................................................................11 4.4 The Protocol.........................................................................................................12

5 Conclusion................................................................................................................14 6 Future work ..............................................................................................................14 7 References ................................................................................................................15

Page 3: JSIM (Java Secure Instant Messenger)

1 Introduction

1.1 Problem definition The problem today is that a lot of the Internet traffic is still unencrypted. This includes

traffic such as email, chat, file transfers and video conversations. Gathering personal

information from individuals around the world has become an industry in itself. This can

easily be done by building a personal profile of users based on search history, email

history etc. In this project I will not focus on all these problems, but rather focus on chat

file transfers, and look at how this can be made more secure.

In CS491A I created the JSIM-client which can connect directly to other clients through

the Internet. Today most systems are behind a firewall, and the user would therefore have

to configure the firewall to support the JSIM-Client. Most firewalls allow all locally

initiated outgoing traffic. In addition to letting the client connect to each other I have now

added support to connect to a server. In this way configuring the firewall is not needed

since all traffic is outgoing and the server does all the forwarding of the traffic.

1.2 Project description In CS491A I developed the JSIM-Client. In CS491B I have developed the JSIM-Server.

Having a server solves the problem of unencrypted traffic, as well as having to configure

the firewall each time a TCP-connection must be established. The project is split into two

parts:

● Client – text transfers (chat), file transfers, capability of blocking IP addresses.

● Server – supports text transfers, blocking of IP addresses. Incorporates

administrative application, the main server, and a database.

Page 4: JSIM (Java Secure Instant Messenger)

1.3 Statement of scope ● The client must be able to connect to other clients as well as connecting to the

server. All traffic must be encrypted. The clients must be able to transfer text and

files.

● The server must be able to receive incoming connections from clients. The protocol

must support forwarding of messages from client to client. The server must

broadcast who is online and when a user disconnects to all clients.

● When a user registers the information must be saved in the database. Important

information such a username and password must be pulled out and verified before a

client connection can be successfully established. The database must also save IP

addresses that are banned.

● The administrative application is merely an application for setting up the database

from a remote location, as well as monitoring the server, who is online/offline, and

banning IP addresses from the server.

Page 5: JSIM (Java Secure Instant Messenger)

2 Technical background

2.1 Instant messengers Instant messengers are applications that support chat, file transfers as well as other

features. Most instant messengers are client/server based. The clients can connect to the

server. Both clients must connect to the server for communication to be established.

Some popular Instant messengers are MSN Messenger, AIM, Yahoo messenger etc.

2.2 Java This project is written entirely in J2SE 1.5 (Source 1) and takes advantage of the

following packages:

● javax.swing.* - GUI.

● java.awt.* - Events, Layout managers, etc.

● java.util.* - ArrayList, ToolBox etc.

● java.net.* - Standard sockets.

● javax.net.ssl.* - SSL sockets.

● java.sql.* - SQL queries etc.

In addition to these packages an external API must be loaded into the jre/lib/ext directory

for the server to function correctly, the MySQL (Source 2) driver. This provides the

following package:

● org.gjt.mm.mysql.* - Connection to MySQL database.

Page 6: JSIM (Java Secure Instant Messenger)

3 System architecture

3.1 Overview The complete overview over the system can be seen in figure 1. The clients can connect

to each other, as well as connect to the server and communicate through this. The server

runs as a standalone applications but can be controlled by the administrator. User

information and information about banned IP addresses is stored in the database.

Figure 1: Overview over client, server, administrator and database.

3.2 The client The client consists of many components. We can group them into GUI, controller and

managers. (Figure 2)

GUI

Controller

Managers

Figure 2: Client components overview.

Page 7: JSIM (Java Secure Instant Messenger)

The controller basically acts as a link between the GUI and the managers. The Managers

are split into different types:

• Outgoing managers – These managers take care of all outgoing traffic.

• Incoming managers – These managers take care of all incoming traffic. Thread

listens for new incoming sockets.

This again is split into different types:

• File manager – Handles file traffic. (Outgoing/Incoming)

• Text manager – Handles text traffic. (Outgoing/Incoming)

• Server Manager – Handles server communication. (Outgoing)

Figure 3 shows the 3 different types of traffic handled by the managers. Figure 4 shows

the internal structure of the managers. The protocol is implemented at the level of the

sender/receiver and the reader/writer.

Figure 3: Client traffic.

Figure 4: Manager handling (left) file transfers and (right) text traffic.

Page 8: JSIM (Java Secure Instant Messenger)

3.3 The server The server does not have any GUI components, thus simple in many ways. At the top

there is a controller. The controller handles the database, the adminlistener and the

clientlistener, and all interaction between those classes. The server listens for incoming

clients (multiple) and incoming administrator (only one), but does not initiate any

outgoing traffic. (Figure 5)

Figure 5: The server

3.4 The administrator The administrator has GUI components at the top. The controller is in the middle

working between the actual socket and the GUI. The application does not listen for

incoming traffic (sockets), it only initiates. The socket connects s to the adminlistener

socket of the server.

Figure 6: The administrator application

Page 9: JSIM (Java Secure Instant Messenger)

3.5 The database The database was modeled with simplicity and functionality in mind. For this purpose I

chose MySQL with MyISAM tables. (Figure 7)

Figure 7: Database model (EER notation)

Page 10: JSIM (Java Secure Instant Messenger)

4 Design and implementation details

4.1 SSL Sockets For the network part of my application I have consequently used SSL Sockets. In Java

this is easy. Typically the usage spans over the following areas1:

1. Listening for incoming connection. (Example 1)

2. Creating new outgoing connection. (Example 2)

3. Constantly reading from a connection by using a thread.

import java.net.*;

import javax.net.ssl.*;

SSLServerSocket ss = null;

ss = (SSLServerSocket) SSLServerSocketFactory.getDefault().createServerSocket

(CLIENTLISTEN_PORT);

ss.setNeedClientAuth(false);

String cipherSuite [] = {"SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA"};

ss.setEnabledCipherSuites(cipherSuite);

Socket tmp_socket = ss.accept();

Example 1: Listening for incoming SSL connections. import javax.net.ssl.*; SSLSocket socket = (SSLSocket)SSLSocketFactory.getDefault().createSocket(host,port); socket.setNeedClientAuth(false); String cipherSuite [] = { "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA" }; socket.setEnabledCipherSuites(cipherSuite);

Example 2: Creating new outgoing connection.

1 Note: The examples are somewhat simplified to fit this purpose.

Page 11: JSIM (Java Secure Instant Messenger)

4.2 GUI Design Most of the GUI has been created using the following API and as a combination between

them (Source 3):

• javax.swing

o BoxLayout

o JFrame

o JPanel

• java.awt

o BorderLayout

o FlowLayout

o GridBagLayout

o GridLayout

Other than that general graphical editing software have been used for creating icons and

images etc.

4.3 Implemented features The client:

• Text transfer (chat)

• File transfers

• Sockets over SSL

• Application firewall

The server:

• Administrator network interface

• Client network interface

• Database connectivity

• Console application

• Event system

Page 12: JSIM (Java Secure Instant Messenger)

The administrator:

• Connect to server

• After connecting set up the server with a database and maximum number of

allowed users.

• Supported features (GUI) but not implemented (protocol):

o Monitoring, being able to see which users are online and which are offline,

also monitoring events.

o Banning IP addresses and seeing which IP addresses are banned.

4.4 The Protocol Client/Client protocol:

• Text transactions

o DISCONN – External chat closed.

o INIT – Initiate chat with other end.

o TXT <txt> - Sending text.

o PING – Keeping connection alive.

• File transactions

o <Filename> - Name of file.

o <Filesize> - Filesize in bytes.

o TACC – Accept filetransfer.

o TDEN – Deny filetransfer.

o 1<100010010101…> - As file is sent (raw bytes) each block transaction

must be started with 1 to indicate healthy connection.

Page 13: JSIM (Java Secure Instant Messenger)

Client/Server protocol:

• CONNECTED – Connection is established.

• REGOK – Registration is ok.

• REGREF – Registration is refused.

• LOGINOK – Login is ok.

• LOGINREF – Login is refused.

• PING – Server to the client, keeping connection alive.

• PONG – Client response to ping, only after ping.

• NOCONN – Can not connect for some reason.

• USERS <user1 user2 .. usern> - Users online.

• ADDUSER <user> - A new user is online.

• CHAT <txt> - Text transfer/chat.

• REMOVEUSER <user> - A user has logged off.

• CLOSECHAT – A user has closed the chat.

Page 14: JSIM (Java Secure Instant Messenger)

5 Conclusion I have created a client, a server, an administrator and set up a database. The applications

are done, except for the administrator, which needs more work. The standard

functionality of the server is in place; users can register, log in, chat with other users, IP

addresses can be banned through the database. To sum it up:

• Client – Done

• Server – Done

• Administrator – Needs more work

• Database – Done

I am happy with my solution, and I think I have accomplished most of what I wanted to

create. The project has a lot of potential for future development and enhancements.

6 Future work I will continue to work on this project. The most obvious future work will be:

• Finishing the administrator.

• Polish the GUI of the applications.

• Fix bugs and errors.

Once this is ok I can start looking at multiserver support:

• Several servers can connect to the same database.

• Adds support for more users.

• Needs stronger protocol, interserver communication etc.

Page 15: JSIM (Java Secure Instant Messenger)

7 References Source 1: “Java Technology”, http://java.sun.com/

Source 2: “MySQL. The world’s most popular open source database”,

http://www.mysql.com/

Source 3: “A visual guide to layout managers”,

http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html

Page 16: JSIM (Java Secure Instant Messenger)

Appendix A: Screenshots

Screenshot 1: The JSIM Client (Client).

Screenshot 2: Connecting to client for chat (Client/Client).

Page 17: JSIM (Java Secure Instant Messenger)

Screenshot 3: Chatting with other client (Client/Client).

Screenshot 4: Sending a file (Client/Client).

Screenshot 5: Sending/Receiving files (Client/Client).

Page 18: JSIM (Java Secure Instant Messenger)

Screenshot 6: After sending/receiving a file (Client/Client).

Screenshot 7: The application firewall (Client/Client).

Screenshot 8: Banning a host (Client/Client).

Page 19: JSIM (Java Secure Instant Messenger)

Screenshot 9: Remove a ban (Client/Client).

Screenshot 10: Viewing list of banned hosts. (Client/Client)

Page 20: JSIM (Java Secure Instant Messenger)

Screenshot 11: Connect to the server (Client/Server).

Screenshot 12: The server running. (Server)

Screenshot 13: Server running, server is full. (Server)

Page 21: JSIM (Java Secure Instant Messenger)

Screenshot 14: List of users. (Client/Server)

Screenshot 15: Chatting. (Client/Server)

Page 22: JSIM (Java Secure Instant Messenger)

Screenshot 16: Chatting. Other end closed conversation. (Client/Server)

Screenshot 17: The administrator. (Admin)

Page 23: JSIM (Java Secure Instant Messenger)

Screenshot 18: Setting up a server with database. (Admin/Server)

Screenshot 19: Server setup. (Admin/Server)

Page 24: JSIM (Java Secure Instant Messenger)

Screenshot 20: After setting up the server. (Admin/Server)

Screenshot 21: After setting up the server 2. (Admin/Server)

Page 25: JSIM (Java Secure Instant Messenger)

Screenshot 22: After setting up the server 3. (Admin/Server)

Page 26: JSIM (Java Secure Instant Messenger)

Appendix B: User manual Installation:

1. Unzip jsim.zip to desired location. (Figure 1)

Figure 1: Inside jsim.zip.

2. Make sure Java Runtime Environment 1.5 is installed or download from

http://java.sun.com/ 3. Unzip mysql-connector-java-3.0.16-ga-bin.zip somewhere in the classpath (i.e.

jre/lib/ext) for the jsimserver to work.

4. Project is now installed. The client:

1. Command to run the client: java –jar jsim.jar 2. If more than one client is running on the same host you must define the ports.

Example: • java –jar jsim.jar –inports 20000 20001 –outports 21000 21002 • java –jar jsim.jar –inports 21000 21002 –outports 20000 20001

3. To chat with other client: click the “Client connect” button and type in the host address (click “Connect”).

4. To send file to other client: click the “Send file” button , type in the host

address and browse for the file to send (click “Send”).

5. To ban or unban hosts click “Preferences” button .

6. To connect to the server click “Server connect” button : • Fill in host/IP and the port of the server. • Fill in fields depending on if you are registered or not. • Note: Make sure server is started and accepts clients first.

Page 27: JSIM (Java Secure Instant Messenger)

The server:

1. Command to run the server: java –jar jsimserver.jar 2. In the console, fill in what ports you want to listen for clients.

3. Next, fill in the port you want to listen for administrator.

4. Choose a username and password for the administrator and fill this in.

5. You should now be somewhere like in figure 2.

Figure 2: The server.

(Note: The server is not accepting incoming clients yet; you must set it up first via the administrator)

The administrator:

1. Command to run the administrator: java –jar jsimadmin.jar 2. A tabbed pane with two panes will appear: Database, and Server.

3. Fill in the correct information for the database, for example the testdatabase that is

set up for this purpose: • Host: jsim.engineerorama.com • Username: jsimuser • Password: clawfinger.

Page 28: JSIM (Java Secure Instant Messenger)

4. Fill in the correct information for the server, for example: • Host/IP: localhost • Port number, user and password what ever is set up (figure 2). • Set how many clients you want to allow to your server. (Minimum 2

maximum 1000). • Click “Start server”.

5. The server will now start listening for incoming clients (Figure 3).

Figure 3: The server is set up and waiting for clients.

The database:

1. Inside the file jsimdb.sql.zip you will find the database scheme. Load this into a MySQL database server and set it up with appropriate grants and users for this project.

2. Or you can use the database I have set up at:

• Host: jsim.engineerorama.com • Username: jsimuser • Password: clawfinger.

3. If you chose step two, you can log in to the database using a web-browser and the

address is http://jsim.engineerorama.com/ (PHPMyAdmin). • Username: jsimuser • Password: clawfinger.

4. For testing purposes, log in using a web-browser and add users or IP-addresses to be banned.