Logo
SHO
    • Login

X.509

  1. Tools
  2. X.509

Private Key 생성



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 크기. 아래 부록 참고

CSR 생성



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=LocationYongsan
/O=Organization, 회사명회사
/OU=Organization Unit, 부서명부서
/CN=Common NameRoot CA, example.org 등

CSR로부터 인증서 생성


CA 인증서 생성

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

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 사용시 브라우저에서 경고함


End-entity 인증서 생성

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

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 을 관리하기 위한 파일

Private Key 비트 크기

출처: 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 사용 권고

Logo SHO
  • Seungho Kim
  • About me
  • Miscellaneous
  • Tools
    • Request
    • En/Decode
    • Numbers
    • X.509
  • Useful Links
    • Regex101
    • Markdown
    • MD2PDF
    • Photopea
    • Crontab
    • Coolors
    • HSLub
    • AudioMass
    • 파일키위
    • Syntax highlighter
    • JSON Formatter
    • QR Generator
  • For Me!
  • My Links
    • AWS Console
    • may
    • Oracle Cloud

© 2019 Seungho Kim