특정 폴더/파일에 대한 액세스를 보호하기 위해 상호 인증을 사용하도록 Apache 웹 서버를 설정하라는 요청을 받았습니다.
이 특정 파일/폴더에 대한 액세스는 클라이언트가 신뢰할 수 있는 자체 서명 클라이언트 인증서를 보내는 경우에만 허용되어야 합니다.
웹 서버에서 신뢰할 수 있는 CA가 서명한 유효한 인증서로 HTTPS를 설정했습니다(쉬운 부분입니다).
저는 이런 일을 해본 적이 없으며 어디서부터 시작해야 할지, 작동하는지 확인하는 방법을 모릅니다.
또한 클라이언트가 설정을 시작하기 위해 어떤 파일을 보내야 하는지 모르겠습니다. 클라이언트가 인증서 서명에 사용된 CA와 함께 클라이언트 인증서를 보내야 한다고 생각합니다. 이것이 최선의 접근 방식입니까?
설정하는 것을 도와주실 수 있나요?
답변1
이 주제에 대한 여러 온라인 자습서를 확인할 수 있습니다.
기본적으로 TLS를 정상적으로 활성화한 다음 클라이언트 인증서를 요구하는 인증 규칙을 추가합니다.
SSLVerifyClient require
이로 인해 액세스가 실패하고 브라우저는 클라이언트에게 사용 가능한 인증서 중에서 선택하도록 요청합니다.클라이언트 운영 체제 또는 브라우저에 설치해야 함. 선택한 인증서가 클라이언트에 로드되면 자동으로 서버로 전송됩니다.
이제 추가하면 SSLOptions +StdEnvVars
Apache가 인증서에서 정보를 추출하도록 지시하여 사용자를 구별할 수 있게 됩니다.
이제 귀하의 환경에 귀중한 정보가 있으며 이를 사용하여 애플리케이션 또는 Apache 내에서 추가 인증을 수행할 수 있습니다.
원하는 환경 변수는 아마도 SSL_CLIENT_S_<something>
클라이언트 SSL_CLIENT_S_DN_CN
인증서의 일반 이름일 것입니다. 그런 다음 필요에 따라 클라이언트의 매개변수를 제한할 수 있습니다.
SSLRequireSSL
SSLOptions +StdEnvVars +ExportCertData +OptRenegotiate +FakeBasicAuth
SSLVerifyClient require
SSLRequire %{SSL_CLIENT_I_DN_CN} eq "Issuer DN's Common Name"
and %{SSL_CLIENT_S_DN_O} eq "Subject DN's Organisation"
and %{SSL_CLIENT_S_DN_CN} eq "Leonardo Serni"
@UlrichSchwarz가 올바르게 지적했듯이임원인증기관. 그렇지 않으면 누구나 다음과 같은 인증서에 자체 서명할 수 있습니다.아무것, 그리고 당신은 아무것도 모릅니다.
따라서 자체 CA를 만들고 사용해야 합니다.저것서명 인증서를 생성하여 고객에게 배포합니다.
고쳐 쓰다: 이것나변수는 (I) 발행자와 관련되며,에스인증하는 주체(예: 클라이언트)인 (S) 주체와 관련됩니다. 전체 목록과 해당 의미는 설명서에서 확인할 수 있습니다 mod_ssl
.