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. 개인 인증 기관을 설정하는 단계
자체 개인 인증 기관을 설정하려면 다음을 수행합니다.
다음과 같이 CA의 디렉터리 구조를 생성합니다.
X509CA/demoCA X509CA/demoCA/private X509CA/demoCA/certs X509CA/demoCA/newcerts X509CA/demoCA/crl
텍스트 편집기를 사용하여
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
구성 파일은 데모로만 제공됩니다. 프로덕션 환경에서 이 구성 파일은 높은 수준의 보안 전문 지식을 갖춘 엔지니어가 신중하게 작성하고 진화하는 보안 위협으로부터 보호하기 위해 적극적으로 유지되어야 합니다.초기 콘텐츠
01
(0)이 있어야 하는demoCA/serial
파일을 초기화합니다. 다음 명령을 실행합니다.echo 01 > demoCA/serial
처음에 완전히 비어 있어야 하는
demoCA/index.txt
를 초기화합니다. 다음 명령을 실행합니다.touch demoCA/index.txt
명령을 사용하여 자체 서명된 새 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.pem
및cakey.pem
의 파일 이름과 위치가openssl.cfg
에 지정된 값과 동일한지 확인해야 합니다.
A.5.3. CA 신뢰 저장소 파일 만들기
A.5.3.1. 개요
서버 ID를 확인하려면 일반적으로 SSL/TLS 연결의 클라이언트 측에 신뢰 저장소 파일이 필요합니다. 신뢰 저장소 파일을 사용하여 디지털 서명을 확인할 수도 있습니다(예: 신뢰 저장소 파일에서 신뢰할 수 있는 인증서 중 하나에 해당하는 개인 키를 사용하여 서명이 생성되었는지 확인).
A.5.3.2. CA 신뢰 저장소를 생성하는 단계
신뢰 저장소 파일에 CA 인증서 중 하나를 추가하려면 다음을 수행합니다.
배포하려는 신뢰할 수 있는 CA 인증서 컬렉션을 어셈블합니다.
신뢰할 수 있는 CA 인증서는 공용 CA 또는 개인 CA에서 가져올 수 있습니다. 신뢰할 수 있는 CA 인증서는 Java
키 저장소
유틸리티와 호환되는 모든 형식(예: PEM 형식)일 수 있습니다. 필요한 것은 모두 인증서 자체입니다. 개인 키와 암호가 필요하지 않습니다.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
는 키 저장소 파일에 액세스하는 데 필요한 암호입니다.- 이전 단계를 반복하여 모든 CA 인증서를 신뢰 저장소에 추가합니다.
A.5.4. 새 인증서 생성 및 서명
A.5.4.1. 개요
인증서가 실제 환경에서 유용하려면 인증서의 진위 여부를 나타내는 CA로 서명해야 합니다. 단일 CA 인증서를 사용하여 대규모 인증서 컬렉션을 확인할 수 있기 때문에 인증서 확인을 위한 확장 가능한 솔루션이 용이해집니다.
A.5.4.2. 새 인증서를 생성하고 서명하는 단계
자체 개인 CA를 사용하여 새 인증서를 생성하고 서명하려면 다음 단계를 수행합니다.
다음과 같이
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 알고리즘을 사용합니다.keystore -certreq
명령을 사용하여 인증서 서명 요청을 생성합니다.alice.ks
인증서에 대한 새 인증서 서명 요청을 생성하고 다음과 같이alice_csr.pem
파일로 내보냅니다.keytool -certreq -alias alice -file alice_csr.pem -keypass KeyPass -keystore alice.ks -storepass StorePass
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# 을 참조하십시오.-outform
옵션을 PEM으로 설정하여openssl x509
명령을 사용하여 서명된 인증서를PEM
으로만 포맷으로 변환합니다. 다음 명령을 실행합니다.openssl x509 -in alice_signed.pem -out alice_signed.pem -outform PEM
CA 인증서 파일과 변환된 서명된 인증서 파일을 연결하여 인증서 체인을 형성합니다. 예를 들어 Linux 및 UNIX 플랫폼에서 다음과 같이 CA 인증서 파일과 서명된 Alice 인증서인
alice_signed.pem
을 연결할 수 있습니다.cat demoCA/cacert.pem alice_signed.pem > alice.chain
keytool -import
명령을 사용하여 새 인증서의 전체 인증서 체인을 Java 키 저장소로 가져옵니다. 다음 명령을 실행합니다.keytool -import -file alice.chain -keypass KeyPass -keystore alice.ks -storepass StorePass