어플리케이션

HPKP(HTTP Public Key Pinning)에 대해 알아보겠습니다.

forward error correction Circle 2025. 1. 8. 08:41
반응형

Ⅰ. HPKP(HTTP Public Key Pinning) 이란?

 웹사이트가 인증서 체인에 포함된 특정 공개 키(public key)를 브라우저에 미리 알려주는 보안 메커니즘입니다.
이를 통해 브라우저는 연결 시 서버가 제공하는 인증서가 사전에 지정된 공개 키와 일치하는지 확인할 수 있습니다.
HPKP는 인증서 위조 공격이나 신뢰할 수 없는 CA(Certificate Authority)에서 발급된 인증서로 인한 피해를 방지하기 위해 설계되었습니다.

Ⅱ. HPKP(HTTP Public Key Pinning) 주요 목적

 ⅰ. 인증서 위조 방지
   : 공격자가 허위 인증서를 생성해 사용자의 데이터를 탈취하는 것을 방지.
 ⅱ. 강화된 보안
   : 서버에서 허용하는 공개 키를 미리 브라우저에 알려줌으로써, 잘못된 인증서로 연결되는 것을 차단.

Ⅲ. HPKP(HTTP Public Key Pinning) 작동 원리

 ⅰ. 초기 접속
    1) 사용자가 웹사이트에 접속하면 서버가 Public-Key-Pins HTTP 헤더를 전송.
    2) 헤더에는 허용된 공개 키 목록과 해당 키의 해시 값이 포함됨.
 ⅱ. 정책 저장
    1) 브라우저는 이 정보를 저장하고, 설정된 기간 동안 이를 정책으로 유지.
 ⅲ. 추후 연결 시 검증
    1) 브라우저는 서버 인증서의 공개 키가 저장된 목록과 일치하는지 확인.
    2) 일치하지 않으면 연결을 차단하고 보안 경고를 표시.

Ⅳ. HPKP(HTTP Public Key Pinning) 헤더 구성

Public-Key-Pins: pin-sha256="Base64PublicKeyHash1"; 
                  pin-sha256="Base64PublicKeyHash2"; 
                  max-age=5184000; 
                  includeSubDomains; 
                  report-uri="https://example.com/hpkp-report"

구성 요소 설명
pin-sha256: 허용된 공개 키의 SHA-256 해시 값(Base64로 인코딩).
max-age: 정책의 유효 기간(초 단위).
includeSubDomains: 모든 서브도메인에 HPKP 정책을 적용.
report-uri: HPKP 검증 실패 시 보고할 URL(선택적).

Ⅴ. HPKP(HTTP Public Key Pinning) 설정 예제

 ⅰ. Nginx

add_header Public-Key-Pins 'pin-sha256="Base64PublicKeyHash1"; 
                            pin-sha256="Base64PublicKeyHash2"; 
                            max-age=5184000; 
                            includeSubDomains; 
                            report-uri="https://example.com/hpkp-report"';

 ⅱ. Apache

Header always set Public-Key-Pins "pin-sha256=\"Base64PublicKeyHash1\"; 
                                   pin-sha256=\"Base64PublicKeyHash2\"; 
                                   max-age=5184000; 
                                   includeSubDomains; 
                                   report-uri=\"https://example.com/hpkp-report\""

Ⅵ. HPKP(HTTP Public Key Pinning) 장점

 ⅰ. 인증서 위조 방지
    : 공격자가 신뢰할 수 없는 CA에서 발급받은 위조 인증서를 사용할 경우 차단.
 ⅱ. 강화된 HTTPS 보안
    : 인증서 체인 외부의 키를 차단해 인증서를 보호.
 ⅲ. 사용자 데이터 보호
    : 공용 네트워크 환경에서 발생할 수 있는 위협을 감소.

Ⅶ. HPKP(HTTP Public Key Pinning)  단점 및 한계

 ⅰ. 설정 실수 시 사이트 접근 불가
    : 잘못된 키를 등록하면 사용자가 사이트에 접근할 수 없게 될 위험이 있음.
 ⅱ. 운영 및 관리 부담
    : 인증서 갱신 시 반드시 HPKP에 등록된 키와 일치해야 하며, 관리가 복잡.
 ⅲ. 브라우저 지원 축소
    : 설정 실수로 인해 발생할 수 있는 위험이 크기 때문에, 주요 브라우저(예: 크롬)는 더 이상 HPKP를 지원하지 않음.
 ⅳ. 차선책 존재
    : HPKP 대신 Certificate Transparency(CT) 및 HSTS Preloading이 더 안전하고 관리하기 쉬운 대안으로 권장됨.

Ⅷ. HPKP(HTTP Public Key Pinning) 현재 상태

 HPKP는 2012년부터 제안되었지만, 설정 실수로 인해 사이트 접근이 영구적으로 차단되는 심각한 문제가 자주 발생하여 대부분의 브라우저는 현재 이를 비활성화하거나 지원하지 않습니다. 대체 기술인 Certificate Transparency와 HSTS Preloading을 사용하는 것이 웹 환경에서 권장됩니다.

반응형