본문 바로가기

개발

HTTPS 통신에 필요한 Root 인증서와 Server 인증서 만들기

반응형

SAN 인증서에 대한 내용은 아래 링크 참고.

참고 - http://www.solanara.net/solanara/openssl#head_openssl_certs_san

인증서에 추가적인 subject 를 넣고 싶을때 SAN 필드를 사용한다.

웹 서버용 인증서에서 SAN을 사용하는 경우는 보통 DNS 이름을 여러개 주기 위함이다.

CN에는 2개 이상의 DNS 이름을 넣을 수 없기 때문이다.

CN 필드만 검사하는 구형 브라우저에서는 사용할 수 없는 기능이지만, 2016년 현재 출시 된 모든 상용 브라우저에서 사용 가능하다.

또한 Chrome 58 부터 https 인증서에 SAN 항목이 없으면, (net::ERR_CERT_COMMON_NAME_INVALID)오류가 발생하면서 접속되지 않는다. (Deprecations and Removals in Chrome 58)

Firefox 48 부터도 신형 인증서에 한해 SAN 항목이 필수이다. (don't fall back to subject common name for name information for new certificates)

※ 먼저 작업을 위해서는 openssl.exe이 필요하다.

1. cnf 파일 생성

아래 빨간색 글씨로 적어놓은 부분을 그대로 복사하여 cnf 파일을 생성하면 된다.

파일명은 마음대로 하면 되고 확장자만 cnf로 하면 됨. ex) cert.cnf (아래 예제에서 cert.cnf로 사용)

(초록 글씨로 표시 된 부분은 맞춰서 수정 필요.)

[req]

distinguished_name = req_distinguished_name

req_extensions = v3_req

[req_distinguished_name]

countryName = Country Name (2 letter code)

countryName_default = KR

countryName_min = 2

countryName_max = 2

stateOrProvinceName = State or Province Name (full name)

stateOrProvinceName_default = GyungGiDo

localityName = Locality Name (eg, city)

localityName_default = Pangyo

0.organizationName = Organization Name (eg, company)

0.organizationName_default = 회사이름

organizationalUnitName = Organizational Unit Name (eg, section)

organizationalUnitName_default = 부서이름

commonName = Common Name (e.g. server FQDN or YOUR name)

commonName_default = 테스트.주소.co.kr

commonName_max = 64

emailAddress = Email Address

emailAddress_default = 메일주소@회사메일도메인.co.kr

emailAddress_max = 64

[v3_req]

basicConstraints = CA:FALSE

keyUsage = nonRepudiation, digitalSignature, keyEncipherment

subjectAltName = @alt_names

[alt_names]

DNS.1 = 사용할.도메인주소.co.kr

2. ext 파일 생성

마찬가지로 아래 빨간색 글씨로 적어놓은 부분을 그대로 복사하여 ext 파일을 생성하면 된다.

파일명은 마음대로 하면 되고 확장자만 ext로 하면 됨. ex) cert.ext (아래 예제에서 cert.ext로 사용)

(초록 글씨로 표시 된 부분은 맞춰서 수정 필요.)

authorityKeyIdentifier=keyid,issuer

basicConstraints=CA:FALSE

keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

subjectAltName = @alt_names

[alt_names]

# DOMAIN NAMES

DNS.1 = 사용할.도메인주소.co.kr

3. 명령 프롬프트에 아래 순서대로 입력

4096비트나 SHA256 같은 옵션들은 보고 알아서 수정할 것.

다음으로 아래 빨간색 글씨로 적어놓은 명령어를 명령 프롬프트에 차례대로 입력해주면 된다.

(초록 글씨로 표시 된 부분은 맞춰서 수정 필요.)

명령 프롬프트 창에 표시되는 다른 문구들은 전부 제외하고 오로지 사용자가 입력해줘야 하는 명령어만 적어놓음.

(문구가 포함 된 전체는 5번에 별도 기재)

3_1. ROOT CA KEY 파일 생성.

[openssl genrsa -des3 -out RootCA인증서.key 4096]

[RootCA인증서 키 파일 비밀번호]

[RootCA인증서 키 파일 비밀번호]

3_2. ROOT CA CRT 파일 생성.

[openssl req -new -x509 -days 7300 -key RootCA인증서.key -out RootCA인증서.crt -sha256 -subj "/C=KR/ST=GyungGiDo/L=Pangyo/O=회사이름/OU=부서이름/CN=공통이름/emailAddress=메일주소@회사메일도메인.co.kr"]

[RootCA인증서 키 파일 비밀번호]

3_3. Server KEY 파일 생성.

[openssl genrsa -out 서버인증서.key 4096]

3_4. Server CSR 파일 생성.

[openssl req -new -out 서버인증서.csr -key 서버인증서.key -config cert.cnf -subj "/C=KR/ST=GyungGiDo/L=Pangyo/O=회사이름/OU=부서이름/CN=공통이름/emailAddress=메일주소@회사메일도메인.co.kr"]

3_5. 생성 된 CSR 파일 확인. (optional)

[openssl req -text -noout -in 서버인증서.csr]

3_6. CA 인증서를 사용하여 SAN(SubjectAltName) Server 인증서 생성.

[openssl x509 -req -CA RootCA인증서.crt -CAkey RootCA인증서.key -days 7300 -in 서버인증서.csr -out 서버인증서.crt -sha256 -CAcreateserial -extfile cert.ext]

3_7. SAN Server 인증서(.crt)를 PEM 파일로 생성.

[openssl x509 -in 서버인증서.crt -out 서버인증서.pem -outform PEM]

3_8. PEM 파일을 PFX 파일로 생성.

[openssl pkcs12 -export -in 서버인증서.pem -inkey 서버인증서.key -out 서버인증서.pfx]

[서버인증서 키 파일 비밀번호]

[서버인증서 키 파일 비밀번호]

4. 끝

5. 아래는 위 명령 프롬프트에 입력 시 나타나는 문구 포함.

(초록 글씨로 표시 된 부분은 맞춰서 수정 필요.)

5_1. ROOT CA KEY 파일 생성.

# openssl genrsa -des3 -out RootCA인증서.key 4096

#> Enter pass phrase for RootCA인증서.key: RootCA인증서 키 파일 비밀번호

#> Verifying - Enter pass phrase for RootCA인증서.key: RootCA인증서 키 파일 비밀번호

5_2. ROOT CA CRT 파일 생성.

# openssl req -new -x509 -days 7300 -key RootCA인증서.key -out RootCA인증서.crt -sha256 -subj "/C=KR/ST=GyungGiDo/L=Pangyo/O=회사이름/OU=부서이름/CN=공통이름/emailAddress=메일주소@회사메일도메인.co.kr"

#> Enter pass phrase for RootCA인증서.key: RootCA인증서 키 파일 비밀번호

5_3. Server KEY 파일 생성.

# openssl genrsa -out 서버인증서.key 4096

5_4. Server CSR 파일 생성.

# openssl req -new -out 서버인증서.csr -key 서버인증서.key -config cert.cnf -subj "/C=KR/ST=GyungGiDo/L=Pangyo/O=회사이름/OU=부서이름/CN=공통이름/emailAddress=메일주소@회사메일도메인.co.kr"

5_5. 생성 된 CSR 파일 확인. (optional)

# openssl req -text -noout -in 서버인증서.csr

5_6. CA 인증서를 사용하여 SAN(SubjectAltName) Server 인증서 생성.

# openssl x509 -req -CA RootCA인증서.crt -CAkey RootCA인증서.key -days 7300 -in 서버인증서.csr -out 서버인증서.crt -sha256 -CAcreateserial -extfile cert.ext

5_7. SAN Server 인증서(.crt)를 PEM 파일로 생성.

# openssl x509 -in 서버인증서.crt -out 서버인증서.pem -outform PEM

5_8. PEM 파일을 PFX 파일로 생성.

# openssl pkcs12 -export -in 서버인증서.pem -inkey 서버인증서.key -out 서버인증서.pfx

#> Enter Export Password: 서버인증서 키 파일 비밀번호

#> Verifying - Enter Export Password: 서버인증서 키 파일 비밀번호

반응형