SSL를 자바로 구현한 소스!!!(서버와 클라이언트)
여기서 SSL이란??
여기서 SSL이란??
SSL(Secure Socket Layer)은 넷스케이프사세ㅓ 전자상거래 등의 보안을 위해 개발... 이후 TLS(Transport Layer Security)라는 이름으로 표준화 되었다. SSL은 특히 네트워크 레이어의 암호화 방식이기때문에 HTTP뿐만 아니라 NNTP, FTP등에도 사용할 수 있는 장점이 있다. 기본적으로 Authentication, Encryption Integrity를 보장한다. 라고 위키 백과에서 말을 하고 있네요 ^^
SSL프로토콜의 일밙거인 규칙!!
1. SSL 통신은 항상 두 개의 컴퓨터 간에서만 이루어지며, 3개 혹은 그 이상의 통신은 있을 수 없다.... ㅋ
2. 한 쪽은 항상 서버 역할을 하며, 다른 한쪽은 항상 클라이언트 역할을 해야한다.
SSL 통신 순서
1. 클라이언트가 서버에 접속하면 ㅎ서버 인증서(서버의 공개키를 인증기관이 전자서명으로 인증한것)을 전송 받는다.
2. 클라이언트는 받은 서버 인증서를 분석하여 신뢰할 수 있는 인증서 인지를 검토한, 서버의 공개키를 추출한다.
3., 세션키로 사용할 임의의 메시지를 서버의 공개키로 암호화하여 서버로 전송
4. 서버에서는 비밀키로 세션키를 복호화하여 그 키르 ㄹ사용하여 대칭키 암호방식으로 메시지를 암호화, 클라이언트와 통신하게 된다.
구현 소스!!
일단 키 값을 생성을 하여야 한다,
생성한 키는 클라이언트와 서버에 둘다 있어야 한다!!! ㅠ
서버 소스
이 서버 소스를 컴파일 한후 실행을 하여한다.
만약 그냥 실행을 했을 경우?? ㅎ
이렇게 나와서 실행이 안된다....
이렇게 해야 실행이 된다....
클라이언트
실행
서버와 마찬가지로 해줘야한다...
c출처 : http://stilius.net/java/java_ssl.php
SSL프로토콜의 일밙거인 규칙!!
1. SSL 통신은 항상 두 개의 컴퓨터 간에서만 이루어지며, 3개 혹은 그 이상의 통신은 있을 수 없다.... ㅋ
2. 한 쪽은 항상 서버 역할을 하며, 다른 한쪽은 항상 클라이언트 역할을 해야한다.
SSL 통신 순서
1. 클라이언트가 서버에 접속하면 ㅎ서버 인증서(서버의 공개키를 인증기관이 전자서명으로 인증한것)을 전송 받는다.
2. 클라이언트는 받은 서버 인증서를 분석하여 신뢰할 수 있는 인증서 인지를 검토한, 서버의 공개키를 추출한다.
3., 세션키로 사용할 임의의 메시지를 서버의 공개키로 암호화하여 서버로 전송
4. 서버에서는 비밀키로 세션키를 복호화하여 그 키르 ㄹ사용하여 대칭키 암호방식으로 메시지를 암호화, 클라이언트와 통신하게 된다.
구현 소스!!
일단 키 값을 생성을 하여야 한다,
생성한 키는 클라이언트와 서버에 둘다 있어야 한다!!! ㅠ
keytool -genkey -keystore mySrvKeystore -keyalg RSA
서버 소스
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){
}
}
}
이 서버 소스를 컴파일 한후 실행을 하여한다.
만약 그냥 실행을 했을 경우?? ㅎ
이렇게 나와서 실행이 안된다....
java -Djavax.net.ssl.keyStore=생성한 키 -Djavax.net.ssl.keyStorePassword=비밀번호 EchoServer
이렇게 해야 실행이 된다....
클라이언트
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(); } } }
실행
서버와 마찬가지로 해줘야한다...
java -Djavax.net.ssl.trustStore=생성한 키 -Djavax.net.ssl.trustStorePassword=비밀번호 EchoCleint
c출처 : http://stilius.net/java/java_ssl.php
'-컴퓨터 지식 창고- > JAVA' 카테고리의 다른 글
자바에서 생략되어 있는 형태 - 출처 : 열혈강의 JAVA (0) | 2012.02.25 |
---|---|
자바 중첩 클래스 (0) | 2012.02.25 |
keytool를 이용한 키 생성!! (0) | 2011.12.06 |
SSL 서버와 클라이언트 실행시 옵션 귀춘.... 해결 방법 (0) | 2011.11.19 |
Token..... (0) | 2011.07.29 |