SSL과 TLS의 차이점에 대한 기능적 의미


31

TLS는 기본적으로 최신 버전의 SSL이며 일반적으로 보안되지 않은 연결에서 보안 연결로 연결 (일반적으로 STARTTLS 명령을 통해)으로 전환하는 것을 지원합니다.

내가 이해하지 못하는 것은 IT 전문가에게 TLS가 중요한 이유와 다른 선택 중에서 하나를 선택하는 이유입니다. TLS는 실제로 최신 버전입니까? 그렇다면 호환되는 프로토콜입니까?

IT 전문가로서 : 언제 사용합니까? 언제 사용하지 않습니까?

답변:


44

짧은 답변:

SSL은 TLS의 선구자입니다. SSL은 Netscape Communications가 개발 한 독점 프로토콜로 나중에 IETF 내에서 표준화되어 TLS로 이름이 변경되었습니다. 간단히 말해 버전은 SSLv2, SSLv3, TLSv1.0, TLSv1.1 및 TLSv1.2의 순서로 진행됩니다.

상대적으로 널리 퍼져있는 믿음과는 달리 SSL을 사용하는 별도의 포트에서 서비스를 실행하고 TLS를 사용하는 일반 텍스트 변형과 동일한 포트에서 서비스를 실행해야하는 것은 아닙니다. SSL과 TLS는 두 가지 접근 방식에 모두 사용할 수 있습니다. 이는 연결시 SSL / TLS (때때로 "암시 적 SSL / TLS"라고 함)와 프로토콜 수준에서 명령이 실행 된 후 SSL / TLS STARTTLS( 일반적 으로 "명시 적 SSL / TLS"라고 함)의 차이에 관한 것입니다. . 키워드는 STARTTLSTLS가 아닌 "START"입니다. 응용 프로그램 프로토콜 수준에서 응용 프로그램 프로토콜 교환 전에 시작되지 않은 경우 SSL / TLS로 전환해야 함을 나타내는 메시지입니다.

클라이언트가 일반 텍스트 연결로 다운 그레이드되지 않도록 SSL / TLS를 예상하도록 구성되어있는 경우 두 모드 중 하나를 사용하는 것이 동일해야합니다.

더 긴 답변 :

SSL 대 TLS

내가 아는 한 SSLv1은 실험실을 떠나지 않았습니다. SSLv2SSLv3 은 Netscape에서 개발 한 프로토콜입니다. SSLv2는 공격을 다운 그레이드하기 쉽기 때문에 오랫동안 안전하지 않은 것으로 간주되었습니다. SSLv3은 내부적 (3,0)으로 ClientHello메시지 내 버전 번호로 사용합니다 .

TLS는 IETF 내에서보다 개방적인 프로토콜로 표준화 된 결과입니다. (나는 아마도 E. Rescorla의 저서에서 특정 회사를 선호하지 않기 위해 모든 참가자가 똑같이 만족하지 못하는 방식으로 이름이 선택되었다는 것을 읽었습니다. 이것은 표준에서 매우 일반적인 관행입니다. 전환 방법에 관심이있는 사람들은 SSL-Talk List FAQ를 읽을 수 있습니다 . 이 문서의 사본이 여러 개 있지만 대부분의 링크 ( netscape.com)가 오래되었습니다.

TLS는 매우 유사한 메시지를 사용합니다 ( 공통 버전을 협상 할 수는 있지만 프로토콜이 호환되지 않도록하기 위해 충분히 다릅니다 ). TLS 1.0 , 1.11.2 ClientHello 메시지 사용 (3,1), (3,2), (3,3)명확 SSL에서 계속 표시 버전 번호를 나타냅니다.

이 답변 의 프로토콜 차이점에 대한 자세한 내용 있습니다.

언제 사용합니까? 언제 사용하지 않습니까?

가능하면 가장 높은 버전을 사용하십시오. 실제로는 서비스 제공 업체로서 사용자에게 이러한 버전을 지원하는 클라이언트가 있어야합니다. 평상시와 같이 항상 위험 평가 연습입니다 (해당하는 경우 비즈니스 사례로 지원되는 것이 바람직 함). 어쨌든 SSLv2를 차단하십시오.

또한 SSL / TLS가 제공하는 보안은 사용하는 버전뿐만 아니라 올바른 구성이기도합니다. 익명 / 널 암호화) 암호 제품군. 너무 약한 것으로 간주되는 일부 암호 스위트는 최신 버전의 TLS에 의해 명시 적으로 금지되었습니다. 자세한 내용을 원하면 Java 7 SunJSSE 제공자 및 각주에있는 표 가 유용 할 수 있습니다.

최소한 TLS 1.1을 사용하는 것이 바람직하지만 모든 클라이언트가 아직 불행히도 (예 : Java 6) 지원하지는 않습니다. 1.1 미만의 버전을 사용하는 경우 BEAST 취약점완화하는 것이 좋습니다.

저는 일반적으로 Eric Rescorla의 저서-SSL 및 TLS : 보안 시스템 설계 및 구축, Addison-Wesley, 2001 ISBN 0-201-61598-3 을 더 자세한 내용을 원하는 사람들에게 추천 합니다.

암시 적 vs 명시 적 SSL / TLS

TLS를 사용하면 동일한 포트를 사용할 수 있지만 SSL은 사용할 수 없다는 신화가 있습니다. 그것은 사실이 아닙니다 ( 이 토론을 위해 포트 통일 을 남겨 두겠습니다 ). 불행하게도,이 신화는 MS Outlook과 같은 일부 응용 프로그램이 실제로 암시 적 및 명시 적 SSL / TLS 사이의 선택을 의미 할 때 구성 옵션에서 SSL과 TLS 사이에서 선택을 제공한다는 사실에 의해 사용자에게 전파 된 것으로 보입니다. (Microsoft에는 SSL / TLS 전문가가 있지만 Outlook UI에는 관여하지 않은 것 같습니다.)

이러한 혼란이 발생하는 이유는 STARTTLS모드 때문이라고 생각 합니다. 어떤 사람들은 이것을 STARTTLS= TLS 로 이해 한 것 같지만 , 그렇지 않습니다. 키워드는 STARTTLSTLS가 아닌 "START"입니다. 이 호출되지 않은 이유 STARTSSL또는 STARTSSLORTLS이러한 확장에만 사용되는 이름은 사양에 사용되는 IETF 내에서 지정된 때문입니다합니다 (TLS 이름이 결국 유일한 것 같아요, 서있을 것이라고 가정).

  • 일반 텍스트 서비스와 동일한 포트에있는 SSL : HTTPS 프록시.

오늘날 대부분의 HTTPS 서버는 TLS를 처리 할 수 ​​있지만 몇 년 전 대부분의 사람들이 HTTPS에 SSLv3을 사용하고있었습니다. HTTPS (엄격히 말해서, HTTP over TLS 로 표준화 됨 )는 일반적으로 TCP 연결시 SSL / TLS 연결을 설정 한 다음 SSL / TLS 계층을 통해 HTTP 메시지를 교환합니다. 사이에 HTTP 프록시를 사용할 때 예외가 있습니다. 이 경우 클라이언트는 명확하게 (일반적으로 포트 3128에서) HTTP 프록시에 연결 한 다음 CONNECTHTTP 명령 을 발행 하고 응답이 성공하면 SSL / TLS 핸드 셰이크를 시작하여ClientHello메시지. 이 모든 것은 브라우저와 프록시 사이의 연결과 관련이있는 한 동일한 포트에서 발생합니다 (물론 프록시와 대상 서버 사이가 아니라 동일한 컴퓨터가 아닙니다). 이것은 SSLv3에서 잘 작동합니다. 프록시 뒤의 상황에서 우리 중 다수는 적어도 TLS 1.0을 지원하지 않는 서버에 대해 이것을 사용했을 것입니다.

  • 일반 텍스트 서비스와 동일한 포트에있는 SSL : 전자 우편.

이것은 분명히 사양을 벗어 났지만 실제로는 종종 작동합니다. 엄격하게 말하면 사양은 STARTTLS 명령을 사용한 후 SSL이 아닌 TLS로 전환하는 것에 대해 설명합니다. 실제로 SSL은 종종 작동합니다 ( "HTTP over TLS"사양에도 TLS 대신 SSL 사용이 포함됨). 직접 시도해 볼 수 있습니다. STARTTLS를 지원하는 SMTP 또는 IMAP 서버가 있다고 가정하고 Thunderbird를 사용하고 환경 설정, 고급 옵션, 구성 편집기로 이동 한 다음 끄십시오 security.enable_tls. 많은 서버는 SSL / TLS 계층을 SSL / TLS 라이브러리에 위임하기 때문에 연결을 수락하지 않습니다. SSL / TLS 라이브러리는 SSL과 TLS를 처리하지 않을 경우 일반적으로 동일한 방식으로 처리 할 수 ​​있습니다. 는 AS OpenLDAP를 자주 묻는 질문 놓는다 "이 메커니즘은 TLSv1과 함께 사용하도록 설계되었지만 필요한 경우 대부분의 구현은 SSLv3 (및 SSLv2)로 대체됩니다. ". 확실하지 않으면 Wireshark와 같은 도구로 확인하십시오.

  • 별개의 포트에서 TLS.

많은 클라이언트가 보안 변형이 다른 포트에있는 프로토콜에 대해 TLS 1.0 (적어도)을 사용할 수 있습니다. 분명히 HTTPS에 대해 TLS 1.0 이상을 지원하는 여러 브라우저와 웹 서버가 있습니다. 마찬가지로 SMTPS, IMAPS, POPS 및 LDAPS도 TLS를 사용할 수 있습니다. SSL로 제한되지 않습니다.

언제 사용합니까? 언제 사용하지 않습니까?

명시 적 및 암시 적 SSL / TLS 간에는 실제로 중요하지 않습니다. 중요한 것은 클라이언트가 기대하는 것을 알고 그렇게하기 위해 적절히 구성되어 있다는 것입니다. 더 중요한 것은 SSL / TLS 연결을 기대할 때 암시 적이든 명시 적이든 일반 텍스트 연결을 거부하도록 구성해야합니다 .

명시 적 SSL과 암시 적 SSL / TLS의 주요 차이점은 구성 설정의 명확성에 있습니다.

예를 들어, LDAP의 경우 클라이언트가 Apache Httpd 서버 인 경우 ( mod_ldap불행히도 해당 문서에서 SSL과 TLS의 차이점을 잘못 레이블 지정하는 경우) ldaps://URL (예 :)을 사용하여 암시 적 SSL / TLS를 사용 AuthLDAPURL ldaps://127.0.0.1/dc=example,dc=com?uid?one하거나 명시 적 SSL / 추가 매개 변수를 사용하여 TLS (예 :) AuthLDAPURL ldap://127.0.0.1/dc=example,dc=com?uid?one TLS.

의 URL 방식의 보안 프로토콜을 지정할 때 아마도 일반적으로 (약간 낮은 위험을 말할 수있다 https, ldaps그들은 잊을 수 있기 때문에, SSL / TLS를 사용하려면 추가 설정을 구성하기 위해 클라이언트를 기대하는 경우보다, ...). 이것은 논쟁의 여지가 있습니다. 하나의 구현과 다른 구현의 정확성에 문제가있을 수도 있습니다 (예를 들어, Java LDAP 클라이언트는 ldaps://, 사용할 때 ldap://+ StartTLS 로 지원되는 경우 호스트 이름 확인을 지원하지 않는다고 생각 합니다).

의심스럽고 가능한 경우 더 많은 클라이언트와 호환되기 때문에 서버가 지원할 때 두 서비스를 모두 제공하는 데 아무런 해를 끼치 지 않는 것 같습니다 (서버는 동시에 두 포트에서 수신 대기합니다). 어느 모드에서나 사용할 수있는 프로토콜에 대한 많은 서버 구현은 두 가지를 모두 지원합니다.

클라이언트가 일반 텍스트 연결로 다운 그레이드되지 않도록하는 것은 클라이언트의 책임입니다. 서버 관리자는 다운 그레이드 공격을 방지하기 위해 기술적으로 수행 할 수있는 작업이 없습니다 (클라이언트 인증서가 필요할 수도 있음). 클라이언트는 SSL / TLS가 연결되어 있거나 STARTTLS-like 명령 이후에 활성화되어 있는지 확인해야합니다 . 브라우저가에서 https://로 리디렉션되지 않도록하는 것과 마찬가지로 http://프로토콜을 지원하는 클라이언트 STARTTLS 는 응답이 긍정적이고 SSL / TLS 연결이 활성화되어 있는지 확인해야합니다. 그렇지 않으면 활성 MITM 공격자가 두 연결을 쉽게 다운 그레이드 할 수 있습니다.

예를 들어, 이전 버전의 Thunderbird에는 "사용 가능한 경우 TLS 사용"이라는 잘못된 옵션이있었습니다. 이는 MITM 공격자가 서버 메시지를 변경하여 클라이언트가 STARTTLS에 대한 지원을 광고하지 않도록 서버 메시지를 변경할 수 있음을 의미했습니다. 자동으로 일반 텍스트 연결로 다운 그레이드되도록합니다. (이 안전하지 않은 옵션은 Thunderbird에서 더 이상 사용할 수 없습니다.)


3
포괄적 인 답변뿐만 아니라 출처가있는 올바른 답변을 게시 해 주셔서 감사합니다. 나에게서 +1

13

TLS는 SSL보다 새로운 프로토콜이지만 AFAIK는 SSL v3과 호환됩니다. 일반적으로 걱정해야 할 차이점은 하나뿐입니다.

SSL 프로토콜에는 일반적으로 별도의 포트가 있습니다 (예 : HTTP의 경우 80, HTTPS (HTTP / SSL)의 경우 443). SSL 포트에 연결하면 전체 세션이 암호화됩니다.

TLS는 SSL보다 최신 버전이므로 별도의 포트가 필요하지 않으며 대신 클라이언트가 협상해야합니다. 예를 들어 포트 143에서 IMAP을 실행할 수 있으며 메일 서버와 클라이언트가 모두 TLS를 지원하는 경우 클라이언트 STARTTLS명령 을 보내고 암호화 만 활성화합니다. 이렇게하면 SSL이없는 응용 프로그램과 호환되는 상태에서 별도의 SSL 전용 포트가 필요하지 않습니다.

요약 :
SSL : 약간 오래되었습니다. 일반 및 암호화 된 연결을위한 별도의 포트. SSL 포트의 모든 트래픽은 항상 암호화됩니다.
TLS : 일반 및 암호화 된 연결을위한 단일 포트. 클라이언트가 STARTTLS명령을 실행 한 후에 만 ​​암호화가 활성화 됩니다.


하지만 언제 사용해야합니까?
Randell

3
STARTTLS일부 프로토콜에서 사용하면 동일한 연결에서 TLS로 전환 할 수 있다는 사실이 SSL과 TLS의 차이가 아닙니다. 기술적으로 동일한 방식으로 SSLv3으로 전환 할 수 있습니다.
Bruno

9
이 답변은 불행히도 잘못되었습니다. 다시 한번, TLS와 SSL은 하나의 포트와 별도의 포트 가 아닙니다 . security.stackexchange.com/q/5126/2435
Bruno

1
잘못되었습니다. -1 투표
Tatas

10

TLS는 단순히 최신 버전의 SSL입니다. 옵션이 있으면 TLS를 사용하십시오. 평소와 같이 Wikipedia에 더 있습니다.


1
옵션이 있는데 왜 TLS를 사용합니까?
Randell

8

Indiana University 기술 자료 기사에서 :

SSL은 SSL (Secure Sockets Layer)을 나타냅니다. Netscape는 원래 개인 정보를 전송하고 메시지 무결성을 보장하며 서버 ID를 보장하기 위해이 프로토콜을 개발했습니다. SSL은 주로 데이터에 공개 / 개인 키 암호화를 사용하여 작동합니다. 일반적으로 웹 브라우저에서 사용되지만 SSL은 전자 메일 서버 또는 모든 종류의 클라이언트-서버 트랜잭션에도 사용될 수 있습니다. 예를 들어 일부 인스턴트 메시징 서버는 SSL을 사용하여 대화를 보호합니다.

TLS는 전송 계층 보안을 나타냅니다. IETF (Internet Engineering Task Force)는 SSL의 후속 제품으로 TLS를 만들었습니다. 전자 메일 프로그램의 설정으로 가장 많이 사용되지만 SSL과 같이 TLS는 모든 클라이언트-서버 트랜잭션에서 역할을 수행 할 수 있습니다.

두 프로토콜의 차이점은 매우 작고 기술적 인 것이지만 표준은 다릅니다. TLS는 강력한 암호화 알고리즘을 사용하며 다른 포트에서 작동 할 수 있습니다. 또한 TLS 버전 1.0은 SSL 버전 3.0과 상호 운용되지 않습니다.


2
여기에서 : kb.iu.edu/data/anjv.html
jjnguy

4

TLS는 최신 버전의 SSL입니다. 어떤 곳에서는이 단어가 단지 프로토콜 이외의 다른 의미 일 수도 있지만 질문을 명확히하십시오.


OP는 이미 TLS가 최신 버전의 SSL이라고 언급했습니다. 게시물의 나머지 부분은 주석입니다. 답이 아닙니다.
user207421

@ EJP : 대답이 3 세 이상임을 알았습니까?
user9517은 GoFundMonica

(나는 ♦ -mod도 다른 사용자의 질문을 편집하여 원래 사용자에게는 적용 할 수없는 "I know that ..."을 추가 할 수 있는지 궁금합니다)
wRAR

1
@EJP, wRAR에 공평하게,이 질문의 편집은 오랜 논쟁의 주제였습니다 ( 여기여기 참조 ). 물론,이 중 어느 것도 역사를 살펴 보지 않고 바로 볼 수 없습니다. (이 편집은 모드에 의해 만들어졌습니다 ...)
Bruno
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.