이전 글(구글 클라우드 플랫폼(GCP)에 OpenVPN 서버 구축(6) : 서버 인증서 생성)에 이어서 쓰는 글입니다.

 

클라이언트는... 사용자겠죠? 클라이언트도 인증서-개인키 쌍이 있어야 OpenVPN 서버에 접근할 수 있습니다.

 

클라이언트(사용자) 컴퓨터에서 인증서 요청(req파일)과 개인키(key파일)를 직접 생성한 다음 이것들을 CA(Certification Authority. 인증 기관)로 보내서 서명하는 것이 논리적이지만, 저는 이미 서버(구글 클라우드 인스턴스)에 OpenVPN, OpenSSL, EasyRSA를 설치했으므로 서버에 깔린 EasyRSA로 클라이언트 인증서 생성 과정 전체를 처리하는 것이 효율적일 것 같습니다(꼼수).

 

제가 설명하는 방식은 키, 인증서, 구성 파일을 클라이언트로 전송하지 않아도 되며 VPN 가입 프로세스를 간소화시킬 수 있을 것입니다. 그리고 일련의 과정을 자동화하는 스크립트를 만들면 시간을 많이 아낄 수 있을 것입니다(능력이 된다면...).

 

client 인증서는 VPN 사용자 1명당 하나씩 발급해야 합니다. 그래서 OpenVPN 서버에 접속을 원하는 인원만큼 아래의 과정을 반복해야 합니다.

 

먼저, client1이라는 이름의 인증서-개인키 쌍을 만들겠습니다. 원하는 이름을 정해서 따라하세요.

 

./easyrsa gen-req client1 nopass

(편의를 위해 nopass 옵션을 줬습니다.)

EasyRSA-3.0.8 디렉토리에 접근한 상태에서 입력해야 합니다. pki 초기화가 되어 있는 경로여야 하거든요.

▲ 익숙한 화면이죠? CN(Common Name) 항목 입력을 요구하는데, 원한다면 입력을 하세요. 엔터 치면 그냥 넘어가 버립니다. 절차가 끝나면 생성된 client1.req 파일과 client1.key 파일의 경로를 띄워줍니다. 기억해 두세요.

 

다음 절차 : client1.key 파일에 사인 요구(sign-req)를 합니다.

 

EasyRSA가 설치된 서버와 OpenVPN이 설치된 서버가 물리적으로 분리되어 있다면(IP가 다르면) client1.req 파일을 OpenVPN이 설치된 서버로 옮긴 다음 import-req 옵션으로 req 파일을 불러온 후 sign-req를 해야 합니다(OpenVPN 서버의 IP에서 인증서가 승인되어야 함).

이 방식을 선택하고 싶다면 아래의 디지털오션 튜토리얼들을 참고하시기 바랍니다.

https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-18-04

https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-an-openvpn-server-on-ubuntu-20-04

 

sign-req 옵션의 request 타입은 server, client 두가지가 있는데, gen-req로 client 인증서를 생성했었으니 sign-req의 request 타입도 client로 줍니다. 아래 명령어에서 첫번째로 적은 client 글씨가 request type이고, 두번째로 적은 client1 글씨는 client1.key 파일을 뜻합니다(CN : Common Name을 지정했다면 CN 값을 넣어도 작동할 겁니다.).

 

./easyrsa sign-req client client1

(EasyRSA-3.0.8 디렉토리에 접근한 상태에서 입력해야 합니다. pki 초기화가 되어 있는 경로여야 하거든요.)

▲ vars 파일에서 set_var EASYRSA_CERT_EXPIRE 옵션을 3650으로 지정했기 때문에 만료기간이 3650 days가 된 것이고, yes 라고 입력하면 계속 진행됩니다. 사인 절차가 끝나면 pki/issued/ 경로에 client1.crt 파일이 생성됩니다.

여기까지 진행했을 때 생성된 파일 목록을 정리해보면 아래와 같습니다.

 

pki/reqs/client1.req

pki/private/client1.key

pki/issued/client1.crt

 

다음 절차 : 클라이언트 인증서-개인키 쌍을 모아둘 디렉토리를 하나 만들겠습니다(한번만 해두면 되겠죠?). 이 디렉토리에 client1, client2, client3, client4 등등등 생성하는 인증서를 모아두면 관리하기 편할 것입니다.

 

mkdir -p ~/client-configs/keys

chmod -R 700 ~/client-configs

▲ 권한(퍼미션)을 700으로 바꾸는 이유는 보안성을 높이기 위함이에요. client-configs 디렉토리와 keys 디렉토리까지 700 퍼미션으로 바뀝니다.

 

다음 절차는 복사. 위에 정리해두었던 파일 목록들 중에서 client1.key / client1.crt 파일을 ~/client-configs/keys 경로에 복사합니다.

 

cp pki/private/client1.key ~/client-configs/keys/

cp pki/issued/client1.crt ~/client-configs/keys/

 

서버인증서 생성 과정(이전 글) 중에 만들었던 ca.crt 파일과 ta.key 파일도 ~/client-configs/keys 디렉토리에 복사합니다.

 

cp pki/ca.crt ~/client-configs/keys/

cp ta.key ~/client-configs/keys/

 

이것으로 클라이언트측 인증서 준비가 끝났습니다.

 

이후 과정은 다음 글에서 적겠습니다.

 

※ 다음 글 : 구글 클라우드 플랫폼(GCP)에 OpenVPN 서버 구축(8) : server.conf 구성

반응형