https 사용 시 인증서를 고정 하자
- frida를 이용해서 인증서를 변경해서 공격이 가능해 보인다.
- 보안팀에서 인증서 피닝을 해달라고 요청이 왔다.
- 내용을 물어 보고 찾아보니 인증서 값을 공정 하는 내용
- 인증서를 미리 확인해서 핀으로 고정 한다.
okhhtp를 사용 하기에 해당 내용만 기술
- 방법
- API 서버의 정보를 찾는다.
- 찾은 인증서 정보를 okhttp client 에 추가해 준다.
okhhtp를 활용해 인증서 정보 찾기
-
아래 클래스를 활용해서 코드를 실행
-
Rx 를 사용하기 때문에 아래 처럼 대충 코드를만들어서 실행
-
아래처럼 에러가 출력 됩니다. 발견한 개수는 도메인 마다 다를수 있습니다.
``` Certificate pinning failure! Peer certificate chain: sha256/발견한 내용1=: CN=*.도메인,OU=Domain Control Validated sha256/발견한 내용2=: CN=AlphaSSL CA - SHA256 - G2,O=GlobalSign nv-sa,C=BE sha256/발견한 내용3=: CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R3 Pinned certificates for 도메인: sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
```
okhhtp를 활용해 인증서 고정
- 에러로 출력되는 내용을 자신의 okhttp client에 추가 아래와 같은 형태로 추가후 동작 확인
``` kotlin private val client: OkHttpClient = OkHttpClient.Builder() .certificatePinner( CertificatePinner.Builder() .add(dmoain, “sha256/발견한 내용1 =”) .add(dmoain, “sha256/발견한 내용2 =”) .add(dmoain, “sha256/발견한 내용3 =”) .build()) .build()
```
API 통신후 문제 없으면 성공 입니다.
- 운영이슈 조심
- 인증서 갱신에는 해당 내용이 안 바뀐다는 첩보 수신
- 인증서 교체나 재바급은 당연히 이슈 발생 하니 잘 확인해야 합니다.