SSL 인증서에 대한 Linux openssl CN/호스트 이름 확인

SSL 인증서에 대한 Linux openssl CN/호스트 이름 확인

CN=hostnameopenssl 1.0.1+를 사용하는 Enterprise Linux 시스템은 인증서의 값이 해당 시스템이 위치한 서버와 일치하는지 어떻게 확인합니까 ? SSL 웹 애플리케이션을 수신하는 어댑터의 IP 주소에 대해 기존의 일반 역방향 DNS 조회를 사용합니까? gethostname 라이브러리 기능을 사용합니까? /etc/hosts 파일을 읽나요? nsswitch.conf가 작동합니까?

고쳐 쓰다: 다른 사람들과 이야기를 나눈 후에는 이 모든 작업이 브라우저/클라이언트 측에서 수행된 것으로 보입니다. URL의 호스트 부분이 애플리케이션에 설치된 인증서의 CN 값과 일치하면 브라우저는 만족할 것입니다. 그렇죠?

답변1

예, 귀하가 설명하는 내용은 기술적으로 정확하지만 더 많은 일이 벌어지고 있습니다. 브라우저는 일부 표시기를 기반으로 호스트의 CN이 올바른지 여부를 결정합니다.

주요 표시는 HTTPS 트래픽용 SSL 인증서를 제공하는 호스트가 올바른 도메인에서 이를 제공하고 있으며, 인증서를 발급하고 체인 서명한 CA(인증 기관)를 기반으로 인증서의 서명 체인이 정확하다는 것입니다.

openssl를 사용하여 s_client브라우저가 수행하는 앞뒤 동작에 대해 알아볼 수도 있습니다.

$ openssl s_client -connect encrypted.google.com:443 < /dev/null | head -10
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority
verify return:1
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = *.google.com
verify return:1
CONNECTED(00000003)
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---
...
...
DONE

이 명령을 사용하면 SSL 인증서를 생성할 때 사용된 CN을 확인할 수 있습니다.

$ openssl s_client -connect encrypted.google.com:443 < /dev/null|& grep "CN.*google"
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = *.google.com
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com

CN=...따라서 브라우저는 이 인증서를 제시하는 호스트 이름이 인증서에 포함된 호스트 이름 계층에 속하는지 확인합니다.

신경망연구소

예전에는 HTTPS를 통해 사용하려는 각 SSL 서버의 호스트 이름에 대해 특정 IP 주소를 예약해야 했습니다. 그러나 SNI(서버 이름 표시)로 인해 더 이상 그렇지 않습니다.

발췌

이 접근 방식은 사이트가 각 IP 주소에 대해 SSL 인증서를 설치할 때 효과적입니다(이전에는 엄격한 요구 사항이었습니다). SNI(서버 이름 표시)를 사용하면 웹 서버가 동일한 IP 주소에 여러 SSL 인증서를 설치할 수 있습니다. SNI를 지원하는 브라우저는 초기 핸드셰이크 중에 액세스하려는 서버의 호스트 이름을 지정합니다. 이를 통해 웹 서버는 연결에 사용할 올바른 SSL 인증서를 결정할 수 있습니다.

openssl이 상황에서 브라우저가 수행할 작업을 다시 시뮬레이션할 수 있습니다.

$ openssl s_client -connect someserver:443 -servername sslsite-example.com

발췌

SSL 협상은 원격 서버에 HTTP 요청을 보내기 전에 이루어져야 합니다. 즉, 브라우저와 서버는 프로세스 초기에 인증서를 교환해야 하며 브라우저는 액세스하려는 사이트를 지정할 기회가 없습니다. SNI는 SSL 협상 중에 Host: 헤더 유형이 교환되도록 허용하여 이 문제를 해결합니다.

인용하다

관련 정보