상단

보안을 위해서 사용되는 OpenSSL을 정리 한다.

 
 

CentOS에서 OpenSSL 설치


 yum install openssl
 

OpenSSL 사용자 매뉴얼


예전에 CA(Certificate Authority)를 구축할 수 있는 Software를 판매한 적이 있었다. 직접 참여를 하지는 않았지만 관여를 하고 있었기 때문에 보안과 인증서에 대해서 공부를 했었다. 그 때 경험이 향후 보안과 관련된 작업을 할 때 여러모로 도움이 많이 되었다.

오픈소스 중에는 OpenSSL이라는 인증서를 만들고 관리할 수 있는 소프트웨어가 있다. 인증서를 생성할 수 있기 때문에 OpenSSL을 사용하면 사설 CA를 구축할 수도 있다. 사설 CA를 구축하는 것은 좀 큰일이고 인증서가 있으면 SSL, TLS 등 보안과 관련된 기본적인 여러가지 기능을 구현할 수 있다.

여기서는 OpenSSL을 사용하여 사설 인증서와 서버 인증서를 생성하는 방법을 알아 보자.

개인키와 사설 인증서 생성

  • 2048-bits RSA 키(private.key) 생성

    • -des3 : 삼중 DES 암호화 적용
      :{| cellspacing="0" cellpadding="2" border="0" width="100%" align="center" 
      |- 
      | bgcolor="#D0FF9D" | 
      openssl genrsa -des3 -out private.key 2048

    #--- 암호 입력 (암호를 반드시 기억하자)

|}

  • 키에서 암호 삭제
    :{| cellspacing="0" cellpadding="2" border="0" width="100%" align="center" 
    |- 
    | bgcolor="#D0FF9D" | 
    openssl rsa -in private.key -out private.pem |}

  • 서명 정보가 들어 있는 CSR(private.csr) 생성

    • CSR : Certificate Signing Request

 
 openssl req -new -key private.key -out private.csr
     #--- 키 생성시 입력한 암호 입력
    Country Name (2 letter code) [AU](AU.md): 국가 (KR)
    State or Province Name (full name) [Some-State](Some-State.md): 시/도/군 (Seoul)
    Locality Name (eg, city) [](.md): 구/군 (Seoul)
    Organization Name (eg, company) [Widgits Pty Ltd](Internet): 회사명 (Jopenbusiness)
    Organizational Unit Name (eg, section) [](.md): 서버도메인 (www.jopenbusiness.com)
    Common Name (eg, YOUR name) [](.md): 이름 (pnuskgh)
    Email Address [](.md): 이메일_주소
    엔터
    엔터
 
  • 인증기관에 인증서 신청시 private.csr 파일의 내용을 복사하여 인증기관에 보낸다.

 
 -----BEGIN NEW CERTIFICATE REQUEST-----
 중간 내용 포함
 -----END NEW CERTIFICATE REQUEST-----
 
  • 자신이 서명한 인증서 (private.crt) 생성

    • -days 3560 : 유효기간을 3650일로 설정

 
 openssl x509 -req -days 3560 -in private.csr -signkey private.key -out private.crt
     #--- 키 생성시 입력한 암호 입력
 

서버 인증서 생성

  • Server 인증서 (server.crt) 생성

 
 openssl genrsa -des3 -out server.key 2048
 openssl req -new -key server.key -out server.csr
 openssl x509 -req -days 3560 -in server.csr -signkey server.key -out server.crt -CA private.crt -CAkey private.key -CAcreateserial
 #--- server.key의 암호 입력
 #--- private.key의 암호 입력
 
 #--- 서버 인증서 검증
 openssl verify -CAfile private.crt server.crt
 

Client 인증서 생성

  • Client 인증서 (client.crt) 생성

 
 openssl genrsa -des3 -out client.key 2048
 openssl req -new -key client.key -out client.csr
 openssl x509 -req -days 3560 -in client.csr -signkey client.key -out client.crt -CA server.crt -CAkey server.key -CAcreateserial
 #--- client.key의 암호 입력
 #--- server.key의 암호 입력
 
 #--- Client 인증서 검증
 openssl verify -CAfile server.crt client.crt
 

용어 및 인증서 관리

  • CRT, DER, PEM 파일간의 변환

    • pem : base64 encoding 형태의 인증서

    • der : 바이너리 형태의 인증서

 
 openssl x509 -outform der -in cert.crt -out cert.der 
 openssl x509 -inform  der -in cert.der -out cert.pem
 openssl x509 -outform der -in cert.pem -out cert.der
 
  • 용어 설명

    • CA(Certificate Authority)

      • 인증서를 사용할 때 Public/Private Key를 분배하는 과정의 문제점을 해결하기 위해 필요하며 Certificate을 인증 해주는 역할을 함

      • 만약 Certificate에 sign을 한 CA를 믿을 수 있다면(Trusted CA) certificate도 믿을 수 있음

 
 

개인키와 공개키 생성


OpenSSL을 사용하여 /etc/mail/certs/ 폴더에 인증서를 만들어 봅시다.

 
  • 개인키와 공개키를 저장하고 관리하기 위한 폴더 생성

 
 cd /etc/mail
 mkdir certs
 cd /etc/mail/certs
 chmod 700 /etc/mail/certs
 
  • 인증을 위한 키(dsa1024.pem)를 만든다.

 
 openssl dsaparam 1024 -out dsa1024 -out dsa1024.pem
 
  • OpenSSL 개인키(mycert.pem, mykey.pem)를 만든다.

 
 openssl req -x509 -nodes -days 3650 -newkey dsa:dsa1024.pem -out /etc/mail/certs/mycert.pem -keyout /etc/mail/certs/mykey.pem
     Country Name (2 letter code) [AU](AU.md):KR
     State or Province Name (full name) [Some-State](Some-State.md):Seoul
     Locality Name (eg, city) [](.md):Seoul
     Organization Name (eg, company) [Widgits Pty Ltd](Internet):Jopenbusiness
     Organizational Unit Name (eg, section) [](.md):Jopenbusiness
     Common Name (eg, YOUR name) [](.md):pnuskgh
     Email Address [](.md):메일_주소
 ln -s /etc/mail/certs/mycert.pem /etc/mail/certs/CAcert.pem
 chmod 600 /etc/mail/certs/*
 
  • OpenSSL 공개키를 만든다.

 
 openssl req -x509 -new -days 3650 -key /etc/mail/certs/mykey.pem -out /etc/mail/certs/mycert.pem
     Country Name (2 letter code) [GB](GB.md):KR
     State or Province Name (full name) [Berkshire](Berkshire.md):Seoul
     Locality Name (eg, city) [Newbury](Newbury.md):Seoul
     Organization Name (eg, company) [Company Ltd](My):Jopenbusiness
     Organizational Unit Name (eg, section) [](.md):Jopenbusiness
     Common Name (eg, your name or your server's hostname) [](.md):pnuskgh
     Email Address [](.md):메일_주소
 chmod 600 /etc/mail/certs/*
 

사설인증서 CA 처리


 

PHP - OpenLDAP

vi /etc/openldap/ldap.conf
```
   TLS_REQCERT     allow
   BASE            dc=ldap,dc=jopenbusiness,dc=com
   URI             ldap://ldap.jopenbusiness.com
   TLS_CACERTDIR   /etc/openldap/certs
/etc/openldap/certs/ 폴더에 CA 인증서를 복사하여 둡니다.
  
  
  
Test Program
vi zztest.php
  
$ds=ldap_connect("ldap.jopenbusiness.com", 389);
if ($ds) {
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_start_tls($ds);
    $sr = @ldap_search($ds, "dc=ldap,dc=jopenbusiness,dc=com", "cn=demo001", array('cn'));
    if ($sr !== FALSE) {
        $info = @ldap_get_entries($ds, $sr);
        $dn = $info[0]['dn']('dn'.md);
    }
    $ldapbind = @ldap_bind($ds, $dn, "");
}
?>
php -f zztest.php
  
openssl s_client -connect ldap.jopenbusiness.com:389
openssl s_client -showcerts -connect ldap.jopenbusiness.com:389
  
  
## HTTPS 서버 인증서 HTTPS 서비스를 위해서는 인증서 구매가 필요 합니다. ## 참고 문헌 - [OpenSSL로 인증서 생성 및 변환, 2010.9](http://www.innocert.co.kr/community/board.html?bid=info&uid=16&sch=) - [Working with OpenSSL Certificates, 2010.10](http://linuxnet.ch/groups/linuxnet/wiki/5ee79/Working_with_OpenSSL_Certificates.html) - [3. 인증서 관련 작업](http://wiki.kldp.org/HOWTO/html/SSL-RedHat-HOWTO/ssl-redhat-howto-3.html) 분류: [보안](분류_보안.md)
최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :