HPKP HTTP Public Key Pinning 적용 방법
컨텐츠 정보
- 16,500 조회
- 5 댓글
- 0 추천
- 목록
본문
1. HPKP(HTTP Public Key Pinning) 의미
공격자들이 인증서를 훔치거나 위조해 사용자가 자기도 모르게 악성 사이트에 접속하고도 그 사실을 인지 못하게 하는 공격을 자주 했는데 퍼블릭 키 피닝을 사용하면 공인 인증서 발급 기관과 특정 도메인을 하나로 엮어주기 때문에 인증서를 위조하는 것만으로는 중간자 공격이 어려워집니다
2. 웹사이트에서 뽑아내기
https://report-uri.io/home/pkp_hash
위 링크로 들어가서 https를 포함한 도메인주소를 넣으면 알아서 뽑아줍니다. 해당 키를 입력하면 됩니다. (빨리 뽑아냄)
위 링크에서 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 적용이 완료되었습니다!
-
등록일 2020.10.10그누보드 SMTP 외부메일 설정하는 방법댓글 26
-
등록일 2020.10.03그누보드5에 실시간 채팅 구축하기댓글 13
-
등록일 2020.09.26
-
등록일 2020.09.24도커로 메일서버 구축하기댓글 4
관련자료
-
서명우성짱의 NAS를 운영하고 있습니다.
저의 즐거움이 여러분의 즐거움이면 좋겠습니다.
-
링크