'OpenSSL'에 해당되는 글 2건

  1. 2008.08.11 OpenSSL 설치
  2. 2008.08.11 OpenSSL
posted by 동건이 2008. 8. 11. 17:36

OpenSSL 설치

          설치하기 앞서                                            

 개인적인 이유와 업무적인 이유로 OpenSSL을 두번 설치하면서

약간의 어려움을 겪었습니다. 

 OpenSSL을 사용하고자 하시는 분들의 저와 같은 곤란함을 피했으면 하는

바램에 간단하게 적어보려고 합니다.

          설치에 필요한 것들                                      

    1.  OpenSSL Source

 URL : http://www.openssl.org

 위 Site에 Source를 다운받으실수 있습니다.

 완성된 라이브러리가 없는 것은 각 개발환경에 최적화된 라이브러리를

사용하기 위해서라는군요... (누군가 그랬습니다.. f^^;;)


   2.  Perl Interpreter

 URL : http://www.activestate.com/activeperl

Perl 이 설치되어 있어야합니다. 각OS별로 설치 할수 있습니다.

Perl을 사용하여 OpenSSL의 라이브러리 생성환경을 설정합니다.

(아래 보시면 알 수 있습니다.. )


   3. Microsoft DDK

 MS사의 Driver Development Kit 이 설치 되어 있어야 합니다.

Assembler의 사용을 위해서 입니다.

 하지만 msdn.com 에 Microsoft Windows 2000 DDK 가 삭제 되어있습니다.

어딘가 Service pack에 포함되어 삭제했다고 합니다.

(어디에 포함되어 있는지 알수 없습니다.. ㅠ.ㅠ)

하지만 화일 다운로드 사이트에 찾아보시면 Microsoft Windows 2000 DDK를

찾으실 수 있습니다.


   4. C Compiler

 개발용 컴파일러가 설치 되어 있어야 합니다.    당연한거겠죠~~~

여기서 주의 하실점이 컴파일러의 환경변수들이 시스템에 등록이

되어 있어야한다는 것입니다.

헤더, 라이브러리가 있는 경로들이 등록이 되어있어야

OpenSSL을 컴파일할 수 있습니다. (본인은 이걸 몰라 고생했습니다. ㅠ.ㅠ)


          OpenSSL 설치하기                                       

    1. 경로설정

 우선 Microsoft DDK, Perl을 실행시기 위해 경로를 등록합니다.

 Perl은 Windows Installer를 이용하여 설치한경우 경로가 이미 추가되어 있습니다.

Microsoft DDK는 C:\NTDDK 에 설치가 됩니다.(기본설정시)

경로는 C:\NTDDK\bin 입니다.

경로는 환경변수의 시스템 변수에서  추가할수 있습니다.

 [내컴퓨터].등록정보 -> [고급] -> [환경변수] -> [시스템변수] 에서

path를 선택해시고 편집을 합니다. 각 경로의 구분자는 ;  입니다.

          C:\NTDDK\bin   

          C:\Perl\bin

 위의 두 경로가 Path 에 들어가 있어야합니다.


    2. OpenSSL Build

 # OpenSSL  의 소스화일의 경로로 이동합니다.

      C:\openssl>


 # Perl을 실행하여 OpenSSL 빌드 환경을 설정합니다.

      (Visual C++ 사용시)

      C:\openssl>perl Configure VC-WIN32

   실행시키면 환경설정에대한 정보가 출력됩니다.


 # makefile 을 생성합니다.

      C:\openssl>ms\do_masm

    실행시키면 생성되는 makefile들이 출력됩니다.

    그중에 nt.mak 화일을 사용합니다.

   

    C:\openssl>perl util\mk1mf.pl VC-WIN32  1>ms\nt.mak

       (사용할 makefile 입니다.)


  # Build OpenSSL

       C:\openssl>nmake -f ms\ntdll.mak

     실행시키면 소스를 컴파일하고 링크하여,

     out32dll   디렉토리에 라이브러리를 생성합니다.


      C:\openssl\out32dll\libeay32.dll

      C:\openssl\out32dll\ssleay32.dll


     위의 DLL 화일들이 생성됩니다.


   # TEST

      OpenSSL이 정상적으로 Build되었는지 테스트 할수있습니다.

        C:\openssl\ms>test

      실행시키면 테스트가 진행되며

      " passed all tests " 메시지가 출력되면 정상적으로 빌드 된것입니다.

 

          OpenSSL 라이브러리 설치 완료                      


 이제 Windows상에서 OpenSSL을 사용할 수 있습니다.

 OpenSSL을 이용해서 멋진 프로그램 만드시길...

'개발 > 외부 참조 글' 카테고리의 다른 글

SSL 기초  (0) 2008.08.14
tomcat keystore 파일 설정 및 기타  (0) 2008.08.12
OpenSSL 설치  (0) 2008.08.11
JNI  (0) 2008.08.11
자바 리플렉션  (1) 2008.08.11
OpenSSL  (0) 2008.08.11

댓글을 달아 주세요

posted by 동건이 2008. 8. 11. 16:25

OpenSSL

1.     OpenSSL 설치 설정

인증서와 키를 생성하고 관리하는 명령이 각각 openssl , keytool로 서로 다르기 때문에 OpenSSL JDK 를 함께 한 머신에 설치하면 쓰기 편하다.

참고로, 이 예제는 윈도우에서 작업하였으나 리눅스도 동일한 명령으로 작업할 수 있을 것으로 생각한다. 윈도우용 OpenSSL 바이너리 배포판은 많은 곳에서 구할 수 있다. 예제에서 사용한 OpenSSL 바이너리 배포판은 http://www.slproweb.com/products/Win32OpenSSL.html 에서 구했다.) 설치 후에 작업공간을 설정하기 위해 openssl.cnf 파일을 수정할 필요가 있다. 예제에서는 다음과 같이 변경했다.

dir          = ./demoCA          # Where everything is kept

. . .

#new_certs_dir = $dir/newcerts   # default place for new certs.

new_certs_dir = $dir                    # jihoon modified

. . .

#private_key = $dir/private/cakey.pem   # The private key

private_key  = ./private/cakey.pem      # jihoon modified

 

2.     작업 공간 설정

1) 작업 디렉토리를 정하고, 그 디렉토리 아래에다가 openssl.cnf 파일에 지정된 대로 demoCA 디렉토리와 private 디렉토리를 만든다.

2) demoCA 디렉토리 아래에는 index.txt 라는 이름의 빈 파일을 만든다.

3) 역시 마찬가지로 demoCA 디렉토리 아래에 serial 이라는 이름의 파일을 만든다. 이 파일에는 01 을 써둔다. (따옴표는 안 쓴다. ^^;;) 새로 인증서를 추가할 때마다 serial 파일에 번호가 증가하는 것을 볼 수 있다.

 

3.     Root CA (인증기관) 인증서 생성하기

가장 중요한 인증기관 인증서 만드는 부분이다.

 

C:\Programs\OpenSSL\bin\CA.pl –newcert

혹은

C:\Programs\OpenSSL\bin\openssl req -new -x509 -keyout private/cakey.pem -out demoCA/cacert.pem -days 3650

비번을 기억하라.

자체 서명 인증서가 만들어진다. 인증서는 cacert.pem 파일에 저장되고 개인키는 cakey.pem 에 저장된다. 인증기간을 10년 정도로 늘려잡기 위해 CA.pl 명령보다 openssl 명령을 쓰는 것이 더 낫다.

인증기관 인증서를 만들 때 잡다한 것을 입력해야 한다. 이 때, 입력하는 비밀번호는 인증기관 인증서로 새로운 하위 인증서들을 서명할 때마다 물어보기 때문에 반드시 기억해두어야 한다.

 

4.     자바 서버를 위한 KeyStore 만들기

 

서버를 위한 키저장소를 만든다.

C:\Programs\jdk\bin\keytool -genkey -alias server -keystore server.keystore

키 저장소 만들 때 비밀번호를 요구한다. 키저장소에 접근할 때마다 비밀번호를 요구하고 소스 코드에 들어가는 비밀번호 이므로 잘 기억해 둔다.

 

 

앞서 만든 CA (인증기관) 인증서를 키저장소에 넣는다.

C:\Programs\jdk\bin\keytool -import -alias ca -keystore server.keystore -file demoCA\cacert.pem

 

CSR 파일을 만든다. 이 과정은 잘 모르겠다. 어쨌든 이 과정들은 서버 키를 생성하고 인증기관 인증서로 서버 키를 서명하는 과정이다.

C:\Programs\jdk\bin\keytool -certreq -alias server -keystore server.keystore -file server.csr

 

C:\Programs\openssl\bin\openssl ca -in server.csr -out server.pem -keyfile private/cakey.pem -days 3650

Using configuration from C:\Programs\OpenSSL\bin\openssl.cnf

Loading 'screen' into random state - done

Enter pass phrase for private/cakey.pem:

Check that the request matches the signature

Signature ok

Certificate Details:

        Serial Number: 1 (0x1)

        Validity

            Not Before: Feb  7 05:28:33 2007 GMT

            Not After : Feb  4 05:28:33 2017 GMT

        Subject:

            countryName               = KR

            stateOrProvinceName       = Taejeon

            organizationName          = ETRI

            organizationalUnitName    = SOD Team

            commonName                = SOD

        X509v3 extensions:

            X509v3 Basic Constraints:

                CA:FALSE

            Netscape Comment:

                OpenSSL Generated Certificate

            X509v3 Subject Key Identifier:

                61:65:24:F8:F4:72:6A:F4:60:51:74:CC:9A:B6:7C:A5:1C:2C:5F:12

            X509v3 Authority Key Identifier:

                keyid:EC:34:A0:F6:48:F6:F2:73:E3:D9:42:83:6E:22:1B:3E:14:EE:FC:32

 

Certificate is to be certified until Feb  4 05:28:33 2017 GMT (3650 days)

Sign the certificate? [y/n]:y

 

 

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

 

DER 파일을 만드는지 모르겠다. 어쨌든 서버 키를 서버 키 저장소에 넣기 위해 적절한 포맷으로 변환하는 과정인 것 같다. 서버 키를 키 저장소에 넣는다.

C:\Programs\openssl\bin\openssl x509 -in server.pem -out server.der -outform DER

C:\Programs\jdk\bin\keytool -import -alias echoer -keystore server.keystore -file server.der

 

5.     Client 요청 인증서 생성 서명

 

클라이언트를 위한 요청 인증서를 만드는 과정이다. Common Name IP 주소나 도메인 이름을 넣는 것에 주의하라. 일반적으로 웹사이트에서 사용할 인증서라면 해당 웹사이트의 도메인주소를 쓰고, 이메일에 사용할 인증서라면 이메일주소를 넣는다. 인증기간을 10년 정도로 늘려잡기 위해 CA.pl 명령보다 openssl 명령을 쓰는 것이 더 낫다. 

 

c:\programs\openssl\bin\openssl req -new -keyout newkey.pem -out newreq.pem -days 3650

Loading 'screen' into random state - done

Generating a 1024 bit RSA private key

...................++++++

..........++++++

writing new private key to 'newkey.pem'

Enter PEM pass phrase: # 비밀번호는 클라이언트 C 소스에서 쓴다.

Verifying - Enter PEM pass phrase:

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [AU]:KR

State or Province Name (full name) [Some-State]:Taejeon

Locality Name (eg, city) []:Taejeon

Organization Name (eg, company) [Internet Widgits Pty Ltd]:ETRI

Organizational Unit Name (eg, section) []:SOD Team

Common Name (eg, YOUR name) []:SOD

Email Address []:

 

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:   #뭔지 몰라 그냥 넘어감

An optional company name []:

Request is in newreq.pem, private key is in newkey.pem

 

이렇게 하면 인증요청서 newreq.pem 파일과 개인키 newkey.pem 파일이 생성된다.

 

아래와 같이 인증요청서 newreq.pem 파일을 서명한다.

c:\programs\openssl\bin\openssl ca -policy policy_anything -out newcert.pem -infiles newreq.pem

 

6.     인증서 배포

client.pem 이라는 이름의 빈 텍스트 파일을 만든다.

newkey.pem PRIVATE KEY- 부분을 복사하여 client.pem 파일에 붙인다. 그 아래에

newcert.pem CERTIFICATE 부분을 복사하여 client.pem 파일에 붙인다.

client.pem 은 대략 아래와 같은 형태이다.

-----BEGIN RSA PRIVATE KEY-----

Proc-Type: 4,ENCRYPTED

DEK-Info: DES-EDE3-CBC,7F9D0116F7845BB6

 

MxUNQl3xyTsXS+NxiA51NAZtSENRT5y6A9mQcCrJQFspZSfBH3rquCHdWTxC7ch4

Ow3dCD4hvWSFh6/rtMPgQqK98/DcRg+nm4FKHveGymd7bH/qGiL0JQOy7c9I6Wdv

. . .

2Cp4xwwh8XWZMV6biO1P03T5dGj7aEMy1JqhNVe0XYPIch3SXDZFaAtpqyFDEOie

9jx/aDN284kOocBO8UoHB4fMVtg7crKDXxg7yrI8FhMp3aK7VhIULg==

-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----

MIICvzCCAiigAwIBAgIBCDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJLUjEQ

MA4GA1UECBMHVGFlamVvbjEQMA4GA1UEBxMHVGFlamVvbjENMAsGA1UEChMERVRS

. . .

jYSNWqxCWIZl6AkJOF/kRGZJaRkvcfVjbixxZ95MDZhCEtj6CiQQP5TIYuX5mmI0

4Z/xyt5S7n/Eda0MHqt1om47IhwZZNTORSVsFBTIstOtNFM=

-----END CERTIFICATE-----

 

 

앞서 만든 client.pem 파일과 인증기관 인증서 (demoCA/cacert.pem)를 클라이언트에 복사하여 사용한다.

서버에는 키저장소 파일(server.keystore)만 있으면 된다.

 

 

 

7.     참고 사이트

http://wiki.kldp.org/wiki.php/DocbookSgml/SSL-Certificates-HOWTO

http://www.yorku.ca/dkha/docs/jsse_cert/jsse_cert.htm

http://www.linuxjournal.com/article/4822 

'개발 > 외부 참조 글' 카테고리의 다른 글

JNI  (0) 2008.08.11
자바 리플렉션  (1) 2008.08.11
OpenSSL  (0) 2008.08.11
GC 튜닝에 대한 의견들  (0) 2008.02.20
JVM 메모리 관리  (0) 2008.02.20
JVM GC와 메모리 설정  (0) 2008.02.20

댓글을 달아 주세요