이 분야의 용어가 헷갈려요. SSL, TLS, HTTPS란 무엇인가요? 이들 간의 차이점은 무엇인가요?
TLS는 SSL의 새로운 이름입니다. 즉, SSL 프로토콜은 버전 3.0에 이르렀고, TLS 1.0은 'SSL 3.1&39;입니다. 현재 정의된 TLS 버전은 TLS 1.1과 1.2입니다. 각각의 새 버전은 몇 가지 기능을 추가하고 일부 내부 세부 사항을 수정합니다. 우리는 때때로 'SSL/TLS'라고 말합니다.
HTTPS는 HTTP-내-SSL/TLS입니다. SSL(TLS)은 두 호스트 간에 임의의 바이너리 데이터를 위한 안전한 양방향 터널을 설정합니다. HTTP는 요청을 보내고 응답을 받기 위한 프로토콜로, 각 요청과 응답은 세부 헤더와 일부 콘텐츠로 구성됩니다. HTTP는 임의의 바이너리 데이터를 위한 양방향 터널을 통해 실행되도록 되어 있으며, 해당 터널이 SSL/TLS 연결인 경우 전체 터널을 ․HTTPS․라고 합니다.
약어를 설명합니다:
SSL과 TLS는 두 당사자 간에 개인 정보 보호와 데이터 무결성을 제공하는 것을 목표로 하는 프로토콜로(RFC 2246 참조), 신뢰할 수 있는 통신 프로토콜(일반적으로 TCP)을 통해 실행되도록 설계되었습니다. TLS 사양에서는 소켓에 대해 언급하지 않지만, SSL/TLS의 설계는 애플리케이션이 기존 TCP 소켓과 거의 유사하게 사용할 수 있도록 이루어졌습니다(예: Java의 SSLSocket
은 Socket
을 확장합니다)(사용성 측면에서는 약간의 차이가 있지만).
HTTPS는 SSL/TLS를 통한 HTTP로, SSL/TLS 연결이 먼저 설정된 다음 이 SSL/TLS 연결을 통해 일반 HTTP 데이터가 교환됩니다.
이를 위해 SSL 또는 TLS를 사용할지 여부는 브라우저와 서버의 구성에 따라 다릅니다(일반적으로 SSLv2, SSLv3 또는 TLS 1.x를 허용하는 옵션이 있음).
HTTP와 SSL/TLS가 HTTPS를 형성하는 방법에 대한 자세한 내용은 RFC 2818에 나와 있습니다.
SSL과 TLS의 차이점에 관해서는 StackOverflow와 ServerFault에서 비슷한 질문에 대해 작성한 다음 두 가지 답변에 관심이 있을 수 있습니다:
차이점을 찾아보세요; 다음은 몇 가지 차이점이지만 모두 나열할 수는 없을 것 같습니다:
ClientHello 메시지(핸드셰이크를 시작하기 위해 클라이언트가 보내는 첫 번째 메시지)에서 버전은 SSLv3의 경우 {3,0}, {3,1}입니다. TLSv1.0, TLSv1.1의 경우 {3,2}입니다. ClientKeyExchange가 다릅니다. MAC/HMAC이 다릅니다(TLS는 HMAC을 사용하는 반면 SSL은 이전 버전의 HMAC을 사용합니다). 키 파생이 다릅니다. 클라이언트는 SSLv3에서 SSL/TLS 완료 메시지를 전송한 후 바로 애플리케이션 데이터를 전송할 수 있습니다. TLSv1에서는 서버가 서버의 완료 메시지를 기다려야 합니다. 암호 제품군 목록이 다릅니다(일부 암호 제품군은 동일한 ID 번호를 유지하면서 SSL*에서 TLS*로 이름이 변경되었습니다). 새로운 재협상 확장에 관한 차이점도 있습니다. 일반적으로 암호화 제품군을 적절히 선택한다면 버전이 높을수록 또는 SSL/TLS가 높을수록 더 안전합니다(TLS의 상위 버전은 더 나은 암호화 제품군을 사용할 수도 있습니다). (SSLv2는 안전하지 않은 것으로 간주됩니다.) 또한 SSL은 IETF 범위에 속하지 않습니다. 예를 들어, [TLS 재협상 수정]은 SSLv3에 맞게 개조되어야 했습니다3(어쨌든 SSL/TLS 스택은 업데이트해야 했지만). 이 답변에도 관심이 있을 수 있습니다:
STARTTLS
와 유사). 이는 RFC 2817에 설명되어 있습니다. 제가 아는 한, 이것은 거의 사용되지 않습니다(브라우저에서 https://
에서 사용하는 것과는 다릅니다). 이 RFC의 주요 관련 부분은 HTTP 프록시 서버의 CONNECT
에 대한 섹션입니다(HTTP 프록시 서버에서 HTTPS 연결을 릴레이하는 데 사용됨).SSL과 TLS라는 용어는 종종 서로 같은 의미로 사용되거나 함께 사용되기도 하지만(TLS/SSL), 사실 하나는 다른 하나의 전신이며, SSL 3.0은 TLS 1.0의 기반이 되었기 때문에 SSL 3.1이라고 부르기도 합니다.
보안 측면에서는 둘 다 동등하게 안전하다고 간주됩니다.
가장 큰 차이점은 SSL 연결은 보안으로 시작하여 보안 통신으로 바로 진행되는 반면, TLS 연결은 먼저 서버에 대한 안전하지 않은 "안녕하세요"로 시작하여 클라이언트와 서버 간의 핸드셰이크가 성공한 후에야 보안 통신으로 전환된다는 점입니다. 어떤 이유로든 TLS 핸드셰이크가 실패하면 연결이 생성되지 않습니다.
HTTP 프로토콜은 데이터를 요청하고 수신하는 데 사용되며, SSL은 중간자 공격자가 데이터를 쉽게 얻을 수 없도록 http 프로토콜 요청 및 수신 활동을 암호화하는 보안 SSL에 불과합니다.
에 SSL 또는 TLS를 모두 사용하지 않으면 웹 서버와의 연결이 암호화되지 않고 모든 데이터가 일반 텍스트로 전송되어 중간자 공격자가 해당 데이터를 입수하여 볼 수 있습니다.
둘 다 동일하지만 TLS가 더 확장성이 뛰어나며 향후 더 많은 지원을 받기를 희망합니다. 그리고 TLS는 이전 버전과 호환됩니다.