우선, SSL (HTTPS) 및 HTTP 인증 작동 방식을 이해하십시오.
일반적인 HTTP 인증 방법 (다이제스트, 기본 및 HTTP를 기반으로 구현할 수있는 모든 양식 + 쿠키 기반 인증 체계)은 인증 정보를 일반 텍스트로 다소 전송하므로 자체적으로 안전하지 않습니다. 데이터가 POST 필드 또는 헤더에 있는지, base64 인코딩이 적용되는지 여부에 관계없이 네트워크 트래픽에 액세스 할 수있는 모든 사람이 비밀번호를 명확하게 볼 수 있습니다. 이는 신뢰할 수없는 채널을 통한 HTTP 인증이 가치가 없다는 것을 의미합니다. 공격자가 암호를 읽는 데 필요한 것은 네트워크 스니핑입니다.
SSL 은 본질적으로 안전하지 않은 채널을 통해 보안 통신 채널을 구현합니다. 이것은 대략 다음과 같이 작동합니다.
- 서버가 서명 된 인증서를 보냅니다.
- 클라이언트는 잘 알려진 서명 키 목록에 대해 인증서의 유효성을 검사합니다. 인증서 서명을 체인으로 연결할 수 있으므로 각 노드에 "서명하는 서명이 좋으면 나도 그래요"라고 말하지만 궁극적으로 체인은 클라이언트에 사전 구성된 소수의 신뢰할 수있는 기관 중 하나로 해결해야합니다.
- 클라이언트는 서버의 공개 암호화 키를 사용하여 공유 비밀을 보냅니다.
- 서버는 개인 키를 사용하여 공유 암호를 해독합니다 (합법적 인 서버에만 개인 키가 있으므로 다른 서버는 공유 암호를 해독 할 수 없습니다)
- 클라이언트는 공유 비밀을 사용하여 암호화 된 실제 요청 데이터를 보냅니다.
- 서버가 요청 데이터를 해독 한 다음 암호화 된 응답을 보냅니다.
- 클라이언트는 응답을 해독하여 사용자에게 제공합니다.
여기에 몇 가지 중요한 사항이 있습니다.
- 인증서 체인을 사용하면 클라이언트가 대화하는 서버가 요청을 가로채는 사람이 아니라 실제 서버인지 확인할 수 있습니다. 이것이 바로 실제 SSL 인증서를 구입해야하는 이유이며 유효하지 않거나 만료되었거나 잘못된 인증서를 사용하는 사이트를 방문했을 때 브라우저가 무서운 경고를 표시하는 이유는 전 세계의 모든 암호화가 도움이되지 않는 것입니다 잘못된 사람과 이야기하는 것.
- 비밀을 교환하는 데 사용되는 공개 / 개인 암호화는 성공적인 통신이이 특정 클라이언트와 서버 사이에서만 작동하도록합니다. 스니핑 된 네트워크 패킷은 암호화되며 서버의 개인 키가 데이터를 가져 오도록 요구합니다.
- 대칭 암호화는 개인 / 공개 키 암호화보다 성능 오버 헤드가 훨씬 낮기 때문에 대량의 요청에 사용됩니다. 그러나 키 (공유 비밀)는 개인 / 공개 키 암호화를 사용하여 교환됩니다. 택배 서비스와 같은 별도의 채널을 통해 키를 전송하는 것을 제외하고는 안전한 방법으로 만 수행 할 수 있기 때문입니다.
따라서 분명히 약간의 오버 헤드가 수반되지만 생각보다 나쁘지는 않습니다. 절대적으로 방대한 양의 트래픽을 준비하지 않는 한 "더 많은 하드웨어를 던질 것"이 적절한 응답 인 규모입니다 ( 구글이나 페이스 북을 생각하십시오). 일반적인 상황, 즉 일반적인 웹 응용 프로그램 사용에서 SSL 오버 헤드는 무시할 수 있으므로 기밀 데이터를 가져 오면 리소스를 포함하여 SSL을 통해 모든 것을 실행하는 것이 가장 좋습니다. SSL은 HTTP 트래픽을 보호 할 수있는 유일한 방법이기도합니다. 다른 방법은 단순히 표준화되지 않았기 때문에 널리 지원되지 않으며, 솔직히 말해서 잘못하기가 너무 쉽기 때문에 이러한 것을 직접 구현하고 싶지 않습니다.
TL : DR : 예, SSL + 기본 인증은 좋은 생각입니다. 예, 보안 서버 (및 유효한 인증서 ) 가 필요합니다 . 그렇습니다. 일이 조금 느려질 것입니다. 아니요. 올바른 걱정은 아닙니다. 지금.