오픈소스 플랫폼에 앱을 등록하는 작업 중, 예상치 못하게 "인증서를 발급받아야 한다"는 절차가 필요한 것을 알게됐다.
처음엔 도메인 인증처럼 브라우저에서 뭔가 클릭하는 방식일까 싶었는데, 인증서를 이용한 절차가 필요한 것으로 생각했는데, 아래 4가지 요소에 대한 이해가 필요했다.

 

  • .key (비공개키)
  • .csr (인증서 요청 파일)
  • .crt (인증서)
  • openssl (라이브러리 및 명령어 사용)

 

openssl을 통한 crt 인증서 발급하기

 


오늘은 이 흐름 속에서 핵심적인 도구인 OpenSSL을 사용해, CSR과 키, 인증서를 생성하는 과정을 정리해본다.
(이건 전체 인증서 발급 과정의 시작부분일 뿐이지만, 전체 과정흐름을 이해하기 위해선 필요하다.)

 

 

전체 흐름 이해하기

 인증서 발급을 처음 접하는 사람이라면, 뭐가 먼저고 뭐가 나중인지도 헷갈릴 수 있다.

 아래 다이어그램은 인증서 요청과 발급 흐름을 한눈에 보여준다:

인증기관은 공개키와 신원정보(앱 이름, 조직명, 도메인등)을 기준으로 CRT를 발급해준다.

 

 인증서 발급을 위해서는 내가 직접 만든 CSR을 제출해야 하고, 거기에 들어있는 공개키와 내 신원 정보(앱명, 조직명 등)를 기준으로 인증기관이 CRT를 만들어주는 구조다.

 

 

1. 비공개키 생성하기

openssl genrsa -out myapp.key 2048

 

  • genrsa: RSA 알고리즘으로 키 생성
  • -out myapp.key: 출력 파일명
  • 2048: 비트 수 (보통 2048 이상이면 충분)

이렇게 생성된 .key 파일은 절대 외부에 공유하면 안 되는 비공개키다.

 

 window 개발환경이라면 openssl이 cmd에는 설치되어있지 않기 때문에, git bash를 통해 실행하면 좋다.

 

 

2. CSR(Certificate Signing Request) 생성

openssl req -new -key myapp.key -out myapp.csr

 

 

  • -new: 새로운 CSR을 만들겠다는 뜻
  • -key: 앞에서 만든 비공개키를 사용
  • -out: CSR 출력 파일

 

이 명령어를 실행하면 아래와 같은 질문을 받는다:

 

Country Name (2 letter code) [AU]: KR
State or Province Name (full name) [Some-State]: Seoul
Locality Name (eg, city) []: Gangnam
Organization Name (eg, company) []: My Open App
Common Name (e.g. server FQDN or YOUR name) []: my-app-name​

가장 중요한 건 Common Name 항목이다.
이게 인증서의 대상이 되는 이름이기 때문. (앱 이름, 도메인 등)

 

 

 CSR을 생성하고 나면 해당 파일을 오픈소스 플랫폼에 PR을 통해 CRT를 발급받을 수 있다. 

 

 이 단계는 "제가 개발자입니다"라고 요청을 보내는 과정이고, CRT를 발급받는건 "당신이 그 앱 개발자임을 저희가 증명하는 증명서를 드리겠습니다." 하는 과정이라고 쉽게 생각하면 된다.

 

 

3. 테스트용 self-signed 인증서(CRT) 만들어보기

실제 CRT 발급 주체는 오픈소스 플랫폼측이지만 직접 만들어볼 수 도 있다. 원래는 CSR을 해당 오픈소스 플랫폼 리포지토리 등에 PR 올리고 발급해주기를 기다리면 된다.

 

openssl x509 -req -in myapp.csr -signkey myapp.key -out myapp.crt -days 365

 

  • -signkey: 내가 가진 비공개키로 서명
  • -days: 인증서 유효기간 (예: 365일)

 

그럼 CRT는 어디에 쓰이고, 왜 검증이 가능할까?

 

  • CRT 파일에는 공개키가 포함돼 있다.
  • 내가 어떤 파일에 비공개키로 서명하면, 다른 사람은 내 CRT에 포함된 공개키로 그 서명을 검증할 수 있다.
  • 이때 서명이 유효하면, “이건 그 사람이 비공개키로 만든 게 맞다”고 판단하는 것.

 

즉, CRT는 "공개키의 신뢰성을 보장하는 문서"이고,
공개키는 "비공개키로 서명된 데이터를 검증하는 데" 사용된다.

 

 

그래서 오픈소스 플랫폼들은 “CRT를 제출해주세요”, “그걸로 앱을 개발자분이 직접 만든 건지 확인하겠습니다”라고 요구하는 것이다.

 

이 과정을 정확히 거치면, 누가 내 앱을 흉내 내거나 위조해서 올리는 일을 막을 수 있다.내가 직접 만든 파일이고, 내 서명이 붙었고, 그걸 내 CRT로 검증 가능하다는 게 곧 디지털 신원이 되는 셈이다.

 

 

마무리

 오픈소스 플랫폼에 개발자로 참여하게될 좋은 기회가 생겨, 인증서 발급하는 과정을 처음 경험해보았다.

처음 진행해보는거라 알아볼 부분이 다소 있었지만, 하나씩 흐름을 따라가다보니 결국 "내가 만들었다는 것을 증명하고, 남이 확인할 수 있게 하는 과정"이었다. 

그리고 이런 방식은 단지 특정 플랫폼만의 특이한 요구가 아니라,
많은 오픈소스 생태계에서 사용하는 보편적인 인증 절차다.

 

 다음 포스팅에선 인증서를 어떻게 활용해서 .tar.gz 같은 앱 패키지에 서명하고, 그걸 어떻게 검증받는지까지도 정리해볼 계획이다.

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기