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: 서버인증서 키 파일 비밀번호
'개발' 카테고리의 다른 글
커널 드라이버 전자 서명 (디지털 서명, 코드 사인) (0) | 2024.12.12 |
---|---|
inf 파일 양식 (0) | 2024.12.12 |
Windows Version Info (윈도우 버전 정보, OSVERSIONINFOEX) (0) | 2024.12.09 |
정규 표현식(regular expression) 구성 요소 (0) | 2024.12.09 |
라이브러리 파일(.lib) 함수 목록 확인하는 방법 (0) | 2024.12.09 |