A.5. 자체 인증서 생성


초록

이 장에서는 자체 CA(인증 기관)를 설정하고 이 CA를 사용하여 자체 인증서를 생성하고 서명하는 기술 및 절차를 설명합니다.

주의

자체 인증서를 생성하고 관리하려면 보안에 대한 전문 지식이 필요합니다. 이 장에서 설명하는 절차는 데모 및 테스트 환경을 위해 자체 인증서를 생성하는 데 편리할 수 있지만 프로덕션 환경에서 이러한 인증서를 사용하지 않는 것이 좋습니다.

A.5.1. OpenSSL을 설치합니다.

A.5.1.1. RHEL 및 Fedora 플랫폼에 OpenSSL 설치

RHEL(Red Hat Enterprise Linux) 5 및 6 및 Fedora 플랫폼에서 RPM 패키지로 사용할 수 있습니다. OpenSSL을 설치하려면 다음 명령(관리자 권한으로 실행)을 입력합니다.

yum install openssl

A.5.1.2. 소스 코드 배포

OpenSSL의 소스 배포는 http://www.openssl.org/docs 에서 사용할 수 있습니다. OpenSSL 프로젝트는 소스 코드 배포 제공합니다. OpenSSL 웹 사이트에서 OpenSSL 유틸리티의 바이너리 설치를 다운로드할 수 없습니다.

A.5.2. 개인 인증 기관 설정

A.5.2.1. 개요

개인 CA를 사용하도록 선택하는 경우 애플리케이션에서 사용할 고유 인증서를 생성해야 합니다. OpenSSL 프로젝트는 개인 CA를 설정하고, 서명된 인증서를 생성하고, Java 키 저장소에 CA를 추가하기 위한 무료 명령줄 유틸리티를 제공합니다.

주의

프로덕션 환경에 맞는 개인 CA를 설정하려면 높은 수준의 전문 지식이 필요하며 외부 위협으로부터 인증서 저장소를 보호하려면 높은 수준의 전문 지식을 수행해야 합니다.

A.5.2.2. 개인 인증 기관을 설정하는 단계

자체 개인 인증 기관을 설정하려면 다음을 수행합니다.

  1. 다음과 같이 CA의 디렉터리 구조를 생성합니다.

    X509CA/demoCA
    X509CA/demoCA/private
    X509CA/demoCA/certs
    X509CA/demoCA/newcerts
    X509CA/demoCA/crl
  2. 텍스트 편집기를 사용하여 X509CA/openssl.cfg 파일을 생성하고 이 파일에 다음 내용을 추가합니다.

    예 A.1. OpenSSL 설정

    #
    # SSLeay example configuration file.
    # This is mostly being used for generation of certificate requests.
    #
    
    RANDFILE            = ./.rnd
    
    ####################################################################
    [ req ]
    default_bits        = 2048
    default_keyfile     = keySS.pem
    distinguished_name  = req_distinguished_name
    encrypt_rsa_key     = yes
    default_md          = sha1
    
    [ req_distinguished_name ]
    countryName         = Country Name (2 letter code)
    
    organizationName    = Organization Name (eg, company)
    
    commonName          = Common Name (eg, YOUR name)
    
    ####################################################################
    [ ca ]
    default_ca         = CA_default        # The default ca section
    
    ####################################################################
    [ CA_default ]
    
    dir                = ./demoCA              # Where everything is kept
    certs              = $dir/certs            # Where the issued certs are kept
    crl_dir            = $dir/crl              # Where the issued crl are kept
    database           = $dir/index.txt        # database index file.
    #unique_subject    = no                    # Set to 'no' to allow creation of
                                               # several certificates with same subject.
    new_certs_dir      = $dir/newcerts         # default place for new certs.
    
    certificate        = $dir/cacert.pem       # The CA certificate
    serial             = $dir/serial           # The current serial number
    crl                = $dir/crl.pem          # The current CRL
    private_key        = $dir/private/cakey.pem# The private key
    RANDFILE           = $dir/private/.rand    # private random number file
    
    name_opt           = ca_default            # Subject Name options
    cert_opt           = ca_default            # Certificate field options
    
    default_days       = 365                   # how long to certify for
    default_crl_days   = 30                    # how long before next CRL
    default_md         = md5                   # which md to use.
    preserve           = no                    # keep passed DN ordering
    
    policy             = policy_anything
    
    [ policy_anything ]
    countryName            = optional
    stateOrProvinceName    = optional
    localityName           = optional
    organizationName       = optional
    organizationalUnitName = optional
    commonName             = supplied
    emailAddress           = optional
    중요

    위의 openssl.cfg 구성 파일은 데모로만 제공됩니다. 프로덕션 환경에서 이 구성 파일은 높은 수준의 보안 전문 지식을 갖춘 엔지니어가 신중하게 작성하고 진화하는 보안 위협으로부터 보호하기 위해 적극적으로 유지되어야 합니다.

  3. 초기 콘텐츠 01 (0)이 있어야 하는 demoCA/serial 파일을 초기화합니다. 다음 명령을 실행합니다.

    echo 01 > demoCA/serial
  4. 처음에 완전히 비어 있어야 하는 demoCA/index.txt 를 초기화합니다. 다음 명령을 실행합니다.

    touch demoCA/index.txt
  5. 명령을 사용하여 자체 서명된 새 CA 인증서 및 개인 키를 생성합니다.

    openssl req -x509 -new -config openssl.cfg -days 365 -out demoCA/cacert.pem -keyout demoCA/private/cakey.pem

    예 A.2. “CA 인증서 생성” 에 표시된 대로 CA 개인 키 및 CA 고유 이름의 세부 정보를 입력하라는 메시지가 표시됩니다.

    예 A.2. CA 인증서 생성

    Generating a 2048 bit RSA private key
    ...........................................................................+++
    .................+++
    writing new private key to 'demoCA/private/cakey.pem'
    Enter PEM pass phrase:
    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) []:DE
    Organization Name (eg, company) []:Red Hat
    Common Name (eg, YOUR name) []:Scooby Doo
    참고

    CA의 보안은 이 단계에서 사용되는 개인 키 파일의 보안 및 개인 키 전달 구문에 따라 달라집니다.

    CA 인증서 및 개인 키, cacert.pemcakey.pem 의 파일 이름과 위치가 openssl.cfg 에 지정된 값과 동일한지 확인해야 합니다.

A.5.3. CA 신뢰 저장소 파일 만들기

A.5.3.1. 개요

서버 ID를 확인하려면 일반적으로 SSL/TLS 연결의 클라이언트 측에 신뢰 저장소 파일이 필요합니다. 신뢰 저장소 파일을 사용하여 디지털 서명을 확인할 수도 있습니다(예: 신뢰 저장소 파일에서 신뢰할 수 있는 인증서 중 하나에 해당하는 개인 키를 사용하여 서명이 생성되었는지 확인).

A.5.3.2. CA 신뢰 저장소를 생성하는 단계

신뢰 저장소 파일에 CA 인증서 중 하나를 추가하려면 다음을 수행합니다.

  1. 배포하려는 신뢰할 수 있는 CA 인증서 컬렉션을 어셈블합니다.

    신뢰할 수 있는 CA 인증서는 공용 CA 또는 개인 CA에서 가져올 수 있습니다. 신뢰할 수 있는 CA 인증서는 Java 키 저장소 유틸리티와 호환되는 모든 형식(예: PEM 형식)일 수 있습니다. 필요한 것은 모두 인증서 자체입니다. 개인 키와 암호가 필요하지 않습니다.

  2. keytool -import 명령을 사용하여 신뢰 저장소에 CA 인증서를 추가합니다.

    다음 명령을 입력하여 PEM 형식의 CA 인증서 cacert.pem 을 JKS 신뢰 저장소에 추가합니다.

    keytool -import -file cacert.pem -alias CAAlias -keystore truststore.ts -storepass StorePass

    여기서 truststore.ts 는 CA 인증서가 포함된 키 저장소 파일입니다. 이 파일이 없으면 keytool 명령에서 해당 파일을 생성합니다. CAAlias 는 가져온 CA 인증서의 편리한 식별자이며 StorePass 는 키 저장소 파일에 액세스하는 데 필요한 암호입니다.

  3. 이전 단계를 반복하여 모든 CA 인증서를 신뢰 저장소에 추가합니다.

A.5.4. 새 인증서 생성 및 서명

A.5.4.1. 개요

인증서가 실제 환경에서 유용하려면 인증서의 진위 여부를 나타내는 CA로 서명해야 합니다. 단일 CA 인증서를 사용하여 대규모 인증서 컬렉션을 확인할 수 있기 때문에 인증서 확인을 위한 확장 가능한 솔루션이 용이해집니다.

A.5.4.2. 새 인증서를 생성하고 서명하는 단계

자체 개인 CA를 사용하여 새 인증서를 생성하고 서명하려면 다음 단계를 수행합니다.

  1. 다음과 같이 keytool -genkeypair 명령을 사용하여 인증서 및 개인 키 쌍을 생성합니다.

    keytool -genkeypair -keyalg RSA -dname "CN=Alice, OU=Engineering, O=Red Hat, ST=Dublin, C=IE" -validity 365 -alias alice -keypass KeyPass -keystore alice.ks -storepass StorePass

    명령을 실행하기 전에 지정된 키 저장소인 alice.ks 가 존재하지 않기 때문에 새 키 저장소를 암시적으로 생성하고 암호를 StorePass 로 설정합니다.

    -dname-validity 플래그는 새로 생성된 X.509 인증서의 내용을 정의합니다.

    참고

    인증서의 Distinguished Name( -dname 매개변수를 통해)을 지정할 때 openssl.cfg 파일에 지정된 정책 제약 조건을 관찰해야 합니다. 이러한 정책 제약 조건이 거부되지 않으면 CA(다음 단계에서)를 사용하여 인증서에 서명할 수 없습니다.

    참고

    -keyalg RSA 옵션(또는 유사한 강도의 키 알고리즘)을 사용하여 키 쌍을 생성하는 것이 중요합니다. 기본 키 알고리즘은 DSA 암호화 및 SHA-1 서명의 조합을 사용합니다. 그러나 SHA-1 알고리즘은 더 이상 안전하지 않으며 최신 웹 브라우저에서 SHA-1을 사용하여 서명된 인증서를 거부합니다. RSA 키 알고리즘을 선택할 때 keytool 유틸리티는 대신 SHA-2 알고리즘을 사용합니다.

  2. keystore -certreq 명령을 사용하여 인증서 서명 요청을 생성합니다.

    alice.ks 인증서에 대한 새 인증서 서명 요청을 생성하고 다음과 같이 alice_csr.pem 파일로 내보냅니다.

    keytool -certreq -alias alice -file alice_csr.pem -keypass KeyPass -keystore alice.ks -storepass StorePass
  3. openssl ca 명령을 사용하여 CSR에 서명합니다.

    다음과 같이 개인 CA를 사용하여 Alice 인증서의 CSR에 서명합니다.

    openssl ca -config openssl.cfg -days 365 -in alice_csr.pem -out alice_signed.pem

    CA를 생성할 때 사용한 CA 개인 키 전달 문구를 입력하라는 메시지가 표시됩니다( “개인 인증 기관을 설정하는 단계”에서).

    openssl ca 명령에 대한 자세한 내용은 http://www.openssl.org/docs/apps/ca.html# 을 참조하십시오.

  4. -outform 옵션을 PEM으로 설정하여 openssl x509 명령을 사용하여 서명된 인증서를 PEM 으로만 포맷으로 변환합니다. 다음 명령을 실행합니다.

    openssl x509 -in alice_signed.pem -out alice_signed.pem -outform PEM
  5. CA 인증서 파일과 변환된 서명된 인증서 파일을 연결하여 인증서 체인을 형성합니다. 예를 들어 Linux 및 UNIX 플랫폼에서 다음과 같이 CA 인증서 파일과 서명된 Alice 인증서인 alice_signed.pem 을 연결할 수 있습니다.

    cat demoCA/cacert.pem alice_signed.pem > alice.chain
  6. keytool -import 명령을 사용하여 새 인증서의 전체 인증서 체인을 Java 키 저장소로 가져옵니다. 다음 명령을 실행합니다.

    keytool -import -file alice.chain -keypass KeyPass -keystore alice.ks -storepass StorePass
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.