GET 데이터도 HTTPS로 암호화됩니까?


답변:


145

URL 및 명령 ( GET)을 포함하여 전체 요청이 암호화됩니다 . 프록시 서버와 같은 중재 당사자가 수집 할 수있는 유일한 대상은 대상 주소와 포트입니다.

그러나 TLS 핸드 셰이크의 Client Hello 패킷은 SNI 확장 (@hafichuk 덕분에)을 통해 정규화 된 도메인 이름을 일반 텍스트로 광고 할 수 있습니다.이 이름은 모든 최신 메인 스트림 브라우저에서 사용되지만 일부는 최신 OS에서만 사용할 수 있습니다.

편집 : (방금 나에게 "좋은 답변"배지를 얻었으므로 전체 질문에 대답해야한다고 생각합니다 ...)

전체 응답도 암호화됩니다. 프록시는 그 일부를 가로 챌 수 없습니다.

Google은 https를 통해 검색 및 기타 콘텐츠를 제공합니다. 모든 공개 콘텐츠가 아니기 때문에 MITM 에서 일부 공개 콘텐츠를 숨길 수도 있습니다 . 어쨌든 Google 이 스스로 답변 하도록하는 것이 가장 좋습니다 .


2
URL이 암호화되었다는 주장에 약간 불만이 있습니다. 호스트 이름이 URL의 일부로 간주되지 않습니까? 그렇다면 진술이 잘못되었습니다. 실제 메일을 보내는 동안 대상 주소를 숨길 수없는 것과 같은 방법으로 ISP / 프록시 서버에서 호스트 이름 / IP 주소를 숨길 수 없습니다.
Abhishek Anand

1
@Abhishek : 호스트 이름이 TCP / IP 헤더에 없습니다. 답변에서 IP 주소를 다룹니다.
Marcelo Cantos

도메인이 암호화 되지 않았습니다 . 이름 기반 가상 호스트 (vs. IP 기반)를 지원합니다. @MarceloCantos는 나머지 URL (예 : GET명령)이 암호화 된 것이 완전히 정확합니다 . 이것은 RFC 4366
hafichuk

@ hafichuk : 감사합니다. TLS가 fqdn을 광고 할 수 있다는 것을 몰랐습니다. 마지막으로 https 멀티 서버를 설정하려고 시도했을 때 (몇 년 전 인정할 것입니다) 단일 IP로는 불가능한 것처럼 보였습니다.
Marcelo Cantos

도메인 이름을 포함하는 TLS에 정말로 중요한 추가 사항 : 도메인 이름을 포함한 일반 텍스트 DNS 요청도 잊지 마십시오. 암호화 된 HTTPS 트래픽이 DNS 요청을 볼 수있는 것을 볼 수있는 사람입니다.
Tim G

63

URL 자체는 암호화되므로 쿼리 문자열의 매개 변수가 와이어를 따라 일반으로 이동하지 않습니다.

그러나 GET 데이터를 포함하는 URL은 종종 웹 서버에 의해 기록되는 반면 POST 데이터는 거의 없습니다. 따라서 /login/?username=john&password=doe다음 과 같은 일을 할 계획 이라면하지 마십시오. 대신 POST를 사용하십시오.


2
+1 감사합니다. 이것은 내 실제 서버에 있으므로 로그에 대해 너무 걱정하지 않지만 공유 호스팅 환경에서이를 고려하는 사람에게는 좋은 고려 사항입니다. 신용 카드 번호를 이런 식으로 옮길 예정이므로 확실히 기록하고 싶지 않기 때문에 고려하는 것이 중요합니다. :)
orokusaki

3
그것이 자신의 상자라는 것은 중요하지 않습니다. 암호를 소유 한 다른 사람 (예 : 악의적 인 해커)도 해당 암호를 일반 텍스트로 보는 것을 원하지 않습니다. 또는 CC 번호 (다른 곳에도 저장하지 않았다고 가정).
Thomas

1
URL 쿼리 문자열이 아닌 POST 본문에 입력해야합니다.
Thomas

1
wbeserver가 웹 사이트의 데이터 (DB, 파일 등)에 대한 액세스보다 로그에 대한 액세스에 대한 제한이 적다고 생각하십니까? 데이터가 웹 서버에 안전하게 액세스하는 한 IMHO가 좋습니다. 웹 서버에 액세스 할 수있는 유일한 사람은 신뢰할 수있는 것으로 간주되어야합니다. 그들이없는 경우에는 다른 방법으로 데이터를 읽지 못하게 할 방법이 없기 때문입니다.
Serge Profafilecebook

1
암호가 GET을 통해 전송되고 액세스 로그에 기록되면 해시 되지 않습니다 . 이것이 가장 큰 문제라고 생각합니다. 웹 서버의 액세스 로그에서 비밀번호를 조회 할 수 있는지 여부는 데이터베이스에 해시 비밀번호가있는 것은 중요하지 않습니다. 데이터베이스에서 해시해야합니다. 그렇지 않은 경우 수정하십시오.
Steen Schütt

21

HTTPS HTTP 데이터가 전송되기 전에 기본 SSL 연결을 설정합니다. 이렇게하면 모든 URL 데이터 (연결을 설정하는 데 사용되는 호스트 이름 제외)가이 암호화 된 연결 내에서만 전달되고 HTTPS 데이터와 같은 방식으로 MITM (Man-in-the-Middle) 공격으로부터 보호됩니다.

위의 내용은 여기에있는 Google 답변의 매우 포괄적 인 답변의 일부입니다.

http://answers.google.com/answers/threadview/id/758002.html#answer



6

모든 것이 암호화되어 있지만 쿼리는 서버의 로그에 유지되며 다양한 로그 분석기 등 (일반적으로 POST 요청이 아닌 경우)에 액세스 할 수 있다는 것을 기억해야합니다.


1
어느 서버? 누구에게 접근 할 수 있습니까?
Jader Dias

2
@Jader는 적어도 해당 서버의 관리자와 해커에게. POST 요청을 사용하면 정보가 로그에 유지되지 않으므로 명시 적으로 기록되지 않으면 로그에 문제가 없습니다. GET 쿼리는 로그에 유지되며 로그에서 발생하는 모든 작업 (또는 관리자가이 로그를 나쁜 활동에 사용하기로 결정한 경우)에 문제가 있습니다.
Eugene Mayevski '콜백

4

요청이 전송되기 전에 연결이 암호화됩니다. 예, 요청은 쿼리 문자열을 포함하여 암호화됩니다.


4

예, 안전합니다. SSL은 모든 것을 암호화합니다.

POST 요청에서 발췌 :

POST /foo HTTP/1.1
... some other headers

GET 요청에서 발췌 :

GET /foo?a=b HTTP/1.1
... some other headers

두 경우 모두 소켓에 전송 된 모든 내용이 암호화됩니다. GET 요청 중에 클라이언트 브라우저에서 매개 변수를 보게 된다고해서 중간에있는 사람이 동일한 것을 보게되는 것은 아닙니다.


4

방금 HTTPS를 통해 웹 사이트에 연결하고 많은 GET 매개 변수를 전달했습니다. 그런 다음 wireshark를 사용하여 네트워크를 스니핑했습니다. HTTP를 사용하면 URL이 암호화되지 않은 상태로 전송되므로 URL의 모든 GET 매개 변수를 쉽게 볼 수 있습니다. HTTPS를 사용하면 모든 것이 암호화되어 있으며 내용을 제외하고는 어떤 패킷이 GET 명령인지조차 알 수 없습니다!


3

SSL은 헤더 구문 분석 전에 발생합니다. 이는 다음을 의미합니다.

Client creates Request
Request gets encrypted
Encrypted request gets transmitted to the Server
Server decrypts the Request
Request gets parsed

요청은 다음과 같습니다 (정확한 구문을 기억할 수는 없지만 충분히 가까워 야합니다).

GET /search?q=qwerty HTTP/1.1
Host: www.google.de

동일한 IP의 여러 호스트에 대해 서로 다른 SSL 인증서를 갖는 것이 문제가되는 이유이기도합니다. 요청 된 호스트 이름은 해독 할 때까지 알 수 없습니다.


1
HTTP/1.1첫 번째 줄의 끝에서 온다.
Marcelo Cantos

@ Marcelos Cantos : 감사합니다. HTTP Requests를 직접 작성해야했기 때문에 오래되었습니다.
Morfildur

0

GET 요청은 HTTPS를 사용할 때 암호화됩니다. 실제로 보안 웹 사이트에는 고유 한 IP 주소가 있어야하기 때문에 요청에서 암호가 해독 될 때까지 요청에서 의도 한 호스트 이름 (또는 가상 디렉터리)을 가져올 수있는 방법이 없습니다.


JFYI : 클라이언트가 호스트 이름을 지정하여 서버가 해당 인증서를 선택할 수 있도록하는 TLS 확장이 있습니다.
유진 Mayevski '콜백

@Eugene : 감사합니다. TLS 확장에 대해 알고 있지만 가장 느슨하게 인식하고 있습니다. 세부 정보 나 실제 사용 범위가 어느 정도인지 알 수 없습니다.
Michael Burr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.