본문 바로가기

리눅스

[draft] HAProxy에서 SSL 인증서를 생성하고 적용하는 방법

728x90

HAProxy에서 TLS/SSL 인증서를 생성하고 적용하는 방법

자가 서명된 인증서 생성

CA에서 발급받은 인증서가 없다면 테스트용이나 내부 용도로 자가 서명된 인증서를 생성할 수 있습니다.

 

1. 개인 키와 인증서 생성

  • 개인 키와 자가 서명된 인증서를 생성합니다.
    • 국가, 지역, 공통 이름(Common Name) 등과 같은 정보를 입력하라는 프롬프트가 나타납니다.
mkdir -p /etc/haproxy/ssl
openssl req \
-new \
-newkey rsa:2048 \
-days 365 \
-nodes \
-x509 \
-keyout /etc/haproxy/ssl/haproxy.key \
-out /etc/haproxy/ssl/haproxy.crt
Country Name (2 letter code) [AU]: ***KR***
State or Province Name (full name) [Some-State]: ***Seoul***
Locality Name (eg, city) []: ***Jongno-gu***
Organization Name (eg, company) [Internet Widgits Pty Ltd]: ***SangChul Blog***
Organizational Unit Name (eg, section) []: ***Infrastructure Team***
Common Name (e.g. server FQDN or YOUR name) []: ***sangchul.kr***
Email Address []: ***admin@sangchul.kr***
더보기

---

openssl req \
-newkey rsa:2048 \
-x509 \
-sha256 \
-days 3650 \
-nodes \
-out ha_sangchul_kr.crt \
-keyout ha_sangchul_kr.key \
-subj "/C=KR/ST=Seoul/L=Jongno-gu/O=SangChul Blog/OU=Infrastructure Team/CN=sangchul.kr"

---

2. 개인 키와 인증서를 PEM 파일로 결합

  • HAProxy는 인증서와 개인 키가 하나의 PEM 파일에 포함되어 있어야 합니다.
cat /etc/haproxy/ssl/haproxy.crt /etc/haproxy/ssl/haproxy.key > /etc/haproxy/ssl/haproxy.pem

3. HAProxy 설정 파일 업데이트

  • 생성한 인증서를 사용하도록 HAProxy 설정 파일(/etc/haproxy/haproxy.cfg)을 수정합니다.
vim /etc/haproxy/haproxy.cfg
# HTTP Server Frontend
frontend http-front
    mode http
    bind *:80
    bind *:443 ssl crt /etc/haproxy/ssl/haproxy.pem ssl-min-ver TLSv1.2
    # HTTPS 요청인지 확인
    acl https_request ssl_fc
    # HTTPS가 아닌 요청을 HTTPS로 리다이렉트
    http-request redirect scheme https code 301 if !https_request
    # 기본 백엔드
    default_backend web-server-group
    option forwardfor

# Backend for HTTP Server
backend web-server-group
    mode http
    balance roundrobin
    option httpchk GET /
    server web1 192.168.0.130:8081 check
    server web2 192.168.0.130:8082 check

** 요청 URL을 기반으로 백엔드를 선택하는 L7 방식의 로드 밸런싱을 구현

인증 기관(CA)에서 발급받은 인증서 사용

CA에서 발급받은 인증서를 사용하는 경우, 다음 단계를 따릅니다.

 

1. 인증서 파일 준비

  • 개인 키 : haproxy.key
  • 인증서 : haproxy.crt
  • CA 번들(CA Bundle) : ca-bundle.crt

2. 파일을 PEM 파일로 결합

  • CA에서 발급받은 인증서와 CA 번들을 결합합니다.
cat haproxy.crt haproxy.key ca-bundle.crt > /etc/haproxy/ssl/haproxy.pem
  • CA 번들이 없다면, 인증서와 개인 키만 결합합니다.
cat haproxy.crt haproxy.key > /etc/haproxy/ssl/haproxy.pem

3. HAProxy 설정 파일 업데이트

  • CA에서 발급받은 인증서를 사용하도록 HAProxy 설정을 수정합니다.
vim /etc/haproxy/haproxy.cfg
# HTTP Server Frontend
frontend http-front
    mode http
    bind *:80
    bind *:443 ssl crt /etc/haproxy/ssl/haproxy.pem ssl-min-ver TLSv1.2
    # HTTPS 요청인지 확인
    acl https_request ssl_fc
    # HTTPS가 아닌 요청을 HTTPS로 리다이렉트
    http-request redirect scheme https code 301 if !https_request
    # 기본 백엔드
    default_backend web-server-group
    option forwardfor

# Backend for HTTP Server
backend web-server-group
    mode http
    balance roundrobin
    option httpchk GET /
    server web1 192.168.0.130:8081 check
    server web2 192.168.0.130:8082 check

HAProxy 설정 검증

haproxy -c -f /etc/haproxy/haproxy.cfg -V

HAProxy 설정 리로드

설정을 수정한 후 HAProxy를 리로드하여 변경 사항을 적용합니다.

sudo systemctl reload haproxy

또는

sudo systemctl restart haproxy

설정 확인

HAProxy 설정이 올바르게 적용되었는지 확인하는 방법입니다.

  • 브라우저에서 https://your-domain.com으로 접속하여 인증서가 제대로 적용되었는지 확인합니다.
  • curl이나 openssl 도구를 사용하여 인증서를 확인할 수도 있습니다.
curl -v https://your-domain.com
openssl s_client -connect your-domain.com:443

 

모든 설정이 제대로 되어 있다면 HTTPS를 통해 사이트에 접속할 수 있으며 인증서가 올바르게 제공됩니다.

 

728x90