ssl 사용시 참고

2021. 10. 27. 15:45
728x90

0. 용어 정리

PKI (Public Key Infrastructure); 공개키 기반 구조

X.509: 공개키 인증서와 인증 알고리즘을 사용하기 위한 PKI 표준

PKCS (Public Key Cryptography Standards): Private Key를 저장하는 문법에 관한 표준
            PKCS#1, PKCS#8, PKCS#12 등을 사용

CRL (Certificate Revocation List), OCSP (Online Certificate Status Protocol): 인증서 유효성 점검을 위한 표준/방법

CA (Certificate Authority): 인증 기관

ASN.1 (Abstract Syntax Notation One): 추상 구문 기법, 네트웍상의 데이터 교환을 정의한 프로토콜

RSA (Rivest–Shamir–Adleman): 공개키 암호시스템의 하나

ECDSA (Elliptic Curve Digital Signature Algorithm): 타원곡선을 이용한 전자서명 알고리즘

 

0-2. 인코딩/파일 종류 정리

참고로 당연히 아래에 적는 확장자는 참고용으로 강제사항은 아님.
PEM 포맷의 개인키를 my.key.pem, my.key, key.pem 등등 저장하기 나름.

인코딩에 따른 구분

 종류  확장자  설명
 DER (Distinguished Encoding Representation)  .der  ASN.1을 표현하는 방식의 종류. (바이너리로 저장됨)
 PEM (Privacy Enhanced Mail)  .pem  Base64로 인코딩된 ASCII 텍스트
 (표준으로 더 자주 사용됨)

 

내용에 따른 구분

 종류  확장자  설명
 Private Key  .key  개인키
 Certificate  .cer (Windows 주로 사용)
 .crt (*NIX 주로 사용)
 인증서
 PKCS #12  .p12, .pfx  하나의 파일에 개인키, 인증서 등을 같이 저장하는 방식에 대한 표준
 Certificate Signing Request  .csr  인증서 발급을 위해 내 개인키 서명을 CA에게 보내기 위한 파일
 Serial  .srl  CA가 인증서를 발급할 때 Serial 을 관리하기 위한 파일

 


1. OpenSSL 명령어

* 기본 config 경로: /etc/pki/tls/openssl.cnf

1) Private Key 생성

openssl genrsa -out key.pem 2048

Copy

 

[옵션]

-des, -seed, -aes256, ...: 해당하는 방식으로 키 암호화. 미사용시 암호화 X

-passout pass:PASSWORD: 키를 암호화할 경우 암호 지정. 미사용시 입력 프롬프트가 뜸

-f4 (0x10001), -3: E value 지정. 기본값: -f4

1024, 2048, 3072, 4096, ...: Private Key Bit 크기. 아래 부록 참고

 


 

2) CSR 생성

openssl req -new -key key.pem -out my.csr

Copy

 

[옵션]

-md5, -sha1, -sha256, ...: 서명에 사용할 Digest. 기본값은 버전마다 다르고 적당히 sha256 사용.
            전체 목록은 openssl dgst -h

-subj: 인증서 주제 설정. 미사용시 입력 프롬프트 표시
    예시) -subj "/C=KR/O=sho/CN=SHO Certificate"

 필드  의미  예시
 /C=  국가  KR
 /ST=  State, 한국이라면 시/도  Seoul
 /L=  Location  Yongsan
 /O=  Organization, 회사명  회사
 /OU=  Organization Unit, 부서명  부서
 /CN=  Common Name  SHO Root CA, blog.ioate.kr 등

 


 

3) CSR로부터 인증서 생성

X.509 V3 확장 설정

(아래에서 사용할 ca.ext, end.ext 파일)

 

Web TLS 인증서 (CA용) - ca.ext

basicConstraints = critical, CA:TRUE #basicConstraints = critical, CA:TRUE, pathlen:0 subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer keyUsage = cRLSign, keyCertSign

Copy

 

Web TLS 인증서 (End-entity, 사이트용) - end.ext

basicConstraints = critical, CA:FALSE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth subjectAltName = DNS:blog.iolate.kr, IP:1.1.1.1

Copy

 

CA 인증서 생성

openssl x509 -req -days 3650 -extfile ca.ext -signkey key.pem -in my.csr -out root.crt

Copy

 

[옵션]

-set_serial 1: 시리얼 값 지정. 미지정시 임의값 생성

-md5, -sha1, -sha256, ...: 서명에 사용할 Digest.
            전체 목록은 openssl dgst -h
            직접 신뢰 설정을 하는 Root CA 가 아니라면, sha256 사용. sha1 등 취약한 digest 사용시 브라우저에서 경고함

 

End-entity 인증서 생성

openssl x509 -req -days 365 -extfile end.ext -CA root.crt -CAcreateserial -CAkey my.key -in my.csr -out end.crt openssl x509 -req -days 365 -extfile end.ext -CA root.crt -CAserial root.srl -CAkey my.key -in my.csr -out end.crt

Copy

 

[옵션]

-CAcreateserial: 시리얼 자동 지정 및 시리얼 파일 생성 (.srl)

-CAserial root.srl: CAcreateserial 로 한번 발급한 이후에는 이 옵션으로 시리얼 생성 파일 입력

-md5, -sha1, -sha256, ...: 서명에 사용할 Digest. sha256 사용. sha1 등 취약한 digest 사용시 브라우저에서 경고함

 


4) 생성된 파일 정보 확인

CSR / 인증서 / 개인키

openssl [req/x509/rsa] -noout -text -in [my.csr/end.crt/my.key] openssl [req/x509/rsa] -noout -modulus -in [my.csr/end.crt/my.key] | openssl md5

Copy

 


2. 부록

Private Key 비트 크기

출처: https://en.wikipedia.org/wiki/Key_size

(대략적 요약)

* 128bit AES가 충분한 보안 수준으로 고려되었지만, 양자 컴퓨터의 등장 후 비밀 문서에 256bit 사용 권고

* 1024bit RSA와 80bit 대칭키 /
   2048bit RSA와 112bit 대칭키 / 
   3072bit RSA와 128bit 대칭키 /
   15360bit RSA와 256bit 대칭키  가 서로 보안 수준이 비슷하다고 판단됨.

* 1024bit RSA는 2006~2010년에 취약해짐.
   2048bit RSA는 2030년까지 유효할 것으로 판단.
   2030년 이후에는 3072bit 사용 권고

728x90

'IT > 용어정리' 카테고리의 다른 글

클라우드 컴퓨팅  (1) 2024.04.24
리눅스 압축 및 해제  (0) 2022.06.13
리눅스 명령어  (0) 2021.09.30
Elasticsearch  (0) 2021.02.16
HMAC  (0) 2021.02.16

BELATED ARTICLES

more