SAN과 SNI SSL 인증서의 차이점은 무엇입니까?


21

누군가이 인증서의 차이점을 단순화 된 방법으로 설명해 줄 수 있습니까? 일부 기사를 읽었지만 동일한 작업을 수행하는 것처럼 들립니다. 즉, 하나의 인증서로 많은 도메인을 암호화합니다.


11
우선, "SNI"SSL 인증서와 같은 것은 없습니다.
Michael Hampton

답변:


36

SAN (Subject Alternative Name)은 X509 인증서 사양의 일부이며 인증서에는 주체에도 유효한 대체 이름 목록이있는 필드가 있습니다 (단일 공통 이름 / CN 외에). 이 필드와 와일드 카드 이름은 본질적으로 여러 이름에 하나의 인증서를 사용하는 두 가지 방법입니다.

SNI (Server Name Indication)는 HTTP 호스트 헤더와 동등한 TLS 프로토콜의 일종 인 TLS 프로토콜 확장 입니다. 클라이언트가 이것을 전송할 때, 서버 측에서 별도의 IP 주소를 사용하는 데 제한을 두지 않고 서버가 클라이언트에 제시 할 적절한 인증서를 선택할 수 있습니다 (HTTP 호스트 헤더가 일반 HTTP에 많이 사용되는 방식과 유사 함).

SNI는 인증서에 반영된 것이 아니며 실제로 질문에서 요구하는 것과는 정반대입니다. 여러 가지 용도로 하나의 인증서를 사용하지 않고 많은 인증서를 갖는 것을 단순화합니다.

다른 한편으로, 그것은 실제로 어떤 경로가 바람직한 상황에 크게 의존합니다. 예를 들어, 질문에서 요구하는 것은 다른 엔터티에 대한 인증서가 필요한 경우 실제로 원하는 것이 아닙니다.


2
이름이 CN에 있지만 SAN이 아닌 (또는 인증서에 SAN 필드가없는 경우) CN이 오랫동안 사용되지 않는 경우 많은 클라이언트가 사용자에게 화를 낼 것입니다.
coderanger

1
@coderanger SAN 필드가 있으면 CN 필드는 대부분의 클라이언트에서 무시됩니다. SAN 필드가 없으면 CN 필드는 대부분의 클라이언트와 함께 작동합니다 (나에게 화를 내면 표시되지 않음).
kubanczyk

1
그들은 당신을 조용히 판단하고 있습니다.
womble

SNI는 하나의 IP 주소를 가진 서버가 HTTP 구성에 정의 된 여러 호스트를 보유하는 가상 호스트와 비슷한 것입니까? (일부 멀티플렉싱 : 다른 IP를 가진 각 인증서 대신 여러 인증서에 대해 하나의 IP 사용, 요즘 IPv4는 희소 한 자원)?
Fernando Gabrieli 2016 년

1
@FernandoGabrieli 예, TLS 수준에서 동일한 종류의 이름 기반 설정을 가능하게합니다.
Håkan Lindqvist

14

SANSubject Alternative Name의 약어 이며 x509 인증서 속성이며 SNI 는 SSL / TLS 클라이언트가 지원할 수있는 기능이므로 완전히 다른 엔티티입니다.

SAN 과 함께 인증서를 사용 하면 클라이언트가 SNI를 지원하지 않더라도 하나의 IP 주소에서 여러 HTTPS 지원 사이트를 호스팅 할 수 있습니다 . 이 경우 모든 사이트에 대해 하나의 인증서를 개최, 그러한 인증서 (사이트 이름을 모두 있어야합니다 ServerNames 또는 ServerAlias아파치 좌표 말이지, 또는 server_name그것의로의 nginx에서) SAN을 . 이는 "각 개별 IP 주소에서 하나의 HTTPS 사용 가능 사이트"를 확장 한 기존 접근 방식의 하위 집합입니다. 현재는 큰 CDN 만 SAN에 붙어 있습니다 .

사용 SNI를 당신은 또한 호스트 여러 하나의 IP에 사이트를 HTTPS를 사용 할 수 있습니다, 당신은 각 사이트에 대해 별도의 X509 인증서를 누른 다음은 다른 사이트 이름 언급도의 SAN의 속성을하지만, TLS 클라이언트 (예 : 브라우저와 콘솔 클라이언트와 같은 wget또는 curl) SNI 를 지원해야합니다 . SNI 를 즉시 지원하지 않는 마지막 OS 가 IE 6.x가 설치된 Windows XP 이기 때문에 이것은 현대적인 접근 방식 입니다. 요즘 당신이 볼 수있는 SAN의 당신이 구매하는 경우 속성을 와일드 카드 예를 들어 같은 인증서에 대한 - 인증서를 *.foobar.com포함 일반 이름*.foobar.comSAN 의를 foobar.com.


1
기술적으로 SSL 클라이언트가 SNI를 지원할 수 있다고 생각하지 않습니다 (내 지식으로는 SSL에 결코 나타나지 않은 TLS 확장입니다).
Håkan Lindqvist

3
SAN과 SNI 모두 클라이언트 지원이 필요합니다. 그러나 SAN은 오랫동안 사용되어 왔기 때문에 더 광범위하게 지원됩니다.
kasperd

4

이것은 인증서 프로세스의 두 부분을 혼합합니다.

SAN은 주체 대체 이름입니다. 여러 도메인에 대해 하나의 인증서를 만드는 방법입니다. 인증서를 원하는 다른 도메인을 인증서의 SAN 필드에 추가하기 만하면됩니다. 그런 다음 브라우저는 이러한 도메인의 유효성도 수락합니다.

SNI는 서버 이름 표시이며 SSL의 일부입니다. 원하는 서버 이름이 SSL 핸드 셰이크와 함께 전송되고 서버가 응답에 대한 올바른 인증서를 선택할 수 있기 때문에 단일 IP에서 여러 SSL 사이트를 호스트 할 수 있습니다.


0

여기에 인간이 읽을 수있는 더 많은 대답이 있습니다.

SNI는 클라이언트 측에서 수행되며 TLS 스택에 "이름이 [서버 X] 인 서버와 대화하고 싶습니다." 서버는이 [Server X] 문자열을보고 적절한 인증서로 응답합니다. 한 가지 실제 예는 단일 서버가 여러 도메인에 대한 트래픽을 제공해야하는 경우입니다. 클라이언트가 DNS 조회 지연을 피하기 위해 IP를 사용했지만 인증서 CN이 IP를 언급하지 않은 경우에도 유용합니다.

SAN은 인증서의 "Also Known As"목록입니다. 이 방법으로 서버는 여러 이름에 단일 인증서를 사용할 수 있습니다. 하나의 인증서에 여러 도메인을 추가하고 IP 목록을 추가 할 수도 있습니다.

보다시피, 사물이 겹칩니다. 둘 중 하나를 선택하는 것은 어느 쪽이 제어 할 수 있는지에 달려 있습니다. 일부 클라이언트는 SAN에서 이름을 인식하지 못하고이를 해결하는 유일한 방법은 SNI를 기반으로 적절한 인증서를 제공하는 것입니다. 서버가 단일 인증서에 대한 API를 제공하거나 클라이언트가 SNI를 보내지 않는 시나리오가 있습니다. 이러한 경우 SAN이 유일한 방법입니다.

우리 회사는 두 가지를 모두 사용합니다. 유연성을 제공하고 이전 버전과의 호환성을보다 쉽게 ​​만듭니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.