openssl genrsa -out key.pem 2048
* 기본 config 경로: /etc/pki/tls/openssl.cnf
-des, -seed, -aes256, ...: 해당하는 방식으로 키 암호화. 미사용시 암호화 X
-passout pass:PASSWORD: 키를 암호화할 경우 암호 지정. 미사용시 입력 프롬프트가 뜸
-f4, -3: E value 지정. 기본값: -f4 (0x10001)
1024, 2048, 3072, 4096, ...: Private Key Bit 크기. 아래 부록 참고
openssl req -new -key key.pem -out my.csr
#Digest 전체 목록
openssl dgst -h
-md5, -sha1, -sha256, ...: 서명에 사용할 Digest. 기본값은 버전마다 다름. 적당히 sha256 사용.
-subj: 인증서 주제 설정. 미사용시 입력 프롬프트 표시
예시) -subj "/C=KR/O=example/CN=Example Certificate"
필드 | 의미 | 예시 |
---|---|---|
/C= | 국가 | KR |
/ST= | State, 시/도 | Seoul |
/L= | Location | Yongsan |
/O= | Organization, 회사명 | 회사 |
/OU= | Organization Unit, 부서명 | 부서 |
/CN= | Common Name | Root CA, example.org 등 |
basicConstraints = critical, CA:TRUE
#basicConstraints = critical, CA:TRUE, pathlen:0
# pathlen: 하위에 존재할 수 있는 CA수. 0일 경우 하위 CA가 없으므로 End-entity 서명만 가능
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
keyUsage = cRLSign, keyCertSign
openssl x509 -req -days 3650 -extfile ca.ext -signkey key.pem -in my.csr -out root.crt
-set_serial 1: 시리얼 값 지정. 미지정시 임의값 생성
-md5, -sha1, -sha256, ...: 서명에 사용할 Digest
(직접 신뢰 설정을 하는 Root CA 가 아니라면) sha256 사용. sha1 등 취약한 digest 사용시 브라우저에서 경고함
basicConstraints = critical, CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = DNS:example.org, IP:1.1.1.1
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
-CAcreateserial: 시리얼 자동 지정 및 시리얼 파일 생성 (.srl)
-CAserial root.srl: CAcreateserial 로 한번 발급한 이후에는 이 옵션으로 시리얼 생성 파일 입력
-md5, -sha1, -sha256, ...: 서명에 사용할 Digest
(직접 신뢰 설정을 하는 Root CA 가 아니라면) sha256 사용. sha1 등 취약한 digest 사용시 브라우저에서 경고함
# CSR
openssl req -noout -text -in my.csr
openssl req -noout -modulus -in my.csr | openssl md5
# 인증서
openssl x509 -noout -text -in end.crt
openssl x509 -noout -modulus -in end.crt | openssl md5
# 개인키
openssl rsa -noout -text -in my.key
openssl rsa -noout -modulus -in my.key | openssl md5
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): 타원곡선을 이용한 전자서명 알고리즘
종류 | 확장자 | 설명 |
---|---|---|
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 을 관리하기 위한 파일 |
출처: https://en.wikipedia.org/wiki/Key_size
(대략적 요약)
* 128bit AES가 충분한 보안 수준으로 고려되었지만, 양자 컴퓨터의 등장 후 비밀 문서에 256bit 사용 권고
RSA / 대칭키 보안수준 (서로 비슷한 정도)
1024bit RSA - 80bit 대칭키
2048bit RSA - 112bit 대칭키
3072bit RSA - 128bit 대칭키
15360bit RSA - 256bit 대칭키
시기에 따른 보안수준 권고
1024bit RSA: 2006~2010년에 취약해짐
2048bit RSA: 2030년까지 유효할 것으로 판단
2030년 이후에는 3072bit 사용 권고