SSL(Secure Socket Layer)은 넷스케이프사세ㅓ 전자상거래 등의 보안을 위해 개발... 이후 TLS(Transport Layer Security)라는 이름으로 표준화 되었다. SSL은 특히 네트워크 레이어의 암호화 방식이기때문에 HTTP뿐만 아니라 NNTP, FTP등에도 사용할 수 있는 장점이 있다. 기본적으로 Authentication, Encryption Integrity를 보장한다. 라고 위키 백과에서 말을 하고 있네요 ^^
1. SSL 통신은 항상 두 개의 컴퓨터 간에서만 이루어지며, 3개 혹은 그 이상의 통신은 있을 수 없다.... ㅋ
2. 한 쪽은 항상 서버 역할을 하며, 다른 한쪽은 항상 클라이언트 역할을 해야한다.
1. 클라이언트가 서버에 접속하면 ㅎ서버 인증서(서버의 공개키를 인증기관이 전자서명으로 인증한것)을 전송 받는다.
2. 클라이언트는 받은 서버 인증서를 분석하여 신뢰할 수 있는 인증서 인지를 검토한, 서버의 공개키를 추출한다.
4. 서버에서는 비밀키로 세션키를 복호화하여 그 키르 ㄹ사용하여 대칭키 암호방식으로 메시지를 암호화, 클라이언트와 통신하게 된다.
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class EchoServer{
public static void main(String[] args){
try{
SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket = (SSLServerSocket)sslserversocketfactory.createServerSocket(443);
System.out.println("Wating Connection");
while(true){
SSLSocket socket = (SSLSocket)sslserversocket.accept();
ThreadServer thread = new ThreadServer(socket);
thread.start();
}
}catch(Exception ex){ System.out.println(ex);}
}
}
class ThreadServer extends Thread{
private SSLServerSocket sslsocket;
private SSLSocket socket;
private InputStream input;
private InputStreamReader reader;
private BufferedReader br;
public ThreadServer(SSLSocket socket){
this.socket = socket;
}
public void run(){
try{
String fromClient = null;
input = socket.getInputStream();
reader = new InputStreamReader(input);
br = new BufferedReader(reader);
while((fromClient = br.readLine())!=null){
System.out.println(fromClient);
System.out.flush();
}
}catch(Exception e){
}
}
}
이 서버 소스를 컴파일 한후 실행을 하여한다.
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;
public
class EchoClient {
public
static
void
main(String[] arstring) {
try {
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("localhost", 9999);
InputStream inputstream = System.in;
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
OutputStream outputstream = sslsocket.getOutputStream();
OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);
BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);
String string = null;
while ((string = bufferedreader.readLine()) != null) {
bufferedwriter.write(string + '\n');
bufferedwriter.flush();
}
} catch (Exception exception) {
exception.printStackTrace();
}
}
}