오늘은 HTTP 3방향 핸드셰이크가 무엇인지, HTTPS 핸드셰이크의 과정과 HTTPS가 안전한 이유에 대해 요약했습니다.
Premise
이 두 가지 악수를 설명할 때 미리 설명해야 할 사항이 있습니다.
HTTP와 TCP/IP의 차이점은 무엇인가요?
TPC/IP 프로토콜은 네트워크에서 데이터가 전송되는 방식을 주로 해결하는 전송 계층 프로토콜인 반면, HTTP는 데이터를 패키징하는 방법을 주로 해결하는 애플리케이션 계층 프로토콜입니다. WEB은 HTTP 텍스트 정보를 캡슐화하기 위해 HTTP 프로토콜을 애플리케이션 계층 프로토콜로 사용하고, TCP/IP를 전송 계층 프로토콜로 사용하여 이를 네트워크로 보냅니다.
다음 차트는 원래 OSI(Open System Interconnect) 모델에서 다양한 TCP/IP 및 기타 프로토콜의 위치를 보여줍니다.
PS: 이 표는 온라인 정보에서 가져온 것입니다.
CA란 무엇입니까? 자격증?
CA(인증 기관)는 인증서 관리 및 발급을 담당하는 제3자 기관으로 모든 산업계와 대중이 신뢰하고 인정합니다.
CA 인증서는 CA에서 발급한 인증서로, 웹사이트를 신뢰할 수 있는지(HTTPS의 경우), 파일을 신뢰할 수 있는지(위조 여부) 등을 확인하는 데 사용할 수 있습니다. 하나의 인증서가 다른 인증서가 인증되고 신뢰할 수 있음을 증명하는 경우 최상위 인증서를 루트 인증서라고 합니다. 신뢰할 수 있음이 입증된 루트 인증서를 제외하고 다른 인증서는 더 높은 수준의 인증서를 사용하여 자신을 입증해야 합니다.
HTTP three-way handshake
HTTP(HyperText Transfer Protocol)는 인터넷에서 가장 널리 사용되는 네트워크 프로토콜입니다. 정보는 일반 텍스트로 전송되므로 안전하지 않은 것으로 간주됩니다. HTTP의 3방향 핸드셰이크는 실제로 3방향 TCP 핸드셰이크를 사용하여 HTTP 연결 설정을 확인합니다.
아래 그림에서 볼 수 있듯이 SYN(동기)은 TCP/IP가 연결을 설정할 때 사용되는 핸드셰이크 신호, 시퀀스 번호 및 승인 번호입니다. 가리키는 세 개의 화살표는 3방향 핸드셰이크를 완료합니다. . 클라이언트와 서버가 데이터 전송을 시작합니다.
PS: 사진은 온라인 정보에서 가져온 것입니다.
첫 번째 핸드셰이크: 클라이언트가 서버에 syn 패킷(syn=j)을 보내고 SYN_SEND 상태로 들어가 서버 확인을 기다립니다.
두 번째 핸드셰이크: 서버가 syn 패킷을 받으면 클라이언트의 SYN(ack=j+1)을 확인하고 동시에 SYN 패킷(syn=k), 즉 SYN+ACK 패킷을 보내야 합니다. SYN_RECV 상태
세 번째 핸드셰이크: 클라이언트 클라이언트는 서버로부터 SYN+ACK 패킷을 수신하고 승인 패킷 ACK(ack=k+1)를 서버에 보냅니다. 패킷이 전송된 후 클라이언트와 서버는 진입합니다. ESTABLISHED 상태로 전환하고 3방향 핸드셰이크를 완료합니다.
HTTPS 핸드셰이크 프로세스
HTTPS는 HTTP를 기반으로 SSL 프로토콜을 추가합니다. SSL은 인증서를 사용하여 서버의 신원을 확인하고 브라우저와 서버 간의 통신을 암호화합니다. 구체적으로 암호화, 복호화, 검증을 수행하는 방법은 아래 그림과 같습니다. 다음은 핸드셰이크(handshake)라고 합니다. 추신: 아래 사진 설명은 http://zhuqil.cnblogs.com
1에서 가져왔습니다. 프로토콜의 서버에는 직접 만들거나 CA 인증서로 만들 수 있는 디지털 인증서 세트가 있어야 합니다. . 차이점은 직접 발급한 인증서는 계속 접속하기 전에 클라이언트에서 확인해야 하지만, CA 인증서를 사용하면 프롬프트 페이지가 팝업되지 않는다는 점입니다. 이 인증서 세트는 실제로 공개 키와 개인 키의 쌍입니다. 공개키는 다른 사람이 암호화하는 데 사용되고, 개인키는 자신이 복호화하는 데 사용됩니다.
3. 인증서 전송 이 인증서는 실제로 공개 키이지만 인증서 발급 기관, 만료 시간 등과 같은 많은 정보가 포함되어 있습니다.
4. 클라이언트 구문 분석 인증서
이 작업은 클라이언트의 TLS에서 수행됩니다. 먼저 발급 기관, 만료 시간 등 공개 키가 유효한지 확인합니다. 예외가 발견되면 팝업이 나타납니다. 인증서에 문제가 있음을 알리는 경고 상자가 나타납니다. 인증서에 문제가 없으면 임의의 값이 생성된 후 해당 임의의 값이 인증서로 암호화됩니다.
5. 암호화된 정보 전송
이 부분은 서버가 이 임의의 값을 얻을 수 있도록 하기 위한 것입니다. 이 임의의 값을 통해 암호화 및 복호화가 수행됩니다.
6. 서비스 구간 복호화 정보
서버는 개인 키로 복호화한 후 클라이언트가 전달한 임의의 값(개인 키)을 얻은 다음 이 값을 사용하여 콘텐츠를 대칭적으로 암호화합니다. 소위 대칭 암호화는 특정 알고리즘을 통해 정보와 개인 키를 혼합하여 개인 키를 모르면 콘텐츠를 얻을 수 없으며 클라이언트와 서버 모두 개인 키를 알고 있으므로 암호화 알고리즘은 충분히 강력하고 개인 키는 충분히 복잡하며 데이터는 충분히 안전합니다.
7. 암호화된 정보 전송
이 부분의 정보는 서비스 세그먼트에서 개인키로 암호화된 정보로 클라이언트에서 복원이 가능합니다.
8. 클라이언트는 정보를 복호화합니다.
클라이언트는 이전에 생성된 개인 키를 사용하여 서비스 세그먼트가 전달한 정보를 복호화한 후 복호화된 콘텐츠를 얻습니다.
PS: 전체 핸드셰이크 과정에서 제3자가 데이터를 모니터링하더라도 그들이 할 수 있는 일은 없습니다.
요약
HTTPS는 왜 안전한가요?
HTTPS 핸드셰이크의 네 번째 단계에서 사이트의 인증서를 신뢰할 수 없는 경우 웹사이트의 신뢰성을 확인하기 위해 다음 확인 인터페이스가 표시됩니다. 또한 6단계와 8단계에서는 클라이언트의 개인 키를 사용하여 암호화 및 해독하여 데이터 전송의 보안을 보장합니다.
HTTPS와 HTTP의 차이점
1. https 프로토콜은 CA에서 인증서를 신청하거나 자체 인증서를 만들어야 합니다.
2. http 정보는 일반 텍스트로 전송되는 반면 https는 안전한 SSL 암호화를 사용합니다.
3. http는 TCP로 직접 데이터를 전송하는 반면, https는 SSL(OSI 프리젠테이션 레이어) 계층을 통과하여 다른 포트를 사용합니다. 전자는 80(국내 신고 필요)이고 후자는 443입니다.
4. http 연결은 매우 간단하고 상태가 없습니다. HTTPS 프로토콜은 암호화된 전송 및 ID 인증을 수행할 수 있는 SSL+HTTP 프로토콜로 구축된 네트워크 프로토콜이며 http 프로토콜보다 더 안전합니다.
https 메시지가 tcp 메시지로 패키징되면 헤더 필드
또는 https의 본문 필드가 암호화되는지 여부에 관계없이 https 암호화는 전송 계층에서 완료됩니다.
패킷을 캡처하기 위해 tcpdump 또는 Wireshark 및 기타 tcp 레이어 도구를 사용하는 경우 암호화된 콘텐츠를 가져옵니다. 애플리케이션 레이어를 사용하여 패킷을 캡처하는 경우 Charels(Mac), Fildder(Windows)를 사용하세요. 패킷 캡처 도구를 사용하면 당연히 일반 텍스트로 표시됩니다.
PS: HTTPS 자체는 네트워크 전송 보안을 위한 것입니다.
예: Wireshark를 사용하여 패킷 캡처:
http, 캡처가 일반 텍스트로 되어 있는 것을 볼 수 있습니다:
https, 캡처가 암호 텍스트로 되어 있는 것을 볼 수 있습니다:
Appendix
HTTPS에서 일반적으로 사용하는 암호화 및 HASH 알고리즘은 다음과 같습니다.
비대칭 암호화 알고리즘: RSA, DSA/DSS
대칭 암호화 알고리즘: AES, RC4, 3DES
HASH 알고리즘: MD5, SHA1, SHA256
위 내용은 HTTP와 HTTPS 핸드셰이크란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!