OpenVPN 서버나 클라이언트에서 사용하는 인증서의 만료일자 및 기타 정보를 확인하는 방법은 openssl
명령어를 사용하면 가능합니다. 서버나 클라이언트가 사용하는 인증서 파일이 있다면, 해당 인증서 파일을 대상으로 다음 명령어를 사용할 수 있습니다.
인증서 정보 확인 명령어
- 인증서 파일의 경로를 알고 있는 경우
인증서 파일(예:server.crt
,client.crt
)의 경로를 이용해 다음 명령어로 확인할 수 있습니다.
예시openssl x509 -in <인증서_파일_경로> -noout -text
주요 확인할 정보는openssl x509 -in /etc/openvpn/server.crt -noout -text
Not Before
와Not After
입니다.Not After
는 인증서의 만료일을 나타냅니다. - 만료일만 간단히 확인하는 방법
인증서의 만료일만 간단히 확인하고 싶다면, 아래 명령어를 사용할 수 있습니다.
예시openssl x509 -in <인증서_파일_경로> -noout -enddate
이 명령어는 인증서의 만료일(openssl x509 -in /etc/openvpn/server.crt -noout -enddate
Not After
)을 반환합니다.
서버에서 직접 인증서 확인하기
만약 인증서 파일에 접근할 수 없고, 서버의 인증서를 직접 확인하고 싶다면, 서버의 공개 IP와 포트를 이용해 다음 명령어로 원격 인증서를 확인할 수 있습니다.
- OpenVPN 서버에 직접 연결해 인증서 확인하기
예시openssl s_client -connect <서버_주소>:<포트> -showcerts
이 명령어를 실행하면 서버에서 제공하는 인증서를 확인할 수 있으며, 인증서의 내용이 출력됩니다. 여기서openssl s_client -connect vpn.example.com:1194 -showcerts
-----BEGIN CERTIFICATE-----
로 시작하는 블록을 추출한 후, 다시openssl
명령어로 확인할 수 있습니다.
위 방법으로 인증서의 만료일을 포함한 다양한 정보를 확인할 수 있습니다. 인증서가 만료된 경우에는 갱신 절차가 필요합니다. OpenVPN 인증서가 만료되어 만료일을 연장하려면 기존 인증서를 갱신하거나 새로운 인증서를 발급해야 합니다. 인증서의 만료일을 단순히 연장하는 방법은 없으며, 새로운 인증서를 생성하고 배포해야 합니다. 아래는 OpenVPN 환경에서 인증서를 갱신하는 일반적인 절차입니다.
1. CA(Certificate Authority)로 새로운 인증서 생성하기
CA를 이용해 인증서를 재발급하는 방법
OpenVPN은 일반적으로 자체 CA를 사용하여 클라이언트 및 서버 인증서를 발급합니다. 인증서 갱신은 새로운 인증서를 발급받는 것과 동일한 과정입니다.
2. OpenVPN 설치 경로에서 작업
OpenVPN 설치 시 easy-rsa
라는 도구를 사용하여 CA 및 인증서를 관리할 수 있습니다. 먼저 OpenVPN 서버에서 easy-rsa
경로로 이동합니다.
cd /etc/openvpn/easy-rsa/
만약 easy-rsa
폴더가 없다면 다음 명령어로 설치할 수 있습니다.
apt-get install easy-rsa # Debian/Ubuntu 기반
yum install easy-rsa # Red Hat/CentOS 기반
3. 새로운 서버/클라이언트 인증서 및 키 생성
3.1. 환경 설정
OpenVPN 서버에서 easy-rsa
디렉토리에 있는 설정 파일을 불러옵니다.
source ./vars
./clean-all
3.2. 서버 인증서 생성
기존 인증서를 갱신하는 대신, 서버용 인증서를 새로 발급할 수 있습니다.
./build-ca # CA 인증서 새로 생성
./build-key-server server # 서버용 인증서 생성
build-key-server
명령을 실행하면 인증서 만료일을 지정할 수 있으며, 기본적으로 365일(1년)로 설정됩니다. 인증서 만료일을 더 길게 하고 싶다면, 생성 중에 원하는 날짜를 입력할 수 있습니다.
3.3. 클라이언트 인증서 생성
클라이언트의 인증서도 마찬가지로 새로 생성해야 합니다. 아래 명령으로 클라이언트 인증서를 만듭니다.
./build-key client_name # 클라이언트 인증서 생성
생성할 때 client_name
을 적절히 변경해 주면 됩니다.
4. DH (Diffie-Hellman) 키 재생성
서버에서 사용할 DH 키를 생성합니다.
./build-dh
5. 새 인증서 적용
새로 생성한 인증서를 OpenVPN 서버에 적용하려면 server.crt
, server.key
, ca.crt
파일을 /etc/openvpn/
디렉토리로 복사합니다.
cp keys/server.crt /etc/openvpn/
cp keys/server.key /etc/openvpn/
cp keys/ca.crt /etc/openvpn/
서버가 새 인증서를 사용하도록 OpenVPN 서비스를 다시 시작합니다.
systemctl restart openvpn@server
6. 클라이언트에 새로운 인증서 배포
클라이언트에 새로 생성된 인증서를 배포해야 합니다. 클라이언트가 client_name.crt
, client_name.key
, 그리고 ca.crt
파일을 업데이트해야 VPN 연결이 가능해집니다.
7. 인증서 갱신 시 주의 사항
- 만료된 인증서는 재사용할 수 없으므로, 새로 생성된 인증서를 기존 인증서 대신 사용해야 합니다.
- 만료일을 연장하는 대신 인증서를 재발급하는 방식으로 갱신이 이루어집니다.
- 클라이언트가 사용하는 인증서도 각각 갱신하고 배포해야 합니다.
위 과정을 통해 OpenVPN 서버와 클라이언트에서 사용할 새로운 인증서를 발급받고, 만료된 인증서를 갱신할 수 있습니다. easy-rsa
설치 후에 /etc/openvpn/easy-rsa
경로에 폴더가 자동으로 생성되지 않는 경우가 있습니다. easy-rsa
를 직접 설정하고 사용하는 방법입니다.
1. easy-rsa 설치
easy-rsa
는 인증서를 생성하는 도구입니다. 먼저, easy-rsa
패키지를 설치해야 합니다. Debian
/Ubuntu
계열과 CentOS
/Red Hat
계열에 대한 설치 명령어는 다음과 같습니다.
- Debian/Ubuntu:
sudo apt update sudo apt install easy-rsa
- CentOS/RHEL:
sudo yum install easy-rsa
2. easy-rsa 디렉토리 설정
설치 후 easy-rsa
파일들은 보통 /usr/share/easy-rsa/
에 위치하게 됩니다. 우리는 이 디렉토리를 복사하여 사용할 필요가 있습니다. OpenVPN 설정 디렉토리(/etc/openvpn/
)에 easy-rsa
폴더를 수동으로 만들어 사용하도록 하겠습니다.
sudo mkdir -p /etc/openvpn/easy-rsa
sudo cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
위 명령어를 실행하면 /etc/openvpn/easy-rsa/
디렉토리에 easy-rsa
의 모든 파일이 복사됩니다.
3. 환경 변수 설정
easy-rsa
를 사용하기 위해서는 환경 변수를 설정해줘야 합니다. /etc/openvpn/easy-rsa/
디렉토리로 이동하여 vars
파일을 수정합니다.
cd /etc/openvpn/easy-rsa
sudo nano vars
vars
파일의 내용을 편집하여 필요한 값들을 수정합니다. 아래와 같이 기본적으로 수정해야 하는 부분이 있습니다.
# 아래의 예시를 참고하여 적절히 수정하세요
set_var EASYRSA_REQ_COUNTRY "KR"
set_var EASYRSA_REQ_PROVINCE "Seoul"
set_var EASYRSA_REQ_CITY "Seoul"
set_var EASYRSA_REQ_ORG "MyOrganization"
set_var EASYRSA_REQ_EMAIL "admin@mydomain.com"
set_var EASYRSA_REQ_OU "IT Department"
필요에 따라 적절히 수정하고 저장합니다.
4. PKI (Public Key Infrastructure) 설정
이제 인증서를 생성할 준비가 완료되었습니다. 다음 명령어로 PKI 환경을 초기화합니다.
sudo ./easyrsa init-pki
이 명령어는 인증서와 키 파일을 저장할 디렉토리를 초기화합니다.
5. CA 인증서 생성
CA (Certificate Authority) 인증서를 생성하려면 다음 명령어를 실행합니다. CA는 다른 인증서를 서명하기 위한 역할을 합니다.
sudo ./easyrsa build-ca nopass
명령어를 실행하면 CA 인증서 파일이 생성됩니다. nopass
옵션은 CA 생성 시 비밀번호를 묻지 않도록 합니다. CA 비밀번호가 필요하다면 이 옵션을 생략하고 생성하면 됩니다.
6. 서버 인증서 및 키 생성
서버용 인증서를 생성하려면 다음 명령어를 사용합니다.
sudo ./easyrsa gen-req server nopass
server
는 서버 인증서의 이름입니다. 다른 이름을 사용해도 되지만, 일반적으로 server
로 설정합니다.
이후 생성된 요청 파일을 CA로 서명하여 인증서를 발급받습니다.
sudo ./easyrsa sign-req server server
명령어를 실행하면 CA 인증서로 서버 인증서가 서명되고, server.crt
라는 파일이 생성됩니다.
7. 클라이언트 인증서 및 키 생성
클라이언트 인증서도 서버 인증서와 유사한 방법으로 생성할 수 있습니다.
sudo ./easyrsa gen-req client1 nopass
생성된 클라이언트 요청을 서명하여 인증서를 발급합니다.
sudo ./easyrsa sign-req client client1
클라이언트마다 인증서를 생성해야 하며, 각각의 클라이언트에 대해 고유한 이름을 부여하는 것이 좋습니다.
8. DH (Diffie-Hellman) 키 생성
Diffie-Hellman 키 교환을 위한 파일을 생성하려면 아래 명령을 실행합니다.
sudo ./easyrsa gen-dh
생성된 dh.pem
파일은 OpenVPN 서버에서 필요합니다.
9. TLS-Auth 키 생성
추가적인 보안을 위해 TLS 인증 키를 생성할 수 있습니다.
sudo openvpn --genkey --secret /etc/openvpn/easy-rsa/ta.key
최신 OpenVPN 버전에서는 --genkey secret
형식을 사용하는 것이 권장됩니다.
openvpn --genkey secret /etc/openvpn/easy-rsa/ta.key
이후, 생성된 ta.key
파일을 OpenVPN 서버와 클라이언트 모두에 적용하면 됩니다.
10. 생성된 파일을 OpenVPN 서버에 적용
모든 인증서와 키 파일이 생성된 후, 해당 파일들을 OpenVPN 설정 디렉토리로 복사해야 합니다.
sudo cp pki/ca.crt /etc/openvpn/
sudo cp pki/issued/server.crt /etc/openvpn/
sudo cp pki/private/server.key /etc/openvpn/
sudo cp pki/dh.pem /etc/openvpn/
sudo cp /etc/openvpn/easy-rsa/ta.key /etc/openvpn/
11. OpenVPN 서버 재시작
마지막으로 OpenVPN 서버를 재시작하여 새로운 인증서를 사용하도록 설정합니다.
sudo systemctl restart openvpn@server
이제 OpenVPN 서버는 갱신된 인증서를 사용하여 작동하게 됩니다.
12. 클라이언트에게 새로운 인증서 제공
생성된 클라이언트 인증서를 해당 클라이언트에게 배포해야 합니다. 클라이언트는 ca.crt
, client1.crt
, client1.key
파일을 사용해 VPN 서버에 접속할 수 있습니다.
위 과정을 통해 OpenVPN 인증서 및 키 파일을 새로 생성하고 적용할 수 있습니다. OpenVPN에서 인증서의 기본 유효기간은 일반적으로 easy-rsa
도구를 사용할 때 3년(1095일)로 설정됩니다. 인증서가 만료되기 전에 이를 갱신하는 방법은 비교적 간단하며, 아래의 과정을 통해 3년 이후 인증서를 쉽게 갱신할 수 있습니다.
1. CA(Certificate Authority)와 인증서 유효기간 설정 변경
인증서 유효기간을 조정하고 싶다면, easy-rsa
의 vars
파일에서 기본 설정을 변경할 수 있습니다.
1.1 인증서 유효기간 조정
인증서를 생성할 때 기본적으로 적용되는 유효기간은 EASYRSA_CERT_EXPIRE
변수를 통해 설정됩니다. vars
파일을 열어 해당 값을 수정할 수 있습니다.
sudo nano /etc/openvpn/easy-rsa/vars
EASYRSA_CERT_EXPIRE
값을 찾아 수정합니다. 예를 들어, 5년(1825일)으로 설정하고 싶다면 아래와 같이 수정합니다.
set_var EASYRSA_CERT_EXPIRE 1825
수정 후, 새로운 인증서를 생성하면 설정된 유효기간에 맞게 인증서가 발급됩니다.
2. 기존 인증서 갱신 과정
기존 인증서가 만료되기 전에 갱신이 필요할 때, easy-rsa
를 통해 간단히 새로운 인증서를 발급받고 CA로 서명하면 됩니다. 이 과정은 처음 인증서를 발급하는 것과 유사하지만, 기존 키 파일을 재사용할 수 있습니다.
2.1 기존 키 파일로 CSR(Certificate Signing Request) 생성
클라이언트 또는 서버 인증서를 갱신하려면, 기존의 키 파일을 재사용하여 새로 서명 요청(CSR)을 생성합니다.
예를 들어, 서버 인증서를 갱신하려면
cd /etc/openvpn/easy-rsa
sudo ./easyrsa gen-req server nopass
이 명령어를 사용하면 기존의 server.key
파일을 재사용하면서 새로운 서명 요청을 생성합니다.
2.2 CSR을 CA로 서명
다음으로, CA를 사용하여 새로 생성한 요청 파일을 서명하고 인증서를 발급합니다.
sudo ./easyrsa sign-req server server
이 과정이 끝나면 새로운 서버 인증서 server.crt
가 발급됩니다.
2.3 새로운 인증서 적용
발급된 새 인증서를 OpenVPN 서버에 적용합니다. 새 인증서를 /etc/openvpn/
디렉토리에 복사합니다.
sudo cp /etc/openvpn/easy-rsa/pki/issued/server.crt /etc/openvpn/
2.4 OpenVPN 서버 재시작
마지막으로 OpenVPN 서버를 다시 시작하여 갱신된 인증서를 사용합니다.
sudo systemctl restart openvpn@server
3. 클라이언트 인증서 갱신
클라이언트 인증서도 서버 인증서와 마찬가지로 쉽게 갱신할 수 있습니다. 클라이언트 인증서를 갱신하려면 다음 명령을 사용하여 클라이언트 인증서를 새로 생성하고 서명합니다.
sudo ./easyrsa gen-req client1 nopass
sudo ./easyrsa sign-req client client1
발급된 클라이언트 인증서를 클라이언트에 배포하고 기존 인증서와 교체해 주면 됩니다.
4. 인증서 자동 갱신 관리
OpenVPN에서 인증서를 수동으로 갱신하는 방법 외에도, 인증서 만료를 자동으로 관리하는 방법이 있습니다. 예를 들어, 일정 주기로 만료일을 체크하고 갱신 작업을 자동화하는 스크립트를 작성하거나, 관리 대시보드에서 인증서의 상태를 주기적으로 확인할 수 있습니다.
인증서 갱신은 새로운 키를 생성하거나 기존 키를 재사용하여 CA로 다시 서명하는 과정입니다. 이 과정은 처음 인증서를 생성할 때와 유사하므로, 이미 인증서를 생성한 경험이 있다면 크게 어렵지 않을 것입니다. vars
파일을 통해 인증서 유효기간을 조정하고, 필요 시 갱신하면 3년 이후에도 문제없이 인증서를 유지할 수 있습니다.
추가적으로, OpenVPN에서 클라이언트가 항상 특정 IP 주소를 할당받도록 설정하려면, 클라이언트의 고정 IP를 설정할 수 있습니다. OpenVPN의 ifconfig-pool-persist
및 client-config-dir
기능을 사용하여 클라이언트별로 고정 IP를 할당하는 방법입니다.
1. OpenVPN 설정에서 클라이언트 IP 풀 설정
OpenVPN 서버 설정 파일 (server.conf
)에서 클라이언트 IP 풀을 확인하고, ifconfig-pool-persist
옵션이 활성화되어 있는지 확인해야 합니다.
sudo nano /etc/openvpn/server.conf
다음 줄이 포함되어 있는지 확인하세요. 이 설정은 클라이언트가 종료 후에도 동일한 IP를 할당받도록 IP 풀을 저장합니다.
ifconfig-pool-persist /var/log/openvpn/ipp.txt
이 옵션은 클라이언트의 IP를 유지하는 데 도움이 됩니다. 그러나 클라이언트별로 특정 IP를 할당하려면 아래와 같이 추가 설정이 필요합니다.
2. client-config-dir 디렉토리 설정
고정 IP를 할당하려면 client-config-dir
을 설정해야 합니다. 이 옵션은 특정 클라이언트에게 고유의 IP 주소를 할당하는 역할을 합니다. 다음 줄을 server.conf
에 추가하여 client-config-dir
옵션을 활성화합니다.
client-config-dir /etc/openvpn/ccd
이 설정은 OpenVPN이 클라이언트마다 별도의 설정 파일을 사용할 수 있도록 합니다.
3. ccd 디렉토리 생성 및 클라이언트별 설정 파일 작성
이제 /etc/openvpn/ccd/
디렉토리를 생성하고, 해당 클라이언트의 설정 파일을 생성해야 합니다.
sudo mkdir -p /etc/openvpn/ccd
sudo nano /etc/openvpn/ccd/client1
여기서 client1
은 클라이언트의 common name
(인증서에서 사용한 이름)과 동일해야 합니다. 클라이언트별로 파일을 만들어야 하며, 설정 파일 내용은 다음과 같습니다.
예시) client1
설정 파일 (고정 IP 설정)
ifconfig-push 10.8.0.6 255.255.255.0
이 설정은 client1
에게 10.8.0.6
IP 주소를 할당합니다. 원하는 IP를 설정할 수 있으며, IP는 서버가 관리하는 IP 풀 범위 내에서 선택해야 합니다.
4. OpenVPN 서버 재시작
설정을 완료한 후 OpenVPN 서버를 재시작하여 변경사항을 적용합니다.
sudo systemctl restart openvpn@server
5. 클라이언트 연결 확인
클라이언트가 VPN에 다시 연결할 때, 지정된 IP 주소(예: 10.8.0.6
)를 할당받는지 확인합니다. 클라이언트에서 ifconfig
명령을 통해 IP 주소를 확인할 수 있습니다.
이 방법을 통해 클라이언트가 항상 특정 IP 주소를 할당받도록 설정할 수 있습니다.
댓글