database.sarang.net
UserID
Passwd
Database
ㆍDBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DBMS Tutorials 601 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 601
OpenSSL(SSLeay) Simple CA Usage
작성자
정재익(advance)
작성일
2002-10-16 09:56
조회수
8,311

OpenSSL(SSLeay) Simple CA Usage

 

원본출처 : http://gridtest.hpcnet.ne.kr/doc/openssl_ca_usage.html

작성자: 김상완(sangwan@hpcnet.ne.kr)

날짜: 2002-04-09

 

이 문서는 OpenSSL (또는 SSLeay) 패키지에 들어 있는 인증서 발급 및 관리 기능을 사용하는 방법을 설명한다.

 

목차

 

1. 최초의 CA를 만들기

2. CA인증서를 globus 인증서 디렉토리에 추가하기

3. 인증요청서에 서명하기

 

 

OpenSSL은 Eric Young 이라는 사람이 만든 SSLeay 라이브러리를 공개소스화 한 것으로써, 그 기능이나 구성에서 SSLeay와 거의 차이점이 없다.

2002년 4월 현재 OpenSSL 최신버젼은 0.9.6이다.

OpenSSL(SSLeay)은 SSL(Secure Socket Layer)을 사용하는데 필요한 기능을 구현해 놓은 라이브러리이면서 동시에 그 라이브러리의 기능을 이용할 수 있는 컴맨드라인 명령어를 제공한다. OpenSSL의 컴맨드라인 명령어의 이름은 openssl이고, SSLeay의 경우는 ssleay이다. 이 문서에서는 편의상 OpenSSL 로 통일하여 사용하도록 한다.

 

OpenSSL을 일반적인 소스 컴파일 과정에 의해 설치하면, 설치 디렉토리아래에 CA.sh 라는 스크립트가 존재하는데, 이것은 가장 간단한 CA(Certificate Authority) 의 기능을 수행할 수 있도록 해 주는 간단한 쉘 스크립트이다.

스크립트 내에서 openssl의 여러 가지 기능이 호출되어 사용된다.

따라서, openssl이 현재 쉘의 PATH 환경변수에 등록이 되어 있어야 한다.

 

 

1. 최초의 CA를 만들기 [[목차]]

 

CA 기능을 사용하기 위해서는 최상위 CA를 만들어야 한다.

 

임의의 작업 디렉토리로 이동한다.

 

# cd /path/to/any_temporatory_directory

 

또는 홈디렉토리에 CA라는 디렉토리를 만들어 사용한다.

 

# cd ~ ; mkdir CA ; cd CA

 

설치 디렉토리의 openssl.cnf 화일이 환경 설정을 위한 목적으로 사용된다.

인증서 Subject 의 DN(Distinguished Name)을 정의 하는 부분도 포함되어 있다.

 

# vi /usr/local/openssl/lib/openssl.cnf

 

새로운 CA를 만들려면 CA.sh 스크립트를 -newca 옵션을 주어 실행한다.

 

# sh /usr/local/ssl/bin/CA.sh -newca

CA certificate filename (or enter to create)

;(Press Enter to use default value)

Making CA certificate ...

; openssl is called here as follow from CA.sh

; openssl req -new -x509 -keyout ./demoCA/private/./cakey.pem \

; -out ./demoCA/./cacert.pem -days 365

Using configuration from /usr/local/ssl/lib/ssleay.cnf

Generating a 1024 bit RSA private key

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

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

writing new private key to './demoCA/private/./cakey.pem'

Enter PEM pass phrase: ; CA 비밀번호

Verifying password - Enter PEM pass phrase: ; CA 비밀번호

-----

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.

----- ; CA's Information

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

State or Province Name (full name) [Some-State]:STATE ;(null in Globus, enter '.')

Locality Name (eg, city) []:LOC_NAME ;(null in Globus, enter '.')

Organization Name (eg, company) [Internet Widgits Pty Ltd]:ORG_NAME ;(Globus)

Organizational Unit Name (eg, section) []:OU ;(null in Globus, enter '.')

Common Name (eg, YOUR name) []:CA_NAME ;(enter the CA's name)

Email Address []:WHO@WHERE ;(null in Globus, enter '.')

#

 

openssl.cnf 화일에서 [req_distinguished_name] 부분에 DN을 구성할 정보들에 대한 설정을 할 수 있다. 프롬프트, 기본값, 최소, 최대값등으 설정할 수 있다. 자세한 것은 openssl.cnf 화일을 참조하기 바람.

 

이상 실행결과 CA의 키와 인증서가 생성된다.

현재 디렉토리에 demoCA라는 디렉토리가 만들어지고, 이 디렉토리 아래에

화일이 생성되어 있을 것이다. CA의 키화일은 demoCA/private/cakey.pem이고, CA의 인증서 화일은

demoCA/cacert.pem 이다. CA의 키 화일은 다른 사람이 볼 수 없도록

위 과정에서 입력한 비밀번호로 암호화 되어 있는데, cakey.pem 화일에서

 

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

Proc-Type: 4,ENCRYPTED

DEK-Info: DES-EDE3-CBC,0F72CE690870F16D

 

부분이 키를 암호화 하는데 사용된 암호화 알고리즘에 대한 정보를 나타낸다.

 

CA.sh -newca 명령은 내부적으로 다음과 같은 openssl 명령이 호출되어 수행되는데,

 

# openssl req -new -x509 -keyout ./demoCA/private/cakey.pem \

-out ./demoCA/cacert.pem -days 365

 

openssl은 컴맨드라인 명령어이고, 'req'는 X.509 형식의 인증 요청서(Certificate Signing Request)를 관리하기 위한 openssl의 내부 명령어이다.

CA 인증서는 CA 자기 자신의 인증요청서에 자신이 스스로 서명한 것이다.

 

 

CA 인증서의 내용을 확인하려면, openssl x509 명령을 이용한다.

-in 옵션 다음에 인증서화일의 화일명을 써 주면 된다.

다음에서 확인할 수 있듯이 Issuer와 Subject가 동일함을 알 수 있다.

 

# ssleay x509 -in demoCA/cacert.pem -text
  Certificate:
      Data:
          Version: 1 (0x0)
          Serial Number: 0 (0x0)
          Signature Algorithm: md5WithRSAEncryption
          Issuer: C=KR, ST=STATE, L=LOC_NAME, O=ORG_NAME, OU=OU, CN=CA_NAME/Email=
  WHO@WHERE
          Validity
              Not Before: Feb  1 09:51:55 2002 GMT
              Not After : Feb  1 09:51:55 2003 GMT
          Subject: C=KR, ST=STATE, L=LOC_NAME, O=ORG_NAME, OU=OU, CN=CA_NAME/Email
  =WHO@WHERE
          Subject Public Key Info:
              Public Key Algorithm: rsaEncryption
              RSA Public Key: (1024 bit)
                  Modulus (1024 bit):
                      00:d4:6d:06:e6:c8:35:04:45:b1:97:c3:23:98:21:
  ...
                      28:5c:b2:e6:27:89:5b:11:a3
                  Exponent: 65537 (0x10001)
      Signature Algorithm: md5WithRSAEncryption
          70:d4:29:d8:45:e2:7c:ac:61:46:2c:37:41:08:a1:64:ab:96:
  ...
  -----BEGIN CERTIFICATE-----
  ...
  -----END CERTIFICATE-----
  #

 

2. CA인증서를 globus 인증서 디렉토리에 추가하기 [[목차]]

 

CA인증서를 globus에 추가시키는 방법은 globus.org 의 다음 링크에

설명이 자세히 나와있으니 참조하기 바람.

 

http://www.globus.org/Security/v1.1/adding_trusted_ca.html

 

CA의 인증서는 CA의 공개키에 대한 정보를 포함하고 있으며, 아무에게나

공개될 수 있는 정보이다. demoCA 디렉토리아래의 cacert.pem 화일이

CA의 인증서 화일이다. 만일 자체적으로 CA를 운영한다면 이 화일을

여러 사람이 볼 수 있는 공개된 장소에 두어야 한다. 자체적으로 CA를 운영하지는 않지만, 다른 CA를 globus에 설치하려고 하는 경우는 CA로 부터 CA자신의 인증서를 얻어 와야 한다. 이렇게 얻어온 CA의 인증서를 cacert.pem 이라는 화일로 저장하자.

 

먼저 cacert.pem 화일의 해쉬(hash)값을 얻는다.

 

# ssleay x509 -in demoCA/cacert.pem -hash -noout
4305cfde ; 이것이 해쉬 값이다. 

cacert.pem 화일을 /etc/globus/share/certificates/hash_value.0 화일로 복사한다.
/opt/globus 는 globus deploy 경로이다.
# cp cacert.pem /opt/globus/share/certificates/(hash_value).0

다음 ca-signing-policy.conf 화일을 편집한다.

# vi /opt/globus/share/certificates/ca-signing-policy.conf

#------------------------------------------------------------------------
#  token type  | def.authority |                value
#--------------|---------------|-----------------------------------------
# EACL entry #1|
access_id_CA  X509    '/C=US/O=Globus/CN=Globus Certification Authority'
pos_rights    globus  CA:sign
cond_subjects globus  '"/C=US/O=Globus/*" "/O=Grid/O=Globus/*"'

# EACL entry #2|
access_id_CA  X509    '/C=KR/O=Globus/CN=KISTI Supercomputing Center CA'
pos_rights    globus  CA:sign
cond_subjects globus  '"/C=KR/O=Globus/*" "/O=Grid/O=Globus/*"'

# end of EACL

 

위에서 새로 추가된 부분이 강조되어 표시되었다. 그리고 밑줄친 부분은 방금 가져온 CA인증서의 Subject에 해당된다. 인증서의 Subject 명을 확인하려면 다음 명령을 사용한다.

 

# openssl x509 -in hash_value.0 -text -noout

 

 

위의 강조된 부분에서 세번째 cond_subjects 로 시작하는 줄은 이 CA가 서명 할 수 있는 Subject들을 나타낸다. '/C=KR/O=Globus/' 또는 '/O=Grid/O=Globus/'로 시작되는 모든(*, 와일드 카드 문자) Subject에 대해서 '/C=KR/O=Globus/CN=KISTI Supercomputing Center CA' 라는 CA가 서명할 수 있음을 나타낸다. 만일 이 조건을 만족하지 않는 Subject를 가진 인증서에 이 CA가 발행(또는 서명)한 것으로 표시되어 있다면, 위의 규칙을 위반한 것이므로, 정상적인 인증서로 취급되지 않는다.

 

 

 

3. 인증요청서에 서명하기 [[목차]]

 

단계 1에서 demoCA 디렉토리가 있는 곳으로 이동한다.

# cd /path/to/any_temporatory_directory

 

인증 요청서 부분을 newreq.pem 이라는 화일로 저장한다.

 

# more newreq.pem
-----BEGIN CERTIFICATE REQUEST-----
MIIBhzCB8QIBADBIMQ0wCwYDVQQKEwRHcmlkMQ8wDQYDVQQKEwZHbG9idXMxFTAT
BgNVBAsTDGhwY25ldC5uZS5rcjEPMA0GA1UEAxMGTXlVc2VyMIGfMA0GCSqGSIb3
...(중략)...
OXwjpooNitFPcg2o1TG7PHaJpy0fMmVe4m5gWhmH+fXIaBa2F2sqo5Drlw7voL/5
hLYPAWps6pwek9E=
-----END CERTIFICATE REQUEST-----

CA.sh 에 -sign 옵션을 주어 실행한다.
# sh /usr/local/ssl/bin/CA.sh -sign
  Using configuration from /usr/local/ssl/lib/ssleay.cnf
  Enter PEM pass phrase:
  Check that the request matches the signature
  Signature ok
  The Subjects Distinguished Name is as follows
  organizationName      :PRINTABLE:'Grid'
  organizationName      :PRINTABLE:'Globus'
  commonName            :PRINTABLE:'cluster.hpcnet.ne.kr'
  Certificate is to be certified until Sep 24 11:09:03 2002 GMT (365 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
  issuer :/C=KR/O=Globus/CN=My Certificate Authority
  subject:/O=Grid/O=Globus/CN=cluster.hpcnet.ne.kr

  ...
  -----BEGIN CERTIFICATE-----
  MIICXzCCAcigAwIBAgIBATANBgkqhkiG9w0BAQQFADBBMQswCQYDVQQGEwJLUjEP
  ...
  ziZoNMbnBCl78hEo4Ph3VNoLPXosYIa9a6dv6+6ihgs9YYc=
  -----END CERTIFICATE-----

 

위에서 출력되는 것은 다음과 같다.

환경설정으로 이용되는 화일이 어떤 것인지 출력된다.

서명할 인증 요청서의 Subject 내용이 표시된다.

CA를 생설할 때 입력하였던 암호를 입력하고 서명하겠느냐고 물어보는 질문에 yes를 해주면, 인증요청서에 대한 인증서가 만들어 진다. 만들어진 인증서는 현재 디렉토리의 newcert.pem이라는 화일로 저장된다. 만일 newcert.pem 이라는 화일이 이미 존재 한다면 내용을 덮어쓰게 된다.

자체적으로 CA를 운영하는 경우에는 이 인증서를 인증을 요청한 사람에게

전달하여 주면 된다.

[Top]
No.
제목
작성자
작성일
조회
663SQL 작성법
정재익
2003-01-08
12088
632JDBC introduction
정재익
2002-11-05
7887
624htdig 을 이용하여 사이트 검색엔진 달기
정재익
2002-10-26
9887
601OpenSSL(SSLeay) Simple CA Usage
정재익
2002-10-16
8311
592SQL guide book, PDF format [3]
정재익
2002-10-02
9214
589CIDOC Relational Data Model
정재익
2002-09-29
7479
563ASP 의 DB 연동
정재익
2002-09-19
15492
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.025초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다