일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- git
- apple
- appres
- Android
- FIDO2
- albumbook
- 안드로이드
- Nodejs
- MFA
- Xcode
- otpkey
- OSX
- MYSQL
- SWIFT
- 앱리소스
- 앨범북
- 인증
- WebAuthn
- fido
- openssl
- SSL
- 애플
- css
- SwiftUI
- SSH
- kmip
- OTP
- 앱스토어
- MSYS2
- 2FA
- Today
- Total
인디노트
Easy RSA 로 CA 구성하고 인증서 발급 본문
Easy RSA 설치
Easy RSA 는 OpenVPN 에서 사용하는 인증서를 발급하기위해 만든 CA (인증기관) 구축 유틸리티이다.
OpenSSL 로 CA 를 간단하게 구축할 수 있지만 복잡한 여러 설정이 필요하기 때문에 쉽게 사용하기 위해서 Easy RSA 를 사용하게 된다.
Easy RSA 는 OpenSSL 을 기본으로 하는 스크립트 (Script) 프로젝트이므로 OpenSSL 이 설치되어 있어야 한다. 대부분의 리눅스 배포판이라면 시스템 설치시 기본으로 OpenSSL 이 설치되어 있지만 혹시 없는경우에는 다음과 같은 명령으로 설치 할 수 있다.
OpenSSL 설치
레드햇 계열
$ sudo yum install openssl
데비안 (우분투) 계열
$ sudo apt install openssl
Easy RSA 다운로드
OpenSSL 이 준비되어 있는 시스템이라면 다음의 명령으로 Easy RSA 패키지를 다운로드 받아 압축을 풀면 된다.
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
최신 버전의 확인은 다음의 github 를 방문하면 알 수 있다.
https://github.com/OpenVPN/easy-rsa/releases
Easy RSA 의 사용법
1. CA 의 초기화
가장 먼저 할 일은 CA 를 초기화 해 주는 것이다. init-pki 명령을 이용하여 CA 의 PKI 시스템을 초기화 할 수 있다. 초기화가 되면 pki 라는 서브폴더가 생성되고 이후의 작업이 그 안에서 인증서가 생성되게 된다.
참고 : 위의 설치 설명에서 다운받은 설치파일을 압축을 푼 후 해당 압축이 풀린 디렉토리안에서 작업한다.
$ ./easyrsa init-pki
2. CA 구성
build-ca 명령으로 CA 를 구성한다. 이때 CA 개인키 파일과 CA 인증서 파일이 생성된다.
CA 개인키의 암호 (Passphease) 를 설정하게 되는데 이때 사용한 암호는 절대 잊어서는 안된다. 만약 암호를 잊어버리면 CA 의 모든 내용을 초기화하고 새로 시작하는 불상사를 겪는다.
$ ./easyrsa build-ca
인증서를 생성할 때 Common Name 을 입력하게 되는데 자신이 구축하고자 하는 CA 의 이름을 입력하면 된다. 여기에서는 편의상 "indienote CA" 라고 입력함
또한, 기본적으로 2048 비트의 RSA 키가 생성된다.
입력 완료후 pki 라는 폴더를 확인하면 pki 폴더 밑에 CA 개인키 (비밀키) 와 인증서 (공개키 포함) 가 생성이되고 이제 하위 인증서를 발급할 준비가 된 것이다.
3. CSR (인증서 서명 요청) 생성
인증서가 필요한 시스템 (클라이언트) 쪽에서 인증서 서명 요청 (CSR : Certificate Signing Request) 를 생성한 후에 이를 CA 쪽에 전달해주어 CA 쪽에서 CA 개인키로 전자서명을 해서 생성하는게 인증서 이다.
CSR 에는 클라이언트 쪽의 인증서에 수록될 공개키 정보 및 기타 메타정보들이 포함되게 된다.
참고 : 클라이언트 쪽에서도 Easy RSA 를 설치해야 하며 키쌍을 생성해야 하기 때문에 init-pki 로 초기화를 해 준 후 시작하게 된다.
다음의 명령으로 CSR 파일을 생성한다.
$ ./easyrsa gen-req indienoteSSL
암호 (pass phrase) 를 입력하면 요청 (req) 파일과 개인키 (key) 파일이 생성된다. CA 가 파일 확장자로 csr 파일을 입력받는 시스템이라면 rename 하여 사용하면 된다. 여기서는 csr 파일로 rename 하여 사용한다.
$ mv pki/reqs/indienoteSSL.req pki/reqs/indienoteSSL.csr
CSR 파일의 구조는 대략 다음과 같은 구조를 갖게 된다.
4. 인증서 발급 (CA 쪽에서)
앞에서 생성한 req (CSR) 파일을 CA 쪽에 전달하면 CA 는 CSR 형식을 받아서 요청자의 공개키와 수록된 정보를 확인하고 추가적인 정보를 더해서 조합한 후 CA 이 개인키로 전자서명을 하고 해당 서명값을 포함시켜 인증서 파일을 만들어 클라이언트 쪽에 전달하게 된다.
물론 CA 는 발급한 인증서를 CA 서버의 서비스 종류에 따라서 서버에 기록해 둘 수 있다. 기본적으로 인증서 파일에는 공개키 정보와 인증서에 필요한 각종 메타 정보가 수록되어 있기 때문에 공개 되어도 보안상 심각한 문제는 없다. 단, 시스템 구조상 공개키를 막 유포할 필요가 없는 시스템에서는 나름의 보안 사항을 준수하는게 좋다.
다음과 같은 명령으로 req 파일을 입력하여 인증서를 발급하게 된다. 여기에서 indienoteSSL.csr 파일이 존재하는 실제 풀패스를 넣어야 할 경우도 있을 수 있다.
$ ./easyrsa import-req pki/reqs/indienoteSSL.csr indienoteSSL
실행이 정상적이라면 위와같이 성공적으로 CSR 이 입력되었다는 메시지가 표시되며 CA 개인키로 서명해서 인증서를 발급해 줄 수 있다는 메시지가 표시된다.
$ ./easyrsa sign-req client indienoteSSL
이 명령은 sign-req 와 함께 client 라는 옵션과 CSR 생성시 사용한 Common Name (여기에서는 indienoteSSL) 을 추가로 입력하여 실행하게 된다.
명령의 수행중에 subject 로 어떤것을 서명할 것이라는 내용과 함께 'yes' 를 입력하거지 다른 입력을 하여 중지하거나 할 수 있는 입력을 하도록 물어본다.
yes 라고 입력하여 서명을 진행하면 된다.
또한, CA 의 개인키 (비밀키, 서명키 라고도 함) 로 서명을 하기 때문에 CA 의 개인키 암호를 입력해야 서명이 진행될 수 있다. CA 키를 생성할 때 사용한 암호를 입력하여 서명을 완료한다.
5. 인증서 전달 (CA 에서 클라이언트 쪽으로)
인증서 발급 과정이 정상적으로 진행되면 pki/issued 폴더에 Common Name 이름이 붙은 인증서 파일이 생성된다. 이 파일을 CSR 을 작성한 클라이언트쪽에 전달해 주면 된다. 해당 인증서에는 클라이언트쪽의 공개키와 기타 인증에 필요한 인증서 메타데이터들이 포함되어 있으며 클라이언트쪽의 개인키는 클라이언트가 가지고 있을 것이다. 즉, CA 에는 클라이언트쪽의 인증서를 별도로 보관하고 관리할 수 있으며 클라이언트쪽의 개인키는 클라이언트만 소유하고 있는 것이다.
CA 의 개인키 및 클라이언트쪽의 개인키는 절대 유출되어서는 안되는 키이다.
'인증기술 > CA' 카테고리의 다른 글
nscurl 로 SSL 사이트 체크시 TLSv1.3 접속 문제 있을때 (0) | 2022.12.09 |
---|---|
OpenSSL 로 Root CA 생성하여 Self signed SSL 인증서 발급하기 (1) | 2021.06.25 |
EJBCA - Quick Start Guide (0) | 2019.05.28 |