안드로이드와 서버와의 통신중 에러가 발생했습니다. 원인은 안드로이드 9 Pie 부터 강화된 네트워크 보안 정책으로 HTTPS가 아닌 HTTP 프로토콜은 안드로이드가 보안상의 이유로 접속을 제한 합니다. HTTPS는 SSL/TLS 프로토콜을 사용하여 데이터의 암호화 및 통신을 제공합니다.
보통 로컬 환경에서 테스트 경우 AndroidManifest.xml 파일에 android:usesCleartextTraffic="true"을 설정해주거나특정 도메인만 허용 시키는 xml 파일을 작성해 테스트하는 방법이 있는데 이왕 하는거 SSL에 대해서 알아보고 직접 적용 시켜 보겠습니다. 제목은 안드로이드 HTTP 보안 정책인데 사실 내용은 기존 Nginx 서버에 SSL 적용하기랍니다
HTTPS 및 SSL을 사용한 보안에 관한 안드로이드 공식 문서
🎉HTTP, HTTPS
우선 기본적인 웹 프로토콜에 대해 알아보고 가겠습니다. 두 프로토콜의 공통된 목적은 HTML의 전송 입니다.
HTTP(Hyper Text Transfer Protocol)
HTTPS(Hyper Text Transfer Protocol Secure Socket Layer)
HTTP를 사용한 웹에서의 데이터는 중간에 가로채일 수 있는 문제로 인해 Netscape가 1995년에 개인정보 보호, 인증, 데이터 무결성을 보장하기 위한 SSL을 개발하였다고 합니다. SSL 위에서 HTTP가 동작하면 HTTPS가 되고, FTP가 동작하면 SFTP가 됩니다. 즉, SSL은 HTTPS 만을 위한 보안 프로토콜이 아닙니다.
🎉 SSL/TLS
SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security)는 전송 계층 상에서 클라이언트, 서버에 대한 인증 및 데이터 암호화를 수행합니다. HTTPS의 경우, HTTP를 위한 SSL/TLS 보안 터널 형성을 위해 443 Port를 사용 하고 SSL을 적용한 HTTP로 보안을 강화한 전송 기능 입니다. 그래서 SSL 인증서 적용이 된 도메인만이 https:// 주소를 가질 수 있습니다.
🎉 Let’s Encrypt
Let’s Encrypt는 무료로 TLS 인증서를 발급해주는 비영리기관 입니다. 무료인 대신 만료기한이 90일로 주기적으로 재발급해야 하며, 실제 서비스를 운영한다면 더 보안등급이 높은 유료 인증서를 사용해야 합니다. 발급된 TLS는 2개월 마다 변경해 주는 것을 권장하며 만료 기간은 약 3개월 입니다.
🎉 CertBot (공식페이지)
CertBot은 Let’s Encrypt 인증서를 사용하여 HTTPS를 적용할 수 있게 하는 오픈 소스툴 입니다.
먼저 cerbot 공식 사이트에 접속하면 페이지 중간에 사용자가 원하는 Web Server와 OS를 선택할 수 있습니다. 저는 Window에서 Nginx를 사용 중 이므로 그대로 선택해서 다운받아 줍니다.
Let's Encrypt에서는 인증서를 요청하는 도메인이 인터넷에서 공개적으로 액세스 가능해야 하는 것으로 보입니다. 현재 Local에서만 테스트 하고 있어서 따로 public 할 수 있는 도메인이 없어 추후 수정하겠습니다.
'Android' 카테고리의 다른 글
OkHTTP httpLoggingInterceptor (0) | 2023.12.15 |
---|---|
Retrofit Network Time out (0) | 2023.12.15 |
Android Network Programming 2 (0) | 2023.12.14 |
Android Network Programming 1 (0) | 2023.12.13 |
Android Studio MySQL 연동 6 (0) | 2023.12.08 |