암호학에서 X.509 인증서 생성하기

LinuxBeginner
지금 연습하기

소개

본 랩에서는 현대 디지털 보안의 초석인 X.509 인증서를 생성하고 관리하는 실질적인 측면을 탐구합니다. X.509 인증서는 공개 키를 개인 또는 서버와 같은 식별자에 바인딩하는 디지털 문서이며, 웹 트래픽 보안을 위한 TLS/SSL과 같은 프로토콜의 근간을 이룹니다.

강력한 openssl 명령줄 도구를 사용하여 필수적인 인증서 관리 작업을 수행하는 방법을 배우게 됩니다. 먼저 인증서의 구조를 이해한 다음, 개발 목적으로 자체 서명된 (self-signed) 인증서를 생성할 것입니다. 그 후, 인증서 서명 요청 (CSR, Certificate Signing Request) 을 생성하고 간단한 인증 기관 (CA, Certificate Authority) 역할을 수행하여 이를 서명함으로써 자체 시스템 내에서 신뢰할 수 있는 인증서를 생성하게 됩니다.

이 랩이 끝날 때쯤이면 인증서 수명 주기 (certificate lifecycle) 에 대한 탄탄한 실습 기반의 이해를 갖추게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

X.509 인증서 개요

이 단계에서는 X.509 인증서의 기본 이론을 다룹니다. 여기에는 실행할 명령이 없으며, 이 섹션은 실습 작업을 시작하기 전에 이해를 돕기 위한 것입니다.

X.509 인증서는 신뢰를 구축하는 데 필수적인 정보를 포함하는 표준화된 디지털 문서입니다. 주요 구성 요소는 다음과 같습니다.

  • 주체 (Subject): 인증서 소유자의 신원 (예: 개인, www.example.com과 같은 서버 이름).
  • 발급자 (Issuer): 신원을 확인하고 인증서에 서명한 주체 (인증 기관 또는 CA).
  • 공개 키 (Public Key): 주체의 개인 키에 해당하는 공개 키.
  • 유효 기간 (Validity Period): 인증서가 유효한 기간 (Not BeforeNot After 날짜).
  • 서명 (Signature): 발급자의 디지털 서명으로, 인증서의 진위성을 보장합니다.

**자체 서명 인증서 (Self-signed certificate)**는 발급자와 주체가 동일한 특수한 유형의 인증서입니다. 본질적으로 인증서가 스스로 서명하는 것입니다. 이러한 인증서는 알려진 CA 에 의해 검증되지 않았기 때문에 공개 브라우저나 시스템에서 신뢰하지 않지만, 클라이언트와 서버를 모두 제어하는 내부 테스트, 개발 환경 또는 사설 네트워크에서 매우 유용합니다.

다음 단계에서는 자체 서명 인증서를 직접 생성하게 됩니다.

자체 서명 인증서 생성

이 단계에서는 자체 서명 인증서를 생성합니다. 프로세스를 단순화하기 위해 ~/project 디렉토리에 private.pem이라는 이름의 개인 키가 이미 생성되어 있습니다. 이 키를 사용하여 인증서를 생성할 것입니다.

openssl req 명령은 인증서 요청을 생성하고 처리하는 데 사용됩니다. 사용할 플래그를 분석해 보겠습니다.

  • -new: 새 인증서 요청을 생성합니다.
  • -x509: 인증서 요청 대신 자체 서명된 인증서를 출력합니다.
  • -key private.pem: 사용할 개인 키를 지정합니다.
  • -out cert.pem: 인증서의 출력 파일 이름을 지정합니다.
  • -days 365: 인증서의 유효 기간을 365 일로 설정합니다.
  • -subj "...": 주체 정보를 비대화형 (non-interactively) 으로 제공합니다.

이제 다음 명령을 터미널에서 실행하여 인증서를 생성하십시오.

openssl req -new -x509 -key private.pem -out cert.pem -days 365 -subj "/C=US/ST=California/L=Mountain View/O=MyOrg/CN=example.com"

이 명령은 출력을 생성하지 않지만 새 파일을 생성합니다. 현재 디렉토리의 파일을 나열하여 cert.pem 파일이 생성되었는지 확인할 수 있습니다.

ls

출력에서 미리 생성된 파일들과 함께 cert.pem을 확인해야 합니다.

ca-key.pem  ca.pem  cert.pem  private.pem

인증서 세부 정보 보기

이 단계에서는 방금 생성한 자체 서명 인증서의 내용을 검사합니다. 이를 통해 세부 정보를 확인하고 구조를 사람이 읽을 수 있는 형식으로 이해할 수 있습니다.

인증서 파일을 보고 조작하도록 설계된 openssl x509 명령을 사용할 것입니다.

  • -in cert.pem: 입력 인증서 파일을 지정합니다.
  • -text: 전체 인증서 세부 정보를 텍스트 형식으로 출력합니다.
  • -noout: 명령이 인증서의 인코딩된 버전을 출력하는 것을 방지합니다.

다음 명령을 실행하여 cert.pem의 세부 정보를 확인하십시오.

openssl x509 -in cert.pem -text -noout

출력은 상당히 길겠지만, 스크롤하면서 다음 주요 필드에 주의를 기울이십시오.

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            ...
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, ST = California, L = Mountain View, O = MyOrg, CN = example.com
        Validity
            Not Before: ...
            Not After : ...
        Subject: C = US, ST = California, L = Mountain View, O = MyOrg, CN = example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    ...
                Exponent: 65537 (0x10001)
...

Issuer 필드와 Subject 필드가 동일하다는 점에 유의하십시오. 이것이 바로 자체 서명 인증서의 특징입니다.

인증서 서명 요청 (CSR) 생성

이 단계에서는 인증서 서명 요청 (CSR, Certificate Signing Request) 을 생성합니다. CSR 은 공개 키와 신원 정보를 포함하는 인코딩된 텍스트 블록입니다. 서명된 디지털 인증서를 요청하기 위해 CSR 을 인증 기관 (CA, Certificate Authority) 에 보냅니다.

다시 openssl req 명령을 사용하지만, 이번에는 -x509 플래그 없이 사용하여 자체 서명 인증서 대신 CSR 을 생성합니다.

  • -new: 새 요청임을 나타냅니다.
  • -key private.pem: 기존 개인 키를 사용합니다.
  • -out csr.pem: CSR 의 출력 파일 이름을 지정합니다.
  • -subj "...": 요청하는 인증서의 신원 정보를 제공합니다.

가상의 웹 애플리케이션에 대한 CSR 을 생성하려면 다음 명령을 실행하십시오.

openssl req -new -key private.pem -out csr.pem -subj "/C=US/ST=New York/L=New York City/O=MyWebApp/CN=webapp.example.com"

이 명령은 csr.pem이라는 새 파일을 생성합니다. ls 명령으로 생성을 확인할 수 있습니다.

ls

이제 프로젝트 디렉토리에 csr.pem이 표시됩니다.

ca-key.pem  ca.pem  cert.pem  csr.pem  private.pem

이 CSR 은 이제 서명을 위해 CA 에 전송할 준비가 되었습니다.

CSR 서명하기

이 마지막 단계에서는 이전 단계에서 생성한 CSR 에 서명하기 위해 인증 기관 (CA) 역할을 수행합니다. 이 목적을 위해 환경에 간단한 CA 인증서 (ca.pem) 와 해당 개인 키 (ca-key.pem) 가 미리 생성되어 있습니다.

CSR 을 처리하고 새 인증서를 발급하기 위해 openssl x509 -req 명령을 사용할 것입니다.

  • -req: CSR 을 처리하고 있음을 지정합니다.
  • -in csr.pem: 입력 CSR 파일입니다.
  • -CA ca.pem: 서명에 사용되는 CA 의 인증서입니다.
  • -CAkey ca-key.pem: 서명에 사용되는 CA 의 개인 키입니다.
  • -out signed-cert.pem: 새로 서명된 인증서의 출력 파일입니다.
  • -days 365: 유효 기간을 설정합니다.
  • -CAcreateserial: CA 가 발급된 인증서를 추적하는 데 필요한 일련 번호 파일 (ca.srl) 을 생성하고 관리합니다.

CSR 에 서명하려면 아래 명령을 실행하십시오.

openssl x509 -req -in csr.pem -CA ca.pem -CAkey ca-key.pem -out signed-cert.pem -days 365 -CAcreateserial

서명이 성공적으로 완료되었음을 확인하는 출력이 표시됩니다.

Certificate request self-signature ok
subject=C = US, ST = New York, L = New York City, O = MyWebApp, CN = webapp.example.com

이제 파일을 나열하여 새로 생성된 인증서인 signed-cert.pem과 일련 번호 파일인 ca.srl을 확인하십시오.

ls
ca-key.pem  ca.pem  ca.srl  cert.pem  csr.pem  private.pem  signed-cert.pem

이 새 인증서는 openssl x509 -in signed-cert.pem -text -noout으로 검사할 수 있습니다. 이제 Issuer는 CA(CN=myca.com) 이고 Subject는 CSR 의 신원 (CN=webapp.example.com) 임을 알 수 있습니다.

요약

본 랩 (Lab) 에서는 openssl 도구를 사용하여 X.509 인증서의 기본 수명 주기에 대한 실습 경험을 쌓았습니다.

다음과 같은 작업을 성공적으로 수행하는 방법을 배웠습니다.

  • X.509 인증서의 핵심 구성 요소와 자체 서명 인증서 (self-signed certificate) 의 개념 이해하기.
  • openssl req를 사용하여 개발 및 테스트에 적합한 자체 서명 인증서 생성하기.
  • openssl x509를 사용하여 인증서의 세부 정보를 검사하여 내용을 확인하기.
  • CA 로부터 공식적으로 인증서를 요청하기 위해 인증서 서명 요청 (CSR) 생성하기.
  • 간단한 인증 기관 (CA) 역할을 수행하여 CSR 에 서명하고 새롭고 유효한 인증서 발급하기.

이러한 기술은 시스템 관리, 네트워크 보안 또는 소프트웨어 개발에 관련된 모든 사람에게 필수적이며, 다양한 애플리케이션에서 안전한 통신을 관리하기 위한 기반을 제공합니다.