2.5. 자체 인증서 생성
2.5.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
2.5.1.1. OpenSSL 유틸리티 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에 설명된 단계는 OpenSSL 프로젝트의 OpenSSL 명령줄 유틸리티를 기반으로 합니다. OpenSSL 명령줄 유틸리티에 대한 추가 문서는 http://www.openssl.org/docs/ 에서 확인할 수 있습니다.
2.5.1.2. CA 디렉터리 구조 샘플 링크 복사링크가 클립보드에 복사되었습니다!
설명을 위해 CA 데이터베이스에는 다음과 같은 디렉터리 구조가 있다고 가정합니다.
|
|
|
|
여기서 X509CA 는 CA 데이터베이스의 상위 디렉터리입니다.
2.5.2. 자체 CA 설정 링크 복사링크가 클립보드에 복사되었습니다!
2.5.2.1. 수행할 하위 단계 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 자체 개인 CA를 설정하는 방법을 설명합니다. 실제 배포를 위해 CA를 설정하기 전에 2.2.3절. “개인 인증 기관” 에서 추가 노트를 읽으십시오.
자체 CA를 설정하려면 다음 단계를 수행합니다.
2.5.2.2. bin 디렉토리를 PATH에 추가합니다. 링크 복사링크가 클립보드에 복사되었습니다!
보안 CA 호스트에서 OpenSSL bin
디렉토리를 경로에 추가합니다.
Windows
> set PATH=OpenSSLDir\bin;%PATH%
> set PATH=OpenSSLDir\bin;%PATH%
UNIX
% PATH=OpenSSLDir/bin:$PATH; export PATH
% PATH=OpenSSLDir/bin:$PATH; export PATH
이 단계에서는 명령줄에서 openssl
유틸리티를 사용할 수 있습니다.
2.5.2.3. CA 디렉터리 계층 구조 생성 링크 복사링크가 클립보드에 복사되었습니다!
새 CA를 저장할 새 디렉터리 X509CA 를 만듭니다. 이 디렉터리는 CA와 연결된 모든 파일을 보유하는 데 사용됩니다. X509CA 디렉토리에서 다음 디렉터리 계층 구조를 생성합니다.
|
|
|
|
2.5.2.4. openssl.cnf 파일을 복사하고 편집합니다. 링크 복사링크가 클립보드에 복사되었습니다!
OpenSSL 설치의 샘플 openssl.cnf
를 X509CA 디렉터리에 복사합니다.
X509CA 디렉터리의 디렉터리 구조를 반영하고 새 CA에서 사용하는 파일을 식별하도록 openssl.cnf
를 편집합니다.
openssl.cnf
파일의 [CA_default]
섹션을 다음과 같이 편집합니다.
이 시점에서 OpenSSL 구성의 다른 세부 정보를 편집하도록 결정할 수 있습니다. 자세한 내용은 http://www.openssl.org/docs/ 을 참조하십시오.
2.5.2.5. CA 데이터베이스 초기화 링크 복사링크가 클립보드에 복사되었습니다!
X509CA 디렉토리에서 serial
및 index.txt
두 파일을 초기화합니다.
Windows
Windows에서 직렬
파일을 초기화하려면 다음 명령을 입력합니다.
> echo 01 > serial
> echo 01 > serial
Windows의 빈 파일 index.txt
를 만들려면 다음과 같이 X509CA 디렉터리의 명령줄에서 Windows 메모장을 시작합니다.
> notepad index.txt
> notepad index.txt
텍스트가 포함된 대화 상자에 대한 응답으로 text.txt 파일을 찾을 수 없습니다. 새 파일을 생성하시겠습니까?
, 를 클릭하고 메모장을 닫습니다.
UNIX
UNIX에서 직렬
파일 및 index.txt
파일을 초기화하려면 다음 명령을 입력합니다.
% echo "01" > serial % touch index.txt
% echo "01" > serial
% touch index.txt
이러한 파일은 CA에서 인증서 파일의 데이터베이스를 유지 관리하는 데 사용됩니다.
index.txt
파일은 공백도 포함하지 않고 처음에 완전히 비어 있어야 합니다.
2.5.2.6. 자체 서명된 CA 인증서 및 개인 키 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음 명령을 사용하여 자체 서명된 새 CA 인증서 및 개인 키를 생성합니다.
openssl req -x509 -new -config X509CA/openssl.cnf -days 365 -out X509CA/ca/new_ca.pem -keyout X509CA/ca/new_ca_pk.pem
openssl req -x509 -new -config X509CA/openssl.cnf -days 365 -out X509CA/ca/new_ca.pem -keyout X509CA/ca/new_ca_pk.pem
이 명령은 CA 개인 키에 대한 패스 문구와 CA 고유 이름의 세부 정보를 입력하라는 메시지를 표시합니다. 예를 들면 다음과 같습니다.
CA의 보안은 이 단계에서 사용되는 개인 키 파일의 보안 및 개인 키 전달 구문에 따라 달라집니다.
CA 인증서 및 개인 키의 파일 이름과 위치, new_ca.pem
및 new_ca_pk.pem
이 openssl.cnf
에 지정된 값과 동일한지 확인해야 합니다(이전 단계 참조).
이제 CA로 인증서에 서명할 준비가 되었습니다.
2.5.3. CA를 사용하여 Java 키 저장소에서 서명된 인증서 생성 링크 복사링크가 클립보드에 복사되었습니다!
2.5.3.1. 수행할 하위 단계 링크 복사링크가 클립보드에 복사되었습니다!
JKS(Java 키 저장소), CertName.jks
에서 인증서를 생성하고 서명하려면 다음 하위 단계를 수행합니다.
2.5.3.2. Java bin 디렉토리를 PATH에 추가합니다. 링크 복사링크가 클립보드에 복사되었습니다!
아직 수행하지 않은 경우 경로에 Java bin
디렉토리를 추가합니다.
Windows
> set PATH=JAVA_HOME\bin;%PATH%
> set PATH=JAVA_HOME\bin;%PATH%
UNIX
% PATH=JAVA_HOME/bin:$PATH; export PATH
% PATH=JAVA_HOME/bin:$PATH; export PATH
이 단계에서는 명령줄에서 keytool
유틸리티를 사용할 수 있습니다.
2.5.3.3. 인증서 및 개인 키 쌍 생성 링크 복사링크가 클립보드에 복사되었습니다!
명령 프롬프트를 열고 키 저장소 파일 KeystoreDir 을 저장하는 디렉터리로 디렉터리를 변경합니다. 다음 명령을 실행합니다.
keytool -genkey -dname "CN=Alice, OU=Engineering, O=Progress, ST=Co. Dublin, C=IE" -validity 365 -alias CertAlias -keypass CertPassword -keystore CertName.jks -storepass CertPassword
keytool -genkey -dname "CN=Alice, OU=Engineering, O=Progress, ST=Co. Dublin, C=IE" -validity 365 -alias CertAlias -keypass CertPassword -keystore CertName.jks -storepass CertPassword
-genkey
옵션으로 호출되는 이 keytool
명령은 X.509 인증서 및 일치하는 개인 키를 생성합니다. 인증서와 키는 모두 새로 생성된 키 저장소인 CertName.jks의
키 항목에 배치됩니다. 지정된 키 저장소 CertName.jks
이므로 명령을 실행하기 전에는 존재하지 않아 keytool
에서 새 키 저장소를 암시적으로 생성합니다.
-dname
및 -validity
플래그는 새로 생성된 X.509 인증서의 내용을 정의하여 각각 제목 DN과 만료 날짜를 지정합니다. DN 형식에 대한 자세한 내용은 부록 A. ASN.1 및 Distinguished Names 을 참조하십시오.
제목 DN의 일부 부분은 CA 인증서의 값과 일치해야 합니다( openssl.cnf
파일의 CA 정책 섹션에 지정되어 있음). 기본 openssl.cnf
파일은 다음 항목이 일치해야 합니다.
- 국가 이름 (C)
- 시/도 이름(ST)
- 조직 이름(O)
제약 조건을 준수하지 않으면 OpenSSL CA가 인증서에 서명하지 않습니다( “CSR에 서명” 참조).
2.5.3.4. 인증서 서명 요청 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음과 같이 CertName.jks 인증서에 대한 새 CSR(인증서 서명 요청)을 생성합니다.
keytool -certreq -alias CertAlias -file CertName_csr.pem -keypass CertPassword -keystore CertName.jks -storepass CertPassword
keytool -certreq -alias CertAlias -file CertName_csr.pem -keypass CertPassword -keystore CertName.jks -storepass CertPassword
이 명령은 CSR을 CertName_csr.pem
파일로 내보냅니다.
2.5.3.5. CSR에 서명 링크 복사링크가 클립보드에 복사되었습니다!
openssl ca -config X509CA/openssl.cnf -days 365 -in CertName_csr.pem -out CertName.pem
openssl ca -config X509CA/openssl.cnf -days 365 -in CertName_csr.pem -out CertName.pem
인증서에 서명하려면 CA 개인 키 전달 문구를 입력해야 합니다( 2.5.2절. “자체 CA 설정”참조).
기본 CA 이외의 CA 인증서를 사용하여 CSR에 서명하려면 -cert
및 -keyfile
옵션을 사용하여 CA 인증서와 개인 키 파일을 각각 지정합니다.
2.5.3.6. PEM 형식으로 변환 링크 복사링크가 클립보드에 복사되었습니다!
서명된 인증서 CertName.pem
을 다음과 같이 PEM 전용 형식으로 변환합니다.
openssl x509 -in CertName.pem -out CertName.pem -outform PEM
openssl x509 -in CertName.pem -out CertName.pem -outform PEM
2.5.3.7. 파일 연결 링크 복사링크가 클립보드에 복사되었습니다!
다음과 같이 CA 인증서 파일과 CertName.pem
인증서 파일을 연결합니다.
Windows
copy CertName.pem + X509CA\ca\new_ca.pem CertName.chain
copy CertName.pem + X509CA\ca\new_ca.pem CertName.chain
UNIX
cat CertName.pem X509CA/ca/new_ca.pem> CertName.chain
cat CertName.pem X509CA/ca/new_ca.pem> CertName.chain
2.5.3.8. 전체 인증서 체인으로 키 저장소를 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
다음과 같이 인증서의 전체 인증서 체인을 가져와 키 저장소 CertName.jks
를 업데이트합니다.
keytool -import -file CertName.chain -keypass CertPassword -keystore CertName.jks -storepass CertPassword
keytool -import -file CertName.chain -keypass CertPassword -keystore CertName.jks -storepass CertPassword
2.5.3.9. 필요에 따라 단계를 반복 링크 복사링크가 클립보드에 복사되었습니다!
2~7단계를 반복하여 시스템에 대한 전체 인증서 세트를 생성합니다.
2.5.4. CA를 사용하여 서명된 PKCS#12 인증서 만들기 링크 복사링크가 클립보드에 복사되었습니다!
2.5.4.1. 수행할 하위 단계 링크 복사링크가 클립보드에 복사되었습니다!
2.5.2절. “자체 CA 설정” 에 설명된 대로 개인 CA를 설정한 경우 이제 자체 인증서를 생성하고 서명할 준비가 된 것입니다.
PKCS#12 형식 CertName.p12
에서 인증서를 생성하고 서명하려면 다음 하위 단계를 수행합니다.
2.5.4.2. bin 디렉토리를 PATH에 추가합니다. 링크 복사링크가 클립보드에 복사되었습니다!
아직 수행하지 않은 경우 다음과 같이 OpenSSL bin
디렉토리를 경로에 추가합니다.
Windows
> set PATH=OpenSSLDir\bin;%PATH%
> set PATH=OpenSSLDir\bin;%PATH%> set PATH=OpenSSLDir\bin;%PATH%> set PATH=OpenSSLDir\bin;%PATH%
UNIX
% PATH=OpenSSLDir/bin:$PATH; export PATH
% PATH=OpenSSLDir/bin:$PATH; export PATH% PATH=OpenSSLDir/bin:$PATH; export PATH% PATH=OpenSSLDir/bin:$PATH; export PATH
이 단계에서는 명령줄에서 openssl
유틸리티를 사용할 수 있습니다.
2.5.4.3. subjectAltName 확장 구성(선택 사항) 링크 복사링크가 클립보드에 복사되었습니다!
인증서가 URL 무결성 검사를 적용하는 HTTPS 서버용이고 다중 홈 호스트 또는 여러 DNS 이름 별칭이 있는 호스트(예: 다중 홈 웹 서버에 인증서를 배포하는 경우)에 서버를 배포하려는 경우입니다. 이 경우 인증서 ID는 여러 호스트 이름과 일치해야 하며 subjectAltName
인증서 확장만 추가할 수 있습니다( 2.4절. “HTTPS 인증서에 대한 특수 요구 사항”참조).
subjectAltName
확장자를 구성하려면 다음과 같이 CA의 openssl.cnf
파일을 편집합니다.
[req]
섹션에 다음req_extensions
설정을 추가합니다(openssl.cnf
파일에 없는 경우).openssl Configuration File
# openssl Configuration File ... [req] req_extensions=v3_req
Copy to Clipboard Copied! Toggle word wrap Toggle overflow [v3_req]
섹션 헤더를 추가합니다(openssl.cnf
파일에 아직 없는 경우).[v3_req]
섹션에서subjectAltName
설정을 추가하거나 수정하여 DNS 호스트 이름 목록으로 설정합니다. 예를 들어 서버 호스트가 대체 DNS 이름인www.redhat.com
및jboss.org
를 지원하는 경우subjectAltName
을 다음과 같이 설정합니다.openssl Configuration File
# openssl Configuration File ... [v3_req] subjectAltName=DNS:www.redhat.com,DNS:jboss.org
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 적절한 CA 구성 섹션에
copy_extensions
설정을 추가합니다. 인증서 서명에 사용되는 CA 구성 섹션은 다음 중 하나입니다.-
openssl ca
명령의-name
옵션에 지정된 섹션 [ca]
섹션 아래의default_ca
설정에서 지정하는 섹션(일반적으로[CA_default]
).예를 들어 적절한 CA 구성 섹션이
[CA_default]
인 경우 다음과 같이copy_extensions
속성을 설정합니다.openssl Configuration File
# openssl Configuration File ... [CA_default] copy_extensions=copy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 설정을 사용하면 인증서 서명 요청에 있는 인증서 확장이 서명된 인증서로 복사됩니다.
-
2.5.4.4. 인증서 서명 요청 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음과 같이 CertName.p12 인증서에 대한 새 CSR(인증서 서명 요청)을 생성합니다.
openssl req -new -config X509CA/openssl.cnf -days 365 -out X509CA/certs/CertName_csr.pem -keyout X509CA/certs/CertName_pk.pem
openssl req -new -config X509CA/openssl.cnf -days 365 -out X509CA/certs/CertName_csr.pem -keyout X509CA/certs/CertName_pk.pem
이 명령은 인증서의 개인 키에 대한 패스 문구와 인증서의 고유 이름에 대한 정보를 입력하라는 메시지를 표시합니다.
CSR 고유 이름의 일부 항목은 CA 인증서의 값과 일치해야 합니다( openssl.cnf
파일의 CA 정책 섹션에서 지정됨). 기본 openssl.cnf
파일을 사용하려면 다음 항목이 일치해야 합니다.
- 국가 이름
- 시/도 이름
- 조직 이름
인증서 제목 DN의 일반 이름은 일반적으로 인증서 소유자의 ID를 나타내는 데 사용되는 필드입니다. 일반 이름은 다음 조건을 준수해야 합니다.
- OpenSSL 인증 기관에서 생성한 모든 인증서에 대해 공통 이름을 구분해야 합니다.
- HTTPS 클라이언트가 URL 무결성 검사를 구현하는 경우 일반 이름이 인증서를 배포할 호스트의 DNS 이름과 동일한지 확인해야 합니다( 2.4절. “HTTPS 인증서에 대한 특수 요구 사항”참조).
HTTPS URL 무결성 검사의 목적을 위해 subjectAltName
확장이 Common Name보다 우선합니다.
2.5.4.5. CSR에 서명 링크 복사링크가 클립보드에 복사되었습니다!
openssl ca -config X509CA/openssl.cnf -days 365 -in X509CA/certs/CertName_csr.pem -out X509CA/certs/CertName.pem
openssl ca -config X509CA/openssl.cnf -days 365 -in X509CA/certs/CertName_csr.pem -out X509CA/certs/CertName.pem
이 명령에는 new_ca.pem
CA 인증서와 연결된 개인 키에 대한 암호 문구가 필요합니다. 예를 들면 다음과 같습니다.
인증서에 서명하려면 CA 개인 키 전달 문구를 입력해야 합니다( 2.5.2절. “자체 CA 설정”참조).
openssl.cnf
파일의 [CA_default]
섹션에 copy_extensions=copy
를 설정하지 않은 경우 서명된 인증서에는 원래 CSR에 있는 인증서 확장 기능이 포함되지 않습니다.
2.5.4.6. 파일 연결 링크 복사링크가 클립보드에 복사되었습니다!
다음과 같이 CA 인증서 파일 CertName.pem
인증서 파일 및 CertName_pk.pem
개인 키 파일을 연결합니다.
Windows
copy X509CA\ca\new_ca.pem + X509CA\certspass:quotes[_CertName_].pem + X509CA\certspass:quotes[_CertName_]_pk.pem X509CA\certspass:quotes[_CertName_]_list.pem
copy X509CA\ca\new_ca.pem + X509CA\certspass:quotes[_CertName_].pem + X509CA\certspass:quotes[_CertName_]_pk.pem X509CA\certspass:quotes[_CertName_]_list.pem
UNIX
cat X509CA/ca/new_ca.pem X509CA/certs/CertName.pem X509CA/certs/CertName_pk.pem > X509CA/certs/CertName_list.pem
cat X509CA/ca/new_ca.pem X509CA/certs/CertName.pem X509CA/certs/CertName_pk.pem > X509CA/certs/CertName_list.pem
2.5.4.7. PKCS#12 파일 생성 링크 복사링크가 클립보드에 복사되었습니다!
다음과 같이 CertName_list.pem
파일에서 PKCS#12 파일을 생성합니다.
openssl pkcs12 -export -in X509CA/certs/CertName_list.pem -out X509CA/certs/CertName.p12 -name "New cert"
openssl pkcs12 -export -in X509CA/certs/CertName_list.pem -out X509CA/certs/CertName.p12 -name "New cert"
PKCS#12 인증서를 암호화하기 위한 암호를 입력하라는 메시지가 표시됩니다. 일반적으로 이 암호는 CSR 암호와 동일합니다. 이 암호는 많은 인증서 리포지토리에 필요합니다.
2.5.4.8. 필요에 따라 단계를 반복 링크 복사링크가 클립보드에 복사되었습니다!
3~6단계를 반복하여 시스템에 대한 전체 인증서 세트를 생성합니다.
1. (선택 사항) subjectAltName 확장을 지웁니다. 링크 복사링크가 클립보드에 복사되었습니다!
특정 호스트 시스템에 대한 인증서를 생성한 후 openssl.cnf
파일에서 subjectAltName
설정을 지워 실수로 다른 인증서 세트에 잘못된 DNS 이름을 할당하지 않는 것이 좋습니다.
openssl.cnf
파일에서 subjectAltName
설정을 주석 처리하고(행 시작 시 #
문자를 추가하여) copy_extensions
설정을 주석 처리합니다.