>  기사  >  웹 프론트엔드  >  https시대, 아직도 그에 대해 아무것도 모르시나요?

https시대, 아직도 그에 대해 아무것도 모르시나요?

PHPz
PHPz원래의
2017-03-12 17:24:531102검색

이 기사의 저자: Qieguo는 프론트엔드 개발 분야에 중점을 두고 있습니다. 더 많은 기사를 보려면 Zhihu 칼럼 "Front-end Little Things"를 주목해 주세요.

이제 유명 주요 웹사이트를 열어보세요. 주소를 찾으셨나요? 열에 작은 녹색 자물쇠가 추가되었나요?

https시대, 아직도 그에 대해 아무것도 모르시나요?

그래 지금은 https, https 시대다.

그런데 https에 대해 알고 계시나요?

간단히 말하면 https는 SSL/TLS로 래핑된 http이므로 안전한 http입니다. 안전이란 무엇입니까? 안전한 네트워크 통신 환경에서는 다음 세 가지 문제를 해결해야 합니다.

  1. 통신 내용의 기밀성

  2. 통신 당사자의 신원 진실성

  3. 완벽한 소통 콘텐츠

그리고 이 3가지 문제를 해결하기 위해 탄생한 것이 바로 https(정확하게는 SSL이어야 한다)를 살펴보자. 이 3개는 별도로 문제를 해결합니다.

통신 내용의 기밀성

통신 내용의 기밀성은 암호화를 통해 구현되어야 합니다. 우리의 인터넷 환경은 매우 투명하며 통신은 수신자에게 도달하기 전에 많은 경로를 거쳐야 합니다. 이 상황은 수업 중에 첫 번째 줄에 있는 샤오홍에게 쪽지를 건네는 것과 비슷합니다. 쪽지에는 "오늘 밤 자정에 놀이터에서 만나요"라고 직접 쓰지 않고 "같은 장소에서 만나요"라고 교묘하게 쓰게 될 것입니다. " 이 오래된 장소에 대해서는 당신과 Xiaohong만이 알고 있으므로 Xiaoming과 Xiaoli는 메모를 보더라도 이전 장소가 도서관인지 영어 코너인지 알 수 없습니다. 이것은 암호화이고 오래된 장소는 소위입니다. 열쇠.

물론 이 예는 그다지 정확하지는 않습니다. 쉽게 말하면 암복호화는 함수이고, 핵심은 이 함수의 매개변수 입니다. 예를 들어, 간단한 암호화 함수 f(x)=x+b를 정의합니다. x는 입력 일반 텍스트이고 b는 키입니다. 해독 함수는 암호화 함수의 역함수입니다. 즉, g(x)=x-b입니다. b를 모르면 암호문을 보아도 실제 내용을 추측할 수 없으므로 암호화가 이루어집니다. 이러한 종류의 암호화 및 복호화는 동일한 키를 사용하며 이를 대칭 암호화라고 합니다.

그런데 여기에 문제가 있습니다. 여기서 매개변수 b는 어떻게 협상되나요?

귀하와 Xiaohong은 전후에 Xiaohong과 약속을 잡을 수 있지만 실제 네트워크 환경에서 귀하와 Xiaohong이 직접 통신할 가능성은 없습니다. 모든 의사소통은 Xiaoming과 Xiaoli에 의존해야 합니다. 그렇다면, 이를 피하기 위해 무엇을 할 수 있습니까? 여기서는 비대칭 암호화 알고리즘을 사용해야 합니다. 이 알고리즘에는 공개 키와 개인 키가 있습니다. 공개 키는 누구나 얻을 수 있는 키이며, 개인 키는 서비스 서버에 의해 비공개로 유지됩니다. . 열쇠. 비대칭 암호화 알고리즘에서는 공개 키로 암호화된 내용은 개인 키로만 복호화할 수 있고, 개인 키로 암호화한 내용은 공개 키로만 복호화할 수 있습니다. 따라서 귀하가 Xiaohong의 공개 키를 사용하여 귀하의 메모를 암호화하면 Xiaoming, Xiaoli 및 귀하의 메모 전달을 돕는 다른 사람들이 해당 메모를 볼 때 해당 내용을 읽을 수 없습니다.

대칭 암호화 알고리즘은 암호화와 복호화에 동일한 비밀 키를 사용합니다. 비대칭 암호화 알고리즘은 암호화와 복호화에 두 개의 키가 필요하며 이 두 키는 공개 키(공개 입니다.) 공개 키라고 함) 및 개인 키(개인 키, 개인 키라고 함). 비대칭 암호화 알고리즘의 원리가 궁금하실 수도 있지만 여기서는 알고리즘에 대해서는 다루지 않겠습니다. 관심 있는 학생들은 스스로 검색할 수 있습니다.

그럼 샤오홍도 답변을 암호화하고 싶다면 어떻게 해야 할까요?

샤오홍이 개인 키로 암호화하면 학급의 모든 사람이 공개 키를 알고, 공개 키는 개인 키의 암호화를 해독할 수 있으며, 이는 또한 샤오홍의 메시지에 대한 응답을 모두가 해독할 수 있음을 의미합니다. . 당신이 똑똑하다면 해결책을 생각했을 것입니다. 비대칭 암호화 알고리즘을 사용하여 Xiaohong에게 대칭 키를 암호화하고, Xiaohong은 자신의 개인 키를 사용하여 대칭 키를 읽은 다음 이 대칭 키를 사용하여 대칭을 수행합니다. 암호화하면 행복하게 데이트할 수 있어요.

물론 https도 마찬가지입니다.

통신 당사자의 정체

암호화 후 통신 과정은 완벽해 보이는데요? 잠깐만요, 샤오홍의 공개키는 어떻게 세상에 알려지나요?

네트워크 환경에서 모든 정보 상호 작용은 메모 전달로 이루어지며, 샤오홍의 공개 키도 예외는 아니며 샤오밍의 손을 통과할 때 전환된다면 어떨까요? 당신의 손에 있는 Xiaohong 공개 키가 실제 Xiaohong 공개 키인지 어떻게 확인할 수 있나요? 학급의 미친 남자와 여자에 대한 메모가 다양한 방식으로 교환되는 것을 보고 오락 위원회 위원인 펑 자매가 나서기로 결정했습니다. Feng 자매는 자신의 신원을 증명하기 위해 모든 암호화된 통신에 인증서를 가지고 다닐 수 있는 방법을 고안했습니다. 이 증명서는 펑 자매가 학급의 모든 독신자들을 위해 특별히 만든 것입니다. 공개 키는 증명서에 들어 있으며 공개 키 외에 학생 번호와 같은 다양한 정보도 포함되어 있습니다. , 이름, 심지어 조디악 표지판, 키 및 치수까지. 증명서에는 커다란 신분 인장이 찍혀 있습니다. 이는 펑 자매의 고유 도장으로, 이 도장을 보면 상대방이 펑 자매임을 알 수 있습니다. 진짜 싱글.

이 정보를 통해 상대방이 Xiaohong인지 Ruhua인지 알 수 있습니다. 이것이 인증서 메커니즘입니다.

분명히 펑 자매님의 증명서에 있는 관인이 위조되었을 수도 있다는 의심을 품게 되실 것이며, 귀하의 의심은 정당합니다! 따라서 인증서의 공식 인감도 비대칭 암호화됩니다. 암호화 방법은 위에서 언급한 것과 정반대입니다. 즉, Feng 자매의 개인 키로 암호화하고 Feng 자매의 공개 키로 복호화하여 인증서의 진위 여부를 확인할 수 있습니다. 확인되었습니다. 이 공식 인장은 인증서의 디지털 서명입니다. 구체적으로는 먼저 해시 알고리즘을 사용하여 인증서의 다이제스트를 추출한 후 다이제스트를 암호화하는 과정입니다. 또한 증명서를 가지고 Feng 자매에게 직접 갈 수도 있으며 Feng 자매가 증명서의 유효성을 확인하는 데 도움을 줄 것입니다. (인증서에는 만료일이 있기 때문에 실제 인증서도 만료될 수 있으므로 주의가 필요합니다)

이 메커니즘은 꽤 완성된 것처럼 보이지만 보안 메커니즘을 구축하려면 모든 것을 의심해야 합니다. Feng 자매가 보장하는 것은 신뢰할 수 있습니다.

그런데 펑 자매가 정말 펑 자매인가요? ? ?

https시대, 아직도 그에 대해 아무것도 모르시나요?

따라서 Feng 자매 자신의 인증서는 교장이 발행하고 교장 인증서는 교장이 발행합니다. ... 이 체인은 끝까지 이어집니다. 여러 권위 있는 기관이 https 시스템의 소위 루트 CA입니다. 뿌리는 의심할 여지 없는 권위자이며, 스스로 소금을 가져오고 자신이 누구인지 증명합니다. https 인증서 시스템에서는 루트 인증서가 운영 체제/브라우저와 함께 제공됩니다. 이러한 조직에서 인증한 인증서를 신뢰한 다음 Fengjie 수준까지 계층별로 파생할 수 있습니다.

그리고 증명서는 실제로 만들기가 매우 쉽기 때문에 지하철 입구에서는 장당 10위안, 하버드와 스탠포드 모두 10위안입니다! 따라서 일부 회사에서는 유명한 12306과 같이 루트 CA 조직에 전혀 가지 않고 자체 인증서를 만들 것입니다. 또한 자신만의 인증서를 만들어 사용자가 다운로드하여 브라우저로 가져올 수 있도록 온라인에 게시할 수도 있지만 Feng 자매의 영향력이 없기 때문에 아무도 당신을 믿지 않을 것입니다. 물론 일부 사람들은 Feng 자매를 믿지도 않습니다. ...

https시대, 아직도 그에 대해 아무것도 모르시나요?

통신 내용이 완료되었습니다

비밀번호도 추가되고, 펑 자매의 직인도 찍히는 메커니즘인가요? 완벽한?

아니요아니요 생각해보세요. 당신을 좋아하는 샤오밍은 당신이 샤오홍에게 쪽지를 보내는 것을 보면 분명 기분이 좋지 않을 것입니다. 비록 그는 이해할 수는 없지만 그럴 수 있습니다. 여전히 비밀 텍스트를 변경하세요. 원래는 샤오홍에게 자정에 운동장에서 만나자고 하려고 했는데 샤오밍이 암호문의 앞부분을 삭제했고, 복호화한 후 우연히 '놀이터에서 만나자'라고 나오더군요. 그러자 샤오홍은 수업이 끝나자마자 놀이터로 달려갔습니다. , 그런데 당신은 샤워를 잘 하려고 기숙사로 달려갔습니다. . . 그러다가 샤오밍이 도망쳤어요~~

이러한 통신 내용을 조작하는 상황은 다들 공감하실 거라 생각합니다. 일부 사이트를 방문하면 아무 이유 없이 운영자의 광고가 표시됩니다. 운영자가 추가했어요! ! 따라서 콘텐츠의 무결성도 보장되어야 합니다. 이는 비교적 간단합니다. 먼저 해시 알고리즘을 사용하여 콘텐츠 요약을 추출한 다음 요약을 암호화하여 디지털 서명을 확인하면 됩니다. 통신 내용의 무결성.

위는 https에서 사용되는 기술을 단순화한 것입니다. http 통신 프로세스는 다음과 같습니다.

https시대, 아직도 그에 대해 아무것도 모르시나요?

일반적인 단계 :

  1. 클라이언트는 SSL 통신을 시작하기 위해 Client Hello 메시지를 보냅니다. 메시지에는 SSL 버전, 사용 가능한 알고리즘 목록, 키 길이 등이 포함됩니다.

  2. 서버가 SSL 통신을 지원하는 경우 Server Hello 메시지로 응답합니다. 메시지에는 SSL 버전과 협상된 암호화 및 복호화 알고리즘인 암호화 알고리즘 구성도 포함됩니다.

  3. 그런 다음 서버는 인증서ificate 메시지를 보냅니다. 이는 클라이언트에게 인증서를 보내는 것을 의미합니다.

  4. 클라이언트는 클라이언트 키 교환 메시지를 보내고 3의 인증서 공개 키를 사용하여 사전 마스터 비밀 임의 비밀번호 문자열을 암호화한 후 이 비밀번호를 통신용 대칭 암호화에 사용합니다.

  5. 서버가 개인 키를 사용하여 성공적으로 복호화한 후 SSL 통신 환경이 설정되었음을 나타내는 응답을 반환합니다.

  6. 그 다음에는 정기적인 http c/s 통신이 있습니다.

위에서 언급한 것처럼 3단계와 6단계에서는 다이제스트 및 서명 알고리즘을 사용하여 전달된 인증서와 통신 내용이 변조되지 않도록 합니다. 이 과정에서 알 수 있듯이 https의 핵심은 암호화, 특히 키 정보 전송에 많이 사용되는 비대칭 암호화 알고리즘에 있습니다.

암호화를 이해하고, 네트워크의 투명성을 인식하고, 모든 것에 회의를 품고 나면 https 시스템을 이해하기가 더 쉬워집니다.

결론

최근 http 관련 내용을 체계적으로 검토하고 있습니다. 이 글에서는 먼저 https의 기본 원리를 소개합니다. 재능과 지식에 부적절한 부분이 있으면 바로잡아주세요! 나중에 실제 애플리케이션, 정적 서버 구성 등을 소개하겠습니다. ~

부록

맨인더-를 피하는 방법 https 중간 하이재킹?

누군가 귀하의 DNS 서버를 하이재킹하여 wwe.icbc.com을 그의 불법 웹사이트로 연결하거나 프록시 서버가 귀하를 그의 불법 웹사이트로 연결한다면 이는 중간자 공격입니다. https가 없으면 공격이 발생합니다. 그렇다면 https는 이러한 공격을 어떻게 방지합니까?

답은 인증서 인증을 통해서 입니다.

  1. 인증서 신청 시 신청하는 도메인 이름에 대해 CA에서 제어 인증을 진행하기 때문에 옆에 있는 Lao Wang 홈페이지를 이용하여 신청하는 것은 불가능합니다. 자격증. 자신의 사이트를 해킹하더라도 Lao Wang은 인증서를 신청하기만 하면 알아낼 수 있습니다.

  2. 권한 있는 CA에서 발급하지 않은 인증서를 위조한 경우 해당 인증서가 불법인지 확인할 때 브라우저에서 경고 메시지가 표시됩니다. 물론 사용자는 기차표를 구하는 등의 작업을 계속할 수 있습니다. .

  3. 실제 사이트의 인증서를 다운로드하면 인증서의 도메인 이름은 변경되지 않고 공개 키만 교체하면 브라우저에서 정확성을 찾을 수 있습니다. 인증서의 디지털 서명을 비교하여 승차할 수 없으면 아무 말도 하지 않고 경찰에 신고하십시오.

  4. 중개자가 www.icbc.com의 실제 인증서를 직접 사용하는 경우 클라이언트의 메시지를 받을 수는 있지만 암호를 해독할 수 없으므로 클라이언트의 요청에 응답할 수 없습니다. 공격은 무효입니다!

인증서의 디지털 서명

이전에는 해싱 알고리즘과 디지털 서명에 대해 잘 몰랐는데, 알고 나니 원리가 꽤 와닿더군요. 단순한. 해시 알고리즘은 많은 양의 데이터를 고정 길이의 요약으로 변환할 수 있으며, 요약은 입력에 해당하며 입력이 변경되면 요약도 변경됩니다. 따라서 데이터에 해시 알고리즘을 적용하여 요약을 비교함으로써 데이터가 변조되었는지 여부를 확인할 수 있습니다. 인증서는 개인 키를 사용하여 다이제스트를 암호화한 다음, 클라이언트는 공개 키로 이를 해독하여 다이제스트를 얻을 수 있으며, 해시 알고리즘으로 계산된 다이제스트를 비교하여 인증서가 변조되었는지 여부를 확인할 수 있습니다. 반면 공개키와 개인키는 짝을 이루기 때문에 변조된 인증서의 다이제스트를 얻을 수는 있지만 서명을 암호화할 수는 없으므로 다이제스트와 암호화를 조합하여 인증서의 진위를 보장할 수 있다. 여기서 개인키는 인증서 발급 기관의 개인키로, 즉 CA 체인의 CA는 사용자 서버 인증서를 암호화하고, 상위 CA는 하위 CA의 인증서를 암호화하여 트러스트 링을 형성한다.

이 기사의 저자: Qie Guo, 프론트엔드 개발 분야에 중점을 두고 있습니다. 더 많은 기사를 보려면 Zhihu 칼럼 "Front-end Little Things"를 주목해 주세요

위 내용은 https시대, 아직도 그에 대해 아무것도 모르시나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.