최근 오픈소스 기반 플랫폼에 앱을 배포하면서 인증서 발급 과정을 진행하게 됐다. 정확히 말하면 .csr
을 생성해 인증서를 신청하고, 발급받은 .crt
파일과 앱 코드를 묶어서 PR로 제출하는 구조였다.
과정 자체는 복잡하지 않지만 생소한 명령어들이 많았고, 나중에 또 쓰게 될 가능성이 높아서 흐름 위주로 정리해 두려고 한다.
openssl로 CSR 생성부터 파일 서명까지, 한 번에 정리하기
1. openssl
이란?
openssl
은 오픈소스 기반의 암호화 라이브러리이자, 커맨드라인 도구다.
주로 아래 작업에 쓰인다:
- 키 생성 (공개키/비공개키)
- CSR (인증서 요청) 생성
- 인증서 확인
- 디지털 서명/검증
- SSL 통신 테스트 등
웹 서버 설정, 앱 인증, 보안 처리 등 꽤 넓은 분야에서 기본 도구처럼 쓰인다.
여기선 인증서 발급용으로만 다루게 된다.
2. 인증서 발급 절차에서의 openssl 명령어 흐름
(1) 비공개 키 생성
openssl genrsa -out myapp.key 4096
- RSA 비공개키 생성.
4096
은 비트수로 보안 강도. 일반적으로 2048 이상 권장.- 생성된
.key
파일은 절대 외부에 노출되면 안 됨.
(2) CSR (인증서 요청서) 생성
openssl req -new -key myapp.key -out myapp.csr
- 비공개 키 기반으로 CSR 생성.
- 생성 시 도메인명, 조직명 등 정보를 입력하게 됨.
.csr
파일은 인증서 발급을 위해 외부에 제출할 수 있음.
(3) 서명 생성 (배포할 파일에 대해)
openssl dgst -sha512 -sign myapp.key myapp.tar.gz > myapp.tar.gz.sig
dgst
: 파일 해시 생성 및 서명.-sha512
: 사용할 해시 알고리즘.-sign
: 비공개 키로 서명.- 결과는
.sig
파일로 저장됨.
이 서명은 인증서 발급 기관 측에서 검증할 수 있게 된다.
3. tar
명령어 정리
앱 소스코드를 .tar.gz
형태로 압축해서 제출하는 경우가 많은데, 그때 쓰는 명령어들. tar.gz 형태로 압축한 파일을 타르볼이라는 귀여운 이름으로도 부른다.
압축하기
tar -cvzf myapp.tar.gz ./myapp/
c
: 새 아카이브 생성v
: 작업 진행 출력z
: gzip 압축 사용f
: 결과 파일 이름 지정
즉, myapp
폴더를 묶어서 gzip으로 압축하고 myapp.tar.gz
로 저장하는 명령.
압축 해제
tar -xvzf myapp.tar.gz
x
: 압축 풀기- 나머지는 동일
압축파일 포맷 자체가 .tar.gz
로 널리 쓰이다 보니, 이 명령도 자주 접하게 된다.
4. 기타 자주 썼던 명령어들
echo -n
echo -n "myapp" | openssl dgst -sha512 -sign myapp.key
- 문자열을 출력할 때 줄바꿈 없이 처리 (
-n
) - openssl에 입력값으로 넘기기 위해 자주 사용
- 파이프(
|
)를 통해 바로 다음 명령에 전달
cat
cat myapp.crt
- 파일 내용을 단순 출력
- 인증서가 정상적으로 발급되었는지, 내부 필드 확인 시 유용
리디렉션 관련
>
: 명령어 출력 결과를 파일로 저장
예:> myapp.tar.gz.sig
|
: 명령어 연결 (출력 → 입력)
예:echo -n "abc" | openssl dgst -sha256
5. 마무리
처음에는 하나하나 찾아보며 복사해서 쓰는 수준이었지만, 흐름을 이해하고 나니 각 명령어가 어떤 역할을 하는지 꽤 명확해졌다.
특히 openssl 명령어는 형식이 일정하기 때문에 자주 쓰다 보면 자연스럽게 익숙해질 듯.
이런 류의 인증서 기반 프로세스는 다른 플랫폼이나 보안 연동 작업에서도 반복될 수 있어서, 지금 정리해두는 게 꽤 의미 있다고 생각한다.
'블로그 > 개발일지 TIL' 카테고리의 다른 글
공식 URL 배포, 오픈소스는 왜 GitHub Releases에 올릴까 (0) | 2025.03.24 |
---|---|
OpenSSL로 CSR, 비밀키, 인증서까지 생성하는 방법 (0) | 2025.03.23 |
Webpack clean 옵션으로 인한 bundle 삭제 문제 해결하기 (0) | 2025.02.25 |
[Spring] 요청 파라미터에서 값 가져오는 4가지 방법소개 (1) | 2024.10.16 |
간단한 레디스 명령어 정리 (GET, SET, 대표 자료형), CAP 이론, 레디스 책 추천 (0) | 2023.08.18 |
최근댓글