HPKP HTTP Public Key Pinning 적용 방법

컨텐츠 정보

본문

 

 

1. HPKP(HTTP Public Key Pinning) 의미

 

공격자들이 인증서를 훔치거나 위조해 사용자가 자기도 모르게 악성 사이트에 접속하고도 그 사실을 인지 못하게 하는 공격을 자주 했는데 퍼블릭 키 피닝을 사용하면 공인 인증서 발급 기관과 특정 도메인을 하나로 엮어주기 때문에 인증서를 위조하는 것만으로는 중간자 공격이 어려워집니다 

 

 

2. 웹사이트에서 뽑아내기

 

 

https://report-uri.io/home/pkp_hash 

 

위 링크로 들어가서 https를 포함한 도메인주소를 넣으면 알아서 뽑아줍니다. 해당 키를 입력하면 됩니다. (빨리 뽑아냄)

 

 

 

 

https://www.htbridge.com/ssl/ 

 

위 링크에서 SSL 검사를 하면 하이브리드 인증서를 모두 포함하여 뽑아줍니다. 해당 PIN 키를 뽑아내면 됩니다. (시간 1분~10분 정도 소요)

 

 

3. 수동으로 풀체인인증서에서 뽑아내기 

 

letsencrypt 인증서의 경우

자동생성 경로 /etc/letsencrypt/live/path/fullchain.pem

수동생성 경로 /0001_chain.pem

 


openssl x509 -pubkey < fullchain.pem | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64

 

 

예시 : OvFoldzJWiJwzn/H2xuN6IXm09PKvI5b+WVxBNjm6cc=

 

위 지문의 경우 인증서를 갱신하거나 바꿀 경우 항상 바뀌기 때문에, 변화가 있을 때마다 새로 뽑아서 입력해줘야 합니다.

 

다만 백업키는 서버에서 뽑아내기 때문에 그대로 두면 됩니다.

 

 

4. 첫번째 백업키 만들기

 


openssl genrsa -out wsgvet.first.key 4096

 

 

5. 첫번째 키로부터 csr 뽑아내기

 


openssl req -new -key wsgvet.first.key -sha256 -out wsgvet.first.csr

 

 

6. csr에서 base64 지문 뽑아내기

 


openssl req -pubkey < wsgvet.first.csr | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64

 

 

예시 : 5iOFgnVG72sf37y63FKa4ZtxEaKs9tDXUKUo76OFLkM=

 

 

7. 위 과정을 이름만 다르게 해서 다시 뽑아내기

 


openssl genrsa -out wsgvet.second.key 4096

 

 


openssl req -new -key wsgvet.second.key -sha256 -out wsgvet.second.csr

 

 


openssl req -pubkey < wsgvet.second.csr | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64

 

 

예시 : F2rirJiUb68IAj3au6rSvmK2Fh3oAlaDM3ujMt9tLQQ=

 

 

8. 서버 설정에 추가하기 (Nginx 기준)

 

위에서 뽑은 3가지 지문을 순서대로 넣으면 됩니다.

 


add_header Public-Key-Pins 'pin-sha256="OvFoldzJWiJwzn/H2xuN6IXm09PKvI5b+WVxBNjm6cc="; pin-sha256="5iOFgnVG72sf37y63FKa4ZtxEaKs9tDXUKUo76OFLkM="; pin-sha256="F2rirJiUb68IAj3au6rSvmK2Fh3oAlaDM3ujMt9tLQQ="; max-age=2592000; includeSubDomains';

 

 

9. 검증하기

 

1) https://report-uri.io/home/pkp_analyse   

 

위 링크에서 확인하면 됩니다. 

 

 

2) https://www.htbridge.com/ssl/ 

 

위 링크에서 확인하면 됩니다.

 

 

3) https://www.ssllabs.com/ssltest/

 

위 링크에서 확인하면 됩니다.

 

 

4) putty에서 패키지 설치 후 확인

 

우분투 기준으로 testssl을 설치합니다.

 


apt-get install testssl

 

 

testssl -H www.wsgvet.com 

 

 

위와 같은 형식으로 명령어를 넣으면

 

--> Testing HTTP header response @ "/"

 

 HTTP Status Code             200 OK

 HTTP clock skew              0 sec from localtime

 Strict Transport Security    365 days=31536000 s, includeSubDomains, preload

 Public Key Pinning           # of keys: 3, 30 days=2592000 s, includeSubDomains

                              matching host key: OvFoldzJWiJwzn/H2xuN6IXm09PKvI5b+WVxBNjm6cc

 Server banner                WSGVET's NAS

 Application banner           --

 Cookie(s)                    2 issued: 1/2 secure, 1/2 HttpOnly

 Security headers             X-Frame-Options: SAMEORIGIN

                              X-XSS-Protection: 1; mode=block

                              X-Content-Type-Options: nosniff

 Reverse Proxy banner         --

위에 빨간글자인 matching host key 라고 나와야 됩니다.

 

HPKP 적용이 완료되었습니다!

관련자료

댓글 5개 / 1페이지

우성군님의 댓글의 댓글

My Cloud는 아파치로 구동되므로 위 내용에 있는 Nginx 설정을 사용할 수 없습니다.

그리고 SSL 인증이 될지는 저도 가늠이 되지 않습니다.

다만 V03 버전에서는 가능할 수도 있습니다.

닭비둘기님의 댓글의 댓글

오호.. 답변 감사합니다~
죄송하지만 다시한번 질문하겠습니다 ㅠㅠ
V04에서 https 리다이렉팅은 가능할까요?

우성군님의 댓글의 댓글

아파치 설정만 수정하면 가능할 것  같네요.

다만 아파치는 제가 써보질 않아 구글링 해보셔야 될겁니다.
Total 155 / 5 Page
RSS
미소 베이직 4.3 main side 예제파일 공유합니다. 댓글 6

2016년 12월 2일 현재 미소 베이직 4.3 기준 제 홈페이지 예제코드입니다.메인과 사이드, PC와 모바일을 구분하였습니다.1. PC 메인2…

드래그 텍스트 선택 색상 변경하기

위 스샷과 같이 드래그 했을 때 색상을 바꾸는 방법입니다.사실 저는 기본 드래그 색상과 큰 차이는 없는데요. 아무래도 파비콘의 색상과 맞추려고 …

그누보드5에 Github 아이디로 로그인 추가하기

1. Github개발자 분들이라면 거의다 아시는 바로 깃허브입니다.그 계정으로도 소셜 로그인이 가능합니다.링크1에 있는 소셜로그인 플러그인에 추…

미소 베이직 4.0 테마 사이드바 아이콘 색깔 변경하기

1. 메인화면에 떠있는 아이콘 배경색 지정하기/thema/Miso-Basic-4/widget/miso-sidebar/widget.php대략 18…

미소 베이직 4.0 테마로 작업 완료했습니다. 댓글 4

기존 테마는 미소 베이직 3.0이었습니다.하지만 오늘 미소 베이직 4.0이 나오면서 바로 갈아탔습니다. ㅎㅎ예전에 10월 초에 나온다고 들었었는…

그누보드5에 이모지 이모티콘 사용하기 (MariaDB, MySQL, utf8mb4)

1. Emoji 이모지 문자열 이모티콘이란?에모지(絵文字, Emoji; 한국 한자: 회문자)는 일본의 휴대 전화 단문 메시지(SMS)에서 사용하…

최근글


새댓글