java -Djavax.net.ssl.trustStore=생성한 키 -Djavax.net.ssl.trustStorePassword=비밀번호 EchoCleint

이렇게 써야 실행을 할 것을!!!! 간단하게 하는 방법이 있다.!! ㅎ

서버와 클라이언트에 각각 메인 첫 부분에다가

System.setProperty("javax.net.ssl.trustStore", "키가 있는 경로");

System.setProperty("javax.net.ssl.trustStorePassword","생성한 키 비밀번호");

 
이런식으로 해주면 된다!! ㅎ 

서버도 마찬가지로 해주면 될듯싶다ㅏ..

이 코드가 생성자에서 먹힐 줄 알았는데 안 먹힌다..... -ㅁ- 

'-컴퓨터 지식 창고- > JAVA' 카테고리의 다른 글

자바에서 생략되어 있는 형태 - 출처 : 열혈강의 JAVA  (0) 2012.02.25
자바 중첩 클래스  (0) 2012.02.25
keytool를 이용한 키 생성!!  (0) 2011.12.06
Java + SSL 구현  (0) 2011.11.19
Token.....  (0) 2011.07.29
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. 서버에서는 비밀키로 세션키를 복호화하여 그 키르 ㄹ사용하여 대칭키 암호방식으로 메시지를 암호화, 클라이언트와 통신하게 된다. 


구현 소스!!
일단 키 값을 생성을 하여야 한다,
생성한 키는 클라이언트와 서버에 둘다 있어야 한다!!! ㅠ
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
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down 
Unable to open logs
 Action 'start' failed.
The Apache error log may have more information.   

아파치를 다시 실행을 시키면 위와 같은 에러 메시지를 뱉어 낸다...
아파치 데몬이 아직 살아 있기 때문이라고 다른 사람들이 그런다... 

해결 방법은::? 

netstat -nlp 
를 통해서 80포트를 사용하고 있는 프로세스의 PID를 찾아서 죽여주면 된다 .ㅋ

  kill -PID번호 PID 

이렇겧하면 실행이 ㅎ된다. ㅎ 
 
오랜만의 블로깅!! ㅋ
우연히 알게 된 adduser!!! 우분투에서 2개의 명령어가 존재하는데 여기서!!! 둘다 비슷한 기능을 하게 되는데 미묘한 차이가 있다.
일단 useradd로 하게 되면 순수 계정만 생성하게 되고 홈폴더 생성과 비밀번호 생성은 따로 사용자가 따로 해줘야 하는 구조이다. 
하지만 adduser인 경우에는 비밀번호, 홈폴더, 계정정보 입력을 자동<?>으로 해준다...




위의 그림을 보면 차이를 알 수 있다...

결론은 똑같은 계정을 생성하는 명령이다.... 또 다른 것이 있다. 바로 실행되는 셸 종류가 들리타


로그인을 했을때의 셸의 형태이다. useradd인경우 기본셸인 sh이고 오른쪽 adduser인 경우 bash가 실행이 된다...


/etc/passwd 안의 내용을 보게 도면 정확한 차이를 알 수 있다..

그리고 리눅스를 잘 아시는 분에게 질문 했을때 받았던  메일의 내용입니다.

로우 레벨이란건 운영체제 커널하고 통신하는 걸 이야기 하고 그러므로 기본 명령어는 useradd가 되고 이 명령어로 사용자를 생성하면 기본 셸인 sh가 그 사용자에 할당되는 거다. 

Adduser의 경우는 내부적으로 useradd 명령어를 이용하는 명령으로 사용자가 설정한 기본 셸을 새로운 사용자의 셸로 지정해 주고 사용자 디렉토리도 만들어 준다. 

이해를 쉽게 하기 위해서 예를 들어 superadduser와 같은 명령어도 있는데 이것은 인터렉티브하게 사용자를 생성해 준다. 설치해서 써보면 이해할거다. 마찬가지로 useradd 명령어를 내부적으로 이용하여 여러가지 옵션을 쉽게 설정할 수 있는 일종의 wrapper 프로그램이지. 

뭐 결론은 자기가 편한거 쓰심 됩니다 ㅋㅋㅋ
/etc/network/interface 를 수정해야함

auto eth0
iface eth0 inet static
address xxx.xxx.xxx.xxx
netmask xxx.xxx.xxx.xxx
gateway xxx.xxx.xxx.xxx



DNS 설정방법
etc/reslov.conf
nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx


둘다 무조건 재 시

public class tester{

public static void main(String[] args) {

int a =0;

String temp = "50^ABCD^20071016";

StringTokenizer token = new StringTokenizer(temp,"^");

a = token.countTokens();

for (int i = 0; i < a; i++) {

System.out.println(token.nextToken());

}

}

}

결과화면 :



==========================================================================================

public class tester{

public static void main(String[] args) {

int a =0;

String temp = "50^ABCD^20071016";

StringTokenizer token = new StringTokenizer(temp,"^",true);

a = token.countTokens();

for (int i = 0; i < a; i++) {

System.out.println(token.nextToken());

}

}

}

결과화면

 



색칠해져 있는 부분만 차이가 있다.... ㅋㅋㅋ

위에꺼는 구분자를 없애는 것이고 아래 것은 구분자 포함이라는데;;; 자세한건 패스 ㅋ


 

몰랐는데 라이언에서 넘어오면서 User안에 잇는 Library 폴더가 숨겨져 있다고 하더군요;;;;

-ㅁ-ㅋㅋㅋ 젠장 이것땜에 삽질 많이 했네!!!

터미널에서~~(chflags nohidden ~/Library/)


 이렇게 입력 하면 나타남돠!!ㅋㅋ

다시 숨기고 싶을때는 nohidden 대신에 hidden으로 해줌 됩니다.!!!ㅎ 

* 여기서 chflags???

chflags는 해당 파일의 모드(속성)를 변경해주는 명령어 같습니다...

어떤 곳에는 읽기 저용으로 번경이라는데;;; 흠?? 속성을 변경하는거 같네요~
FreeBSD에서도 사용가능하답니다..
 

'-컴퓨터 지식 창고- > MAC' 카테고리의 다른 글

맥에서 특정 어플리케이션 언어 국가 변경 방법  (0) 2012.10.03
Xcode 삭제법!!  (0) 2011.07.27
MAC OSX 클린설치  (0) 2010.11.02
아놔 ㅋㅋ 밤에 켜놓고 설치를 했는데 ㅋㅋ 이런 젠장 ㅋㅋㅋ 작동하지 않은 아이튠즈 때문에 설치 중단?? ㅋ 장난? ㅋㅋ 그래서 강제 종료 시키고 다시 설치 할라 했더만 ㅋㅋ이상하게 업데이트란 글자만 나오고 해서 ㅡㅡ 걍 삭제하기로 결심 ㅋㅋ

Xcode 삭제법 ㅋㅋ 터미널에서

sudo /Developer/Library/uninstall-devtools --mode=all

이라고 치면 삭제 가능!!! ㅋㅋ 그래서 지금 재 설치중 ㅠㅠ 
*아직 본인도 테스트를 해보지 못했음....

for F in /*.확장자 ; do iconv -c -f utf-8 -t euc-kr $F > $F.tmp && mv $F.tmp $F ; done



출처 : http://theeye.pe.kr/entry/LINUX-서버의-파일-인코딩-한번에-바꾸기-iconv-한번에-적용 
 
$sudo useradd -m ID
$sudo passwd ID
$비밀번호 입력
$비밀번호 확인


이렇게 하면 된다네요???;;;; -ㅁ-;;;

참고로 우분투 입니다. 옵션에 -m은 자동으로 홈 폴더를 생성하는 부분입니다. 

+ Recent posts