[AWS Service] Openssl을 사용해서 Client VPN 연결

2025. 1. 3. 14:29·AWS Service

이번 블로그에서는 openssl을 사용하여 인증서를 발급받고, ACM를 생성하여 Client VPN을 생성하고자 합니다.

 

1. Openssl로 인증서 발급

openssl을 사용하여 Client vpn의 인증서를 발급 받기 위해선 config file을 작성하여 생성해야합니다. 아래에서 [ req_ext ] 은 꼭 필요한 부분이니 생략하시면 안 됩니다.

# openssl-server.conf

[ req ]
default_bits       = 2048
prompt             = no
default_md         = sha256
distinguished_name = req_distinguished_name
req_extensions     = req_ext

[ req_distinguished_name ]
C  = KR
ST = Seoul
L  = City
O  = Organization
OU = Unit
CN = server.riotgames.com

[ req_ext ]
keyUsage = critical, digitalSignature
extendedKeyUsage = serverAuth
# openssl-client.conf

[ req ]
default_bits       = 2048
prompt             = no
default_md         = sha256
distinguished_name = req_distinguished_name
req_extensions     = req_ext

[ req_distinguished_name ]
C  = KR
ST = Seoul
L  = City
O  = Organization
OU = Unit
CN = client1.riotgames.com

[ req_ext ]
keyUsage = critical, digitalSignature
extendedKeyUsage = clientAuth

config file을 생성했다면 ca-key와 ca-cert 파일을 발급 받아야 합니다.

openssl genrsa -out ca-key.pem 2048
openssl req -x509 -new -nodes -key ca-key.pem  -sha256 -days 3650 -out ca-cert.pem -config openssl-server.conf

ca 관련 파일들을 발급 받았다면 server 관련 파일들을 받급 받고 self sign을 진행합니다.

openssl genrsa -out server-key.pem 2048
openssl req -new -key server-key.pem -out server.csr -config openssl-server.conf
openssl x509 -req -in server.csr -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -days 3650 -sha256 -extfile openssl-server.conf -extensions req_ext

server 관련 파일도 발급 받았다면 마직막으로 client 관련 파일들도 똑같이 진행합니다. 

openssl genrsa -out client-key.pem 2048
openssl req -new -key client-key.pem -out client.csr --config openssl-client.conf 
openssl x509 -req -in client.csr -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -days 3650 -sha256 -extfile openssl-client.conf -extensions req_ext

다 잘 생성했다면 아래 명령어를 입력했을 때 아래와 같이 떠야 합니다.

ls
# 아래와 같이 출력
ca-cert.pem  ca-cert.srl  ca-key.pem  client-cert.pem  client-key.pem  client.csr  openssl-client.conf  openssl-server.conf  server-cert.pem  server-key.pem  server.csr

 

2. ACM 생성

아래 명령어를 사용하여 client vpn에 사용할 ACM 인증서를 생성합니다.

aws acm import-certificate --certificate fileb://server-cert.pem  --private-key fileb://server-key.pem --certificate-chain  fileb://ca-cert.pem
aws acm import-certificate --certificate fileb://client-cert.pem  --private-key fileb://client-key.pem --certificate-chain  fileb://ca-cert.pem

명령어를 입력하면 아래와 같이 정상적으로 인증서가 생성됩니다.

 

3. Client VPN 생성

Client VPN을 생성하기 위해선 vpc와 subnet을 생성해줘야 합니다. 생성을 하셧다면 아래와 같이 진행하면 됩니다.

클라이언트 IPv4 CIDR는 클라이언트 IP 주소가 할당되는 IP 주소 범위를 적으면 됩니다.

서버 인증서와 클라이언트 인증서는 각각 생성한 것들을 넣어줍니다.

DNS 서버 주소는 client vpn과 연결하고, DNS에 접근을 하고 싶으시다면 VPC CIDR에 +2 해주시면 됩니다. (이 값은 VPC의 Route53 주소입니다.)

VPC와 보안그룹  등등 생성하신 것들도 선택합니다. 

생성하셨다면 이제 어느 네트워크로 연결할지 정해야 합니다. 

Client VPN의 라우팅 테이블을 설정합니다.

Client VPN에 접근할 수 있게끔 아래와 같이 설정합니다.

모든 설정이 끝났다면 이제 Client VPN 활성화 상태가 되기를 기다리고, 클라이언트 구성을 수정해야 합니다.

위와 같이 클라이언트 구성을 다운로드하고, 파일을 아래와 같이 수정합니다.

client
dev tun
proto tcp
remote test.cvpn-endpoint-0adfc873cae8d427c.prod.clientvpn.ap-northeast-2.amazonaws.com 1194
remote-random-hostname
resolv-retry infinite
nobind
remote-cert-tls server
cipher AES-256-GCM
verb 3
<ca>
생략 ...
</ca>

<cert>
<client crt>
</cert>

<key>
<client key>
</key>

reneg-sec 0

verify-x509-name server.skills.local name

 

4. Client VPN 동작 확인

파일 -> 프로필 관리 ->  프로필 추가하여 표시 이름을  적고 VPN 구성 파일을 넣습니다. 

이제 생성한 프로필을 넣고 연결합니다. 연결에 성공하셨다면 이제 VPC 내부에 있는 instance private ip에 ping을 날려봅시다.

ping <private ip>

위 명령어를 쳤을 때 ping이 정상적으로 간다면 성공입니다. 

 

마무리

이렇게 해서 openssl를 사용해서 client vpn을 연결해봤는데요, 처음 openssl를 사용해서 client vpn 연결을 하려니 TLS 에러가 떳습니다. 그래서 client vpn에 log를 보니 client vpn을 연결할 때 [ req_ext ] 부분은 필요했지만 추가하지 않고 생성하여 에러가 떴던 거였습니다. 그래서 결국 에러를 고쳤고 정상작동하게 되었습니다. 이상 글을 마치겠습니다.  

저작자표시 비영리 변경금지 (새창열림)

'AWS Service' 카테고리의 다른 글

[AWS Service] Amazon Macie를 사용하여 S3 데이터 분석  (0) 2025.01.21
[AWS Service] S3에 저장된 log Athena로 분석  (0) 2025.01.21
[AWS Service] Fluent-Bit로 Cloudwatch에 Log 전송  (0) 2025.01.21
[AWS Service] AWS App Runner로 Application 배포  (2) 2024.10.22
[AWS nuke] AWS nuke를 사용해보자  (5) 2024.10.21
'AWS Service' 카테고리의 다른 글
  • [AWS Service] S3에 저장된 log Athena로 분석
  • [AWS Service] Fluent-Bit로 Cloudwatch에 Log 전송
  • [AWS Service] AWS App Runner로 Application 배포
  • [AWS nuke] AWS nuke를 사용해보자
dml113
dml113
dml113의 AWS 이야기
  • dml113
    Cloud
    dml113
  • 전체
    오늘
    어제
    • 분류 전체보기 (34)
      • Project (0)
      • Kubernetes (17)
        • CNCF (12)
        • TroubleShooting (1)
      • AWS Service (9)
      • Linux (3)
      • Github (2)
      • Production Traffic (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dml113
[AWS Service] Openssl을 사용해서 Client VPN 연결
상단으로

티스토리툴바