nginx: 여러 인증서가 있는 SSL(기본) 엔드포인트

nginx: 여러 인증서가 있는 SSL(기본) 엔드포인트

저는 nginx를 여러 도메인(예: 100)에 대한 SSL 종료 TCP 엔드포인트로 사용하고 있습니다.

들어오는 연결을 다르게 처리할 필요는 없지만(모두 동일한 백엔드로 프록시 설정됨) 각 (지원되는) 도메인에 대해 nginx는 클라이언트에 유효한 인증서를 제공해야 합니다(여기서 유효하다는 것은 클라이언트의 도메인이 발급되고 서명된 경우를 의미함). 도메인이 지원되는 도메인 100개에 속하는 경우 연결).

내가 시도한 첫 번째 일은 -section을 사용 하고 x509 "대체 주제 이름" 확장을 통해 지원되는 모든 도메인에 게시하는 섹션을 server{}지정하는 것이었 습니다. ssl_certificate따라서 SNI는 관련되지 않습니다.

그러나 이는 다음과 같은 단점이 있습니다. a) 대체 테마의 수가 제한되어 있습니다. b) 지원되는 모든 도메인 목록이 유출됩니다.

그래서 저는 SNI를 사용해야 한다고 생각했고 모든 인증서(도메인당 하나)를 파일에 연결한 다음 ssl_certificate(분명히 해당 개인 키와 동일) 및 nginx를 통해 참조할 수 있다고 생각했습니다. 일부 SNI 마법을 통해 - 클라이언트는 서버 이름으로 전송된 내용에 제공된 올바른 인증서를 선택합니다. 그러나 파일의 첫 번째 항목은 선택되지 않습니다.

지정 ssl_certificate/ssl_certificate_key 지원하는 것으로 보인다알고리즘/유형인증서(RSA, EC 등)

현재 표시되는 마지막 옵션은 server{}지원되는 각 도메인과 해당 도메인별 ssl_certificate/ ssl_certificate_key옵션에 대한 섹션이 있습니다.

100개의 지원되는 도메인의 경우 이는 100개의 server{}부품을 의미하며 각 부품은 ssl_certificate.

TCP-SSL 연결을 "그냥" 종료하고 동일한 다음 홉으로 전달하는 더 좋은 방법이 있습니까? 여기서 유일한 차이점은 TLS 인증서와 연결된 개인 키뿐입니다.

편집하다:ssl_certificate어떻게든 / 에 할당된 값에 변수를 사용할 수 있다는 점을 놓쳤습니다 ssl_certificate_key. 예를 들면 다음과 같습니다.

ssl_certificate     $ssl_server_name.crt;
ssl_certificate_key $ssl_server_name.key;

그러나 여기에는 몇 가지 단점도 있습니다. a) 연결을 시도할 때마다 파일 시스템 조회가 발생하고 성공하면 인증서가 로드됩니다. b) (예: www-data)에서 실행 중인 (UNIX-) 사용자 nginx는 인증서에 대한 액세스 권한이 필요하며 키 파일 읽기 권한은 이제 로드되고 요청 시 읽히는 반면, 정적으로 정의되면 nginx는 권한을 제거하기 전에 이를 로드합니다.

관련 정보