이번 공부노트는 안드로이드 SSL Pinning 할 때 여러 가지 방식이 있지만 Network Security Configuration 방식에서 pin-set SHA-265 Key를 구하는 방법을 포스팅해 보겠다.
나도 회사에서 받은 프로젝트에 Network Security Configuration로 SSL Pinning이 되어있어서 키 값을 구해야 하는 상황이었다.
구글링을 해보면 전부 Gradle를 통해서 다른 SHA-265 Key 즉 D9:8F:58~~~~ 이런 식으로 되어있는 키 값 구하는 법 밖에 안 나와서 나처럼 pin-set SHA-265 key를 구하고 싶은 사람을 위해 포스팅을 하기로 결정했다.
본 포스팅은 SHA-265 key 값을 구하는 게 주목적이기 때문에 SSL Pinning을 해야 하는 이유에 대해서는 간단하게 작성해 보겠다.
# SSL Pinning란? / 사용해야 하는 이유
- SSL 인증서 또는 해당 공개 키(또는 해시)를 앱 내에서 직접 "고정"함으로써 SSL 고정은 중간자(MITM) 공격으로부터 보호하는 보안 기술이다.
저기서 중간자 공격이란 공격자는 사기성 SSL 인증서를 제시하여 앱과 서버 간의 통신을 가로채는 공격이라고 할 수 있다.
그래서 SSL Pinning을 사용해 앱에 고정된 인증서만 사용하도록 해주기 때문에 SSL Pinning을 사용해야 한다.
# pin-set SHA-265 key 값 구하는 방법
우선 networksecurityconfig.xml 파일을 구성 방법을 이미 알고 있다고 생각하고 진행하겠다.
구성하는 방법을 모르면 공식문서를 보고 구성해놓고 다시 보길 추천한다.
## 1. 서버로부터 인증서 다운로드
윈도우 사용자 경우 OpenSSL을 수동으로 설치해야 한다.
맥은 자동으로 터미널에 설치되어있음
윈도우만 OpenSSL 설치 (아래 블로그 참조)
https://aspdotnet.tistory.com/2653
Windows 윈도우 10 에 OpenSSL 을 설치하는 방법
OpenSSL은 TLS (Transport Layer Security) 및 SSL (Secure Sockets Layer) 프로토콜을 위한 모든 기능을 갖춘 툴킷 입니다. Apache 스타일 라이센스에 따라 라이센스가 부여됩니다. 이 튜토리얼은 Windows 운영 체제에
aspdotnet.tistory.com
맥은 터미널을 열어준다.
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -outform PEM > servercert.pem
위 명령어 중 -connect example.com:443 부분에 example.com을 본인 서버의 도메인을 입력한다.
그럼 위와 같이 나온다.
## 2. 인증서에서 SHA-256 지문 생성
다운로드한 인증서 파일로부터 SHA-256 지문을 생성한다.
openssl x509 -in servercert.pem -pubkey -noout | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -binary | openssl enc -base64
위 명령어는 아무 변형 없이 입력해도 된다.
아래처럼 바로 SHA-256 KEY가 생성이 된다!
바로 저 키를 아래 코드 KEY1에 적으면 성공! (당연히 {}은 제외하고 적어야 한다!)
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">example.com</domain>
<pin-set>
<pin digest="SHA-256">{KEY1}</pin>
</pin-set>
</domain-config>
</network-security-config>
참고
https://munseong.dev/android/apply_ssl_pinning/#network-security-configuration
https://developer.android.com/privacy-and-security/security-config?hl=ko#pin
'안드로이드 공부 노트' 카테고리의 다른 글
[Android] 안드로이드 위젯 알아보기 2편 - Glance, Compose, Kotlin (Android Compose Glance Appwidget) (0) | 2024.05.02 |
---|---|
[Android] 안드로이드 위젯 알아보기 1편 (0) | 2024.04.29 |
[Android] 안드로이드 인앱결제 관련 이론 정리 (0) | 2023.12.01 |
[Android] 안드로이드 앱 아이콘 바꾸기, 앱 아이콘 이미지 적용법(런처 아이콘 변경) - App Icon Change (0) | 2023.11.06 |
[Android-Hilt] 안드로이드 Hilt(힐트)란? (0) | 2023.04.19 |