인디노트

Easy RSA 로 CA 구성하고 인증서 발급 본문

인증기술/CA

Easy RSA 로 CA 구성하고 인증서 발급

인디개발자 2021. 6. 26. 10:04

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

 

Releases · OpenVPN/easy-rsa

easy-rsa - Simple shell based CA utility. Contribute to OpenVPN/easy-rsa development by creating an account on GitHub.

github.com

 

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 의 개인키 및 클라이언트쪽의 개인키는 절대 유출되어서는 안되는 키이다.

반응형
Comments