My PROJECT/1st project2011. 9. 27. 11:07

OpenSSL로 인증서 생성 및 변환 간략 정리  개발 스토리 

2009/07/27 15:45

복사http://blog.naver.com/leeyc09/30061409971


OpenSSL로 인증서 생성 및 변환 간략 정리

기술 이야기 2008/08/29 11:43
테스트 용도 및 내부 어플리케이션 사용 용도라면 굳이 돈주고 Verisign 인증서 같은걸 사서 쓸 필요 없이 간단히 OpenSSL로 만들어 사용하는 것도 좋은 방법이지요. 

인증서란 것이 발급한 기관이 어디냐에 따라서 브라우저 같은 Application에서 그냥 넘어가느냐 못믿을 놈이니 확인해라 라는 컴플레인을 하거나의 차이일 뿐 표준에 따라 만드는 것이라 다를 것이 없으니까요....

OpenSSL로 인증서 생성 및 변환하는 것을 아주 간략히 정리해봅니다. 
OpenSSL을 설치하면 openssl 이라는 이름의 실행파일이 있으며 이는 OpenSSL 패키지에 대한 데모 및 샘플 코드 제공, 각종 암호키에 대한 변환 등의 기능을 제공하는 툴입니다. 
이 툴로 사실 우리가 필요로 하는 거의 대부분의 키 핸들링이 가능하다고 볼 수 있습니다.


1. Demo CA 설정
- 현재 디렉토리에 demoCA 디렉토리 생성 : mkdir demoCA
- demoCA 디렉토리 안에 시리얼 파일 생성 : serial 이란 이름의 text 파일에 00 을 적는다.
- index 파일 생성 :  index.txt 란 이름으로 빈 파일을 만든다.

2. CA 인증서 생성
- CA 개인키 생성 :  openssl genrsa -des3 -out ca.key 1024 
- Self-Signed CA 인증서 생성 :  openssl req -new -x509 -days 365 -key ca.key -out ca.crt 

3. 하위 인증서 생성 (예: HTTPS Web 서버용..)
- server 개인키 생성 : openssl genrsa -des3 -out server.key 1024 
- server 인증서 발급을 위한 요청파일 생성 : openssl req -new -days 365 -key server.key -out server.csr
- server 인증서 발급 : openssl ca -in server.csr -out server.crt -keyfile ca.key -cert ca.crt -outdir .

위 작업의 결과로 server.crt 라는 server용인증서가 생성되고 index 파일에 발급내역이, serial이 16진수로 1씩 증가한다.

4. 인증서 인코딩 포멧 변경
- openssl 이 생성하는 인증서의 인코딩은 발급 시 옵션을 주지 않으면 디폴트가 PEM (base64 encoding)이다.
- Java 등에서 사용하기 위한 DER 포맷(바이너리)으로 변경은 다음과 같이 수행한다.
   : openssl x509 -in ca.crt -out ca.der -outform DER

5. 인증서 내용 보기
- openssl x509 -in ca.crt -text   (PEM 포맷인 경우)
- openssl x509 -in ca.der -inform DER -text (DER 포맷인 경우)
================================================================================================================

------------------------------------------------------------------------------------------

CA 개인키 생성
openssl genrsa -des3 -out ca.key 1024

CA csr 키 생성
openssl req -new -key ca.key -out ca.csr

Root CA 인증서 생성 
openssl x509 -req -days 1280 -in ca.csr -signkey ca.key -out ca.crt

개인키에서 패스워드 삭제하기 
openssl rsa -in ca.key -out ca_key.pem

------------------------------------------------------------------------------------------

Server 개인키 생성
openssl genrsa -des3 -out server.key 1024

Server csr 키 생성
openssl req -new -key server.key -out server.csr

Server 인증서 생성
openssl x509 -req -in server.csr -out server.crt -signkey server.key -CA ca.crt -CAkey

ca.key -CAcreateserial -days 365

개인키에서 패스워드 삭제하기 
openssl rsa -in server.key -out server_key.pem

------------------------------------------------------------------------------------------

Client 개인키 생성
openssl genrsa -des3 -out client.key 1024

Client csr 키 생성
openssl req -new -key client.key -out client.csr

Client 인증서 생성
openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA server.crt -CAkey

server.key -CAcreateserial -days 365

개인키에서 패스워드 삭제하기 
openssl rsa -in server.key -out server_key.pem

------------------------------------------------------------------------------------------

crt->der 포맷변경
openssl x509 -in ca.crt -out ca.der -outform DER

pem->der 포맷변경
openssl x509 -in demoCA/cacert.pem -outform DER -out cacert.der

der->pem 포맷변경
x509 -in cert.cer -inform DER -out cert.pem -outform PEM

인증서 확인
openssl x509 -noout -text -in client.crt

비밀키 보기
openssl rsa -noout -text -in server.key

openssl 설치완료 확인
httpd -t

pfx 변환
openssl pkcs12 -export -in client.crt -inkey client.key -certfile ca.crt -out bundle.p12

pfx에서 키 추출
OpenSSL> pkcs12 -in filename.pfx -nocerts -out key.pem

pfx에서 인증서 추출
OpenSSL> pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem

라디우스 실행
/usr/local/sbin/radiuse -x

------------------------------------------------------------------------------------------

인증에 사용될 파일 6개
ca_key.pem ca.crt
server_key.pem server.crt
client_key.pem client.crt

출처 : Tong - ssabro님의 Hacking & Security통

'My PROJECT > 1st project' 카테고리의 다른 글

프로젝트에 필요한 cgi 에 대한 개념 잡기  (0) 2011.09.03
우분투에서 apm 설치하기  (0) 2011.08.03
SNMP  (0) 2011.07.09
APACHE 란  (0) 2011.07.07
1. 시스템 모니터링 교수님 질문내용-답변  (0) 2011.07.07
Posted by babuzzzy
My PROJECT/1st project2011. 9. 3. 00:43

우선 웹서버는 동적인 컨텐츠를 생성하지 못하는데요,

 
이 말은 클라이언트가 요청한 페이지는

웹서버가 이미 따로 존재하고 있던 웹 페이지를 리턴하는 것이란 말이며,

동시에 동적으로 존재하지 않았던 페이지를 만들어서 제공하지는 못한다는 말입니다..

또한 서버상에서 데이터를 저장하는 일조차 하지 못합니다.

그래서 이러한 일들을 수행하기 위해 웹서버는 다른 애플리케이션에게 도움을 요청하게 되고

이러한 일들을 하는 프로그램을 CGI프로그램이라 하는데,

사용자가 서버에게 웹페이지를 통한 요청이 있었을 때,

그것이 응용프로그램에 의해 처리 될 필요가 있다면

서버가 응용프로그램을 실행시키고 필요한 메시지를 받는다.

이 때 서버와 응용프로그램 사이에 데이터를 주고 받기 위한 표준화된 방법을 CGI라고 합니다.

 

CGI프로그램은 보통 펄 스크립트와 파이썬, PHP같은 언어로 작성하게 됩니다.

CGI는 Common Gateway Interface의 약자인데요,

웹서버는 GET혹은 POST방식으로 넘어온 파라미터들을 이러한 CGI프로그램에 넘겨주게 되고

CGI프로그램은 이러한 정보를 가지고 웹 페이지를 만들어 웹서버에게 넘겨주고,

또다시 웹서버는 이 페이지를 클라이언트에게 넘겨주게 됩니다.

이렇게 생성된 페이지는 웹서버입장에서는 정적인 페이지이기 때문에 ,

웹서버는 실질적으로는 동적인 컨텐츠를 만들지 못함에도 불구하고

클라이언트입장에서는 동적인 페이지를 보내는 것처럼 보이게 되는것입니다.
이러한 CGI프로그램과 비슷한 역할을 하는 것이 서블릿입니다.

'My PROJECT > 1st project' 카테고리의 다른 글

openssl 생성 및 간략 정리  (0) 2011.09.27
우분투에서 apm 설치하기  (0) 2011.08.03
SNMP  (0) 2011.07.09
APACHE 란  (0) 2011.07.07
1. 시스템 모니터링 교수님 질문내용-답변  (0) 2011.07.07
Posted by babuzzzy
My PROJECT/1st project2011. 8. 3. 14:16
1. 아파치 설치
 sudo apt-get install apache2



2. 아파치와 mysql 연동
sudo apt-get install libapache2-mod-auth-mysql

3. DBMS 인 MYSQL 설치
sudo apt-get install mysql-server mysql-client 
(mysql 비밀번호 설정)

4. php5 설치
apt-get install php5-common php5 libapache2-mod-php5
 

5.  php5와 mysql 연동
sudo apt-get install php5-mysql


6. 서버 재시작
sudo /etc/init.d/apache2 restart

7. mysql 서버가 정상적으로 동작하는지 알아보기
sudo netstat -tap | grep mysql

tcp 0 0 localhost.localdomain:mysql *.*LISTEN 이라고 뜨면 정상


8. 웹서버가 정상적으로 동작하는지 테스트
sudo vi /var/www/phpinfo.php

<?php
print_r(phpinfo());
?>

www.localhost/phpinfo.php 실행시 
it works 라고 뜨면 정상


var/www 폴더가 내가 개발할 홈페이지의 기본폴더




 

'My PROJECT > 1st project' 카테고리의 다른 글

openssl 생성 및 간략 정리  (0) 2011.09.27
프로젝트에 필요한 cgi 에 대한 개념 잡기  (0) 2011.09.03
SNMP  (0) 2011.07.09
APACHE 란  (0) 2011.07.07
1. 시스템 모니터링 교수님 질문내용-답변  (0) 2011.07.07
Posted by babuzzzy
My PROJECT/1st project2011. 7. 9. 05:15


SNMP는 간단한 네트워크관리를 위한 규칙(Simple Network Management Protocal)
의 약자이다 
말그대로 네트워크관리를 위한 용도로 사용되는 규칙이다

SNMP가 쓰이기 전에 일반적으로 사용되는 네트워크 관리는 PING과 같은 
ICMP에 의존했었다
이는 통신의 응답속도 정도만 알수 있는 간단한 것이었다
그러나 인터넷의 사용의 보편화와 네트워크에 연결된 컴퓨터 수의 증가로
네트워크가 복잡해졌다.
이에 ICMP만으로는 이러한 네트워크의 관리를 효율적으로 할수 없게 되었다.


어쨋든 SNMP는 거의 대부분의 운영체제에서 사용되어 지고 있다.

활용용도

SNMP 를 이용하여 할수 있는 것들

네트워크 구성관리 : 네트워크 상의 호스트들이 어떤 구조를 이루고 있는지 지도를 그리는게 가능하다
성능관리 : 네트워크 사용량 에러량 처리속도, 응답시간 등 성능 분석에 필요한
통계정보를 얻어 낼수 있다.

장비관리     :    SNMP의 주목적이 네트워크 관리 이기는 하지만 SNMP 특유의 유연한
확장성을 이용하여 시스템정보(CPU, MEMORY, DISK 사용량)의 정보를 얻어올수 있도록 
많은 부분이 확장 되었다. 
이정보는 네트워크 문제를 해결하는데 큰도움을 준다.

보안관리 : 정보의 제어 및 보호기능 , 최근 버전인 SNMP3는 특히 정보보호를 위한
기능이 향상되었다
Posted by babuzzzy
My PROJECT/1st project2011. 7. 7. 02:14
웹서버와 아파치 는 뭘까?

무료 홈페이지에 계정을 만들어서 홈페이지를 운영할때
HTML문서가 잘못되면 다운받아서 수정하고 또 업로드하고 정말 귀찮은 일이다
해본 사람들은 알것이다
하지만 요즘은 웹서버를 구축하지 않고 무료홈계정으로만 홈페이지 하는 사람은 없을 것이다.

그럼 이럴때 리눅스 서버에 웹서버를 구축해서 테스트 해보는것이다 
아파치를 이용해서 전 세계에 공개하기 전에 랜 환경으로 홈페이지를 테스트해 보는 것이다



웹서버 란

웹 서버는 웹 서비스를 하는 컴퓨터입니다. 
인터넷을 하는데 필수 조건이 웹 브라우져 이다
인터넷 익스프롤러든 넷스케이프 네비케이더든지 웹브라우저가 있어야 인터넷을 항해할수 있다.

이 익스프롤러로 가고자는곳이 웹 서버다
우리가 웹 브라우저의 주소 www.yahoo.co.kr 이라고 입력하면 웹 브라우저는 이 주소에 해당하는
웹 서버에게 가서 서비스를 달라고 한다.

그러면 그 요청을 받은 웹 서버는 클라이언트에게 서비스를 해주는 것이다
덧붙여서 HTTP(Hyper Text Transfer Protocol)에 대해서 얘기하면 웹 브라우저의 주소를 입력하는 창을 
 자세히 보면 www.yahoo.co.kr 이라고 입력하기전에 앞서 http://라는 것이 붙는다

즉 웹 브라우저는 해당 주소의 웹 서버에게 http라는 프로토콜로 서비스를 요청한다는 것이다


우리가 인터넷을 사용할 때 간단하게 주소만 입력하면 그 주소에 해당하는 컴퓨터의 웹 서버가 반응해서 
웹 브라우저에 웹 문서를 보여 준다는 것을 좀더 구체적으로 알아본 것 뿐이다

아파치 란 
 

세계에서 가장 잘 나가는 웹 서버의 하나이다. 가장 잘 나간다는 말은 곧 많은 사람들이 애용한다는 뜻이다
위에서 계속 이야기한 웹서버(웹서비스를 제공하는 컴퓨터)중의 하나 라는것이다.
아파치 웹서버가  최고로 인기가 있는 이유는 공짜라는 것 뿐 아니라, 다른 상용 웹 서버에 못지 않은
성능과 안정성, 그리고 지속적인 업그레이드 서비스를 제공해 준다는 점 등을 들 수 있습니다
우리가 설치하려는 리눅스용 아파치 외에도 마이크로소프트의 서버 운영체제인 윈도우 NT, 심지어 윈도우 95
용으로도 베타 버전이 나와 있다는 것은 운영체제를 막론하고 폭럽은 사랑을 받고 있는걸 입증한다.



  
Posted by babuzzzy
My PROJECT/1st project2011. 7. 7. 01:06
질문 1
자료 검색을 하던중 SNMP 를 이용한 간단한 시스템 모니터링 툴에 대해 읽어보았는데
여기서 PHP로 SNMP값을 가져오는것을 읽어봤습니다 

예를들어 현재 서버의 어떤 포트에 TCP 연결이 확인하기 위해서 리눅스에서 
netstat 명령으로 확인할수 있는데 이값을 snmp로 가져옵니다
즉 , PHP 에서 SNMP 함수를 호출함으로서 시스템의 CPU,메모리 값을 가져온다고
설명이 되어있습니다

그러면 실제로는 
시스템 관리를 위해 명령어의 결과를 화면에 띄우는게(결과값을 보내는게) 아니라  
PHP기반의 서버에서 SNMP기반으로 결과값을 호출하는건가요?


mrtg(멀티 라우터 트래픽 그래퍼)라는 툴이 있음.
이툴은 장비(보안스위치나 방화벽, ips 등의 보안과 관련된 장비의 MIB의 OID값을 SNMP프로토콜을 이용하여 
가지고오는데 이 OID값에는 CPU상태, 네트웍 흐름 상태, TCP Connnetssion의 갯수, memory 사용량등을 가지고 올수 있으며
이렇게 가지고온 값을 my-sql에 저장한후 이 데이터를 php로 화면을 구성한 웹 페이지에 실시간으로 보여주게 되는데
mrtg는 이러한 수치 데이터를 그래프 형식으로 보여주는 툴임.


질문 2 
로그란 시스템에 접속한 사용자들의 행위들을 저장해 놓은 기록이라고 배웠습니다
즉 시스템에서 작동된 모든 현상들이 저장되어 있는 것이 로그인데 
만약그렇다면 질문1에서처럼 php기반 서버에서 SNMP 기반으로 결과값을 호출할때 
SNMP가 로그값를 호출하는건가요?  네 ... 맞고요
이야기 한데로 mib값을 가지고 옵니다. php는 보여주는 웹의 구현언어이고 snmp는 이 값을 가지고 올 수 있는 
상호 규약의 프로토콜입니다.




질문 3
저의 상황에서라면  제가 저장해놓은 명령어로 시스템에서 실행을 하고 다시 실행결과값을 추출하는건데
이거의 역할은 어떤 프로그램이 담당하나요 WAS 가 알아서 해주나요?



질문 4
 만약 그렇다면 제가 해야하는 프로젝트가 이 SNMP를 이용하여 
프로젝트를 한다면 SNMP를 이용해서 cpu,메모리, Load averages 값들 말고도 
제가 원하는 명령어의(ex who ps, top  등) 결과값을 가져올수 있습니까?
아니요! 본 프로젝트는 mib값을 snmp프로토콜로 가지고오는 것이 아닌...
서버 상의 명령어를 스크립트언어로 미리 작성하여 복수의 명령어를 실행하도록 짜고 이후 이 스크립트 파일을 
웹에서 예를 들수 있는 서버의 ip 203.345.220.64를 입력시 복수의 명령 스크립트가  동작하게 되고  실행결과를
웹에 뿌려주는 프로젝트 입니다.




질문 5
 JMX는 Java Management Extension으로 
 정의가 어플리케이션과 서비스를 관리하고 감시하기 위한 표준인데
SNMP는 Simple Network Management Protocal 로서
 간단한 네트워크관리를 위한 규칙으로 알고있습니다 
시스템 모니터링 개발을 할때 SNMP 도 사용할수 있고 JMX를 이용할수가
있다 하는데 두개의 차이가 무었인지 알고싶습니다 
JMX와 SNMP 에대한 정의에 대해 자료를 읽어봤는데 무엇을 의미하는건지 감이 잡히지 않습니다.

java로 이루어진 것이지만 해당 내용은 프로젝트와 관련이 없음.


질문 6 PHP 기반에서 SNMP 함수를 이용한다고 했는데 JMX 역시 함수가 있나요?
그함수를 이용해서 값들을 호출하는건가요?

프로젝트를 2가지중 한가지만 선택하는게 좋은듯함
1. mrtg와 같이 snmp프로토콜을 이용하여 시스템및 네트워크의 자원을 보여줄것인지
2. 서버의 명령어를 스크립트화 하여 웹에서 스크립트 파일 실행시 스크립트안의 명령어를 동작하게 하고 웹에 쁘려 줄것인지

질문 7
리눅스 상에서 아파치로 웹서버를 구현할때 웹로직 즉 was를 이용해야하나요?
was는 웹어플리케이션 서버의 약어로 웹에 접속하는 사용자가 너무 많아 데이터베이스에서 처리하기 힘들고 db가 다운될수 있기때문에
들어오는 동시 접속자를 분산하거나 시간차를 두어 db에 들어오게 함으로써 가용성을 늘려주는 일종의 어플이케이션임
예로 tmax 소프트의 jues와 webtob을 들수 있음. 요즘 제니퍼라는 웹 동시접속 부하분산 프로그램도 나와있음

그냥 웹서버를 이용할때와 was 를 이용하면 여러가지 프로그래머입장에서 편하다고 
알고있는데요. 어떤면이 편한지 그리고 시스템 모니터링을 할때
꼭 was를 써야하는지 궁금합니다

모니터링시 was사용하면 당근 좋음
그러나 프로젝트를 함에 있어 그렇게 많은 사용자가 붙을리 만무함.(동시접속자가 엄청나야&&****)

질문8 실시간으로 웹서버에서 값을 추출하여 모니터링 할때는 
어떤 특정 함수를 이용하는 건가요 아님 특정  프로그램이 있는건가요


웹서버의 값이라고 하니... 굉장히 광범위함
내생각에는 로그를 이야기 하는듯함
var/log/http로그가 있음
내용은 해당 사용자의 접속내역과 페이지리뉴얼의 수등 많은 정보의 웹로그가 있음.
웹서버에서 값을 추출한다는 아마도 웹서버가 os(리눅스나 솔라리스 윈도우라는 os 가 깔려있다는 가정하에)올려지는
게 웹서버임 웹서버는 apache, iis등이 있음


본 프로젝트 수행시 apache에 대한 이해와 구동, 설치, 로그 확인 등의 사전 지식이 필요하므로
apache에 대한 정보수집후 서버구축하고 apache 설치하고 웹로그가 쌓이는 티렉토리를 추가적으로 확인하면됨.




'My PROJECT > 1st project' 카테고리의 다른 글

openssl 생성 및 간략 정리  (0) 2011.09.27
프로젝트에 필요한 cgi 에 대한 개념 잡기  (0) 2011.09.03
우분투에서 apm 설치하기  (0) 2011.08.03
SNMP  (0) 2011.07.09
APACHE 란  (0) 2011.07.07
Posted by babuzzzy