2017-12-06 11 views
1

나는 REST API를 통해 HTTP와 통신하는 Nodejs 서버를 가지고있다. 이제 모든 내 요청을 HTTP에서 HTTPS로 전송하는 프로토콜을 변경하고 싶습니다. 문제는 클라이언트 코드를 변경할 수 없다는 것입니다.HTTP를 사용하여 만든 API 호출을 내 서버로 HTTPS로 리디렉션하는 것이 안전합니까?

서버의 모든 HTTP 요청을 https로 리디렉션하면 데이터가 암호화되어 전송되기에 충분한 지 알고 싶습니다. 또는 클라이언트에서 실행되는 코드를 수정해야하며 HTTP 프로토콜로 요청을해야합니다.

전송되는 중요한 데이터 (사용자 이름, 암호, 위치 정보)가 있으므로 데이터를 명확하게 보내지 않아야하므로이 작업을 수행해야합니다.

감사합니다.

+0

역 프록시로 nginx를 사용하고 있습니까 –

+0

@iambatman 예 예 : nginx를 사용합니다. – Simoyw

답변

1

HTTPS를 사용하는 목적은 단순한 암호화가 아닙니다. 또한 클라이언트의 서버 인증을 제공합니다.

(리디렉션되는 것과 관계없이) 일반 HTTP 요청을하는 클라이언트에 대한 한 가지 문제점은 공격자가 클라이언트와 대화하거나 비밀을 밝히거나 가짜 데이터를 가져 오는 가짜 서버를 만들 수 있다는 것입니다. 초기에 https를 통해 요청하지 않으면 공격자가이 작업을 수행 할 수 없습니다.

악화 될 경우 공격자는 실제 서버로 들어오는 트래픽을 수신 할 수 있습니다. 중간자 공격이 가능한 경우 (예 : 공격자가 클라이언트 또는 서버와 동일한 로컬 네트워크에있는 경우) 공격자는 초기 일반 텍스트 요청을 납치하고 HTTPS를 통해 API와 대화 한 다음 모든 요청에 ​​대해 클라이언트에 일반 http로 응답하는 등의 작업을 수행 할 수 있습니다. 클라이언트의 관점에서 볼 때 서버의 관점에서 볼 때 "정상적으로 작동합니다"라는 것이 https에서 모두 훌륭합니다.

SSL Stripping이라고합니다.

그래서 유일한 해결책은 클라이언트가 https를 통해 모든 요청 (첫 번째 요청 포함)을 수행하도록하는 것입니다. 브라우저 클라이언트에서이를 확인하는 한 가지 방법은 Strict-Transport-Security (HSTS) 응답 헤더를 사용하는 것입니다. 브라우저가 아닌 클라이언트의 경우 HSTS를 준수하거나 단순히 https를 통해 모든 요청을 수행하도록 구현할 수 있습니다.