HTTP와 HTTPS의 차이점
- 보안: HTTPS는 SSL/TLS 암호화를 사용하여 데이터를 암호화하지만, HTTP는 평문으로 데이터를 전송합니다.
- 포트: HTTP는 80번 포트를, HTTPS는 443번 포트를 사용합니다.
- URL: HTTP는 "http://"로, HTTPS는 "https://"로 시작합니다.
- 데이터 무결성: HTTPS는 데이터 변조를 방지할 수 있지만, HTTP는 그렇지 않습니다.
- 검색 엔진 최적화: HTTPS는 검색 순위 향상에 도움됩니다.
iOS에서의 보안 통신 방법
- HTTPS 사용: 모든 네트워크 통신에 HTTPS를 사용합니다.
- 인증서 고정(Certificate Pinning): 신뢰할 수 있는 인증서만 허용하도록 구현합니다.
- ATS(App Transport Security) 활용: iOS의 ATS를 사용하여 보안 연결을 강제합니다.
- 데이터 암호화: 민감한 데이터는 전송 전에 추가로 암호화합니다.
- JWT(JSON Web Token) 인증: API 요청의 인증 및 권한 부여에 JWT를 사용합니다.
- 네트워크 보안 구성: iOS의 Network Security Configuration 기능을 활용하여 앱의 네트워크 보안 설정을 구성합니다.
SSL/TLS
- SSL/TLS는 클라이언트와 서버 간 통신을 암호화하는 프로토콜입니다.
- 응용 계층과 전송 계층 사이에서 작동하여 데이터를 암호화합니다.
- 대칭키와 비대칭키 암호화를 혼용하여 보안성과 성능을 최적화합니다.
동작 단계
- 핸드셰이크 프로토콜
- 클라이언트와 서버가 암호화 방식을 협상합니다.
- 서버 인증 및 필요시 클라이언트 인증을 수행합니다.
- 세션 키를 생성하기 위한 정보를 교환합니다.
- 레코드 프로토콜
- 협상된 암호화 방식으로 실제 데이터를 암호화하여 전송합니다.
- 메시지 무결성을 검증합니다.
- 알림 프로토콜
- 오류나 경고 메시지를 전달합니다.
세부 동작 과정
- ClientHello: 클라이언트가 서버에 연결을 시도하며 지원 가능한 암호화 방식 등을 전달합니다.
- ServerHello: 서버가 암호화 방식을 선택하고 SSL 인증서를 전송합니다.
- 인증서 검증: 클라이언트가 서버의 인증서를 검증합니다.
- 키 교환: 대칭키 암호화에 사용할 세션 키를 안전하게 교환합니다.
- 암호화 통신: 협상된 세션 키를 사용하여 데이터를 암호화하여 통신합니다.