ssl 사용시 참고
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 사용 권고
'IT > 용어정리' 카테고리의 다른 글
클라우드 컴퓨팅 (1) | 2024.04.24 |
---|---|
리눅스 압축 및 해제 (0) | 2022.06.13 |
리눅스 명령어 (0) | 2021.09.30 |
Elasticsearch (0) | 2021.02.16 |
HMAC (0) | 2021.02.16 |