2016-10-14 3 views
0

.NET Framework 4.5에서 IIS 7.5에서 실행되는 ASP.NET MVC3 서비스를 사용하여 하위 경로 중 하나에 대한 액세스를 보안하려는 경우 클라이언트 인증서. 그 서브 패스를 들어 나는자체 서명 된 클라이언트 인증서를 사용하여 ASP.NET MVC3 서비스에 대한 호출을 인증 할 수 없습니다.

public class CheckCertAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(
     ActionExecutingContext filterContext) 
    { 
     filterContext.HttpContext.Response.Headers.Add(
      "CheckCertAttribute", "entered"); 
     var cert = filterContext.HttpContext.Request.ClientCertificate; 
     // check the cert here, optionally return HTTP 403 
    } 
} 
처음 OnActionExecuting()가 호출되고

하지만 Certificate가 null의 요청 클라이언트 인증서를 액세스 할 특수하게 조작 된 속성으로 표시되어있는 컨트롤러를 제작. 내가 Web.config의에서 SslNegotiateCert를 활성화해야합니다 밝혀 :

<location path="PathOfInterest"> 
<system.webServer> 
    <security> 
    <access sslFlags="SslNegotiateCert"/> 
    </security> 
</system.webServer> 
</location> 

내가되면이 클라이언트가 항상 HTTP (403)를 수신하지 않고 속성이 더 이상 호출됩니다.

클라이언트 인증서는 자체 서명되어 있고 개인 키가 포함 된 .pfx로 내 보내지 만 서버 측에 서버가 도착하면이를 받아들이고 거부하기 때문에 문제가되는 것 같습니다. 을 통하여. 클라이언트 측 HttpWebRequest 사용

var cert = new X509Certificate2(pathToPfx, password); 
var request = (HttpWebRequest)WebRequest.Create("https://my.company.com/PathOfInterest"); 
request.ClientCertificates.Add(cert); 
request.GetResponse(); 

이미 이전에이 방법을 사용했습니다 그것은했다. 첫 번째 경우는 클라이언트 인증서가 자체 서명되지 않았지만 일부 신뢰할 수있는 루트 기관에서 서명 한 중간 인증서로 서명 한 경우입니다.이 경우 내 서비스가 매우 비슷하게 구성되어 있으면 정상적으로 수신됩니다. 두 번째 경우는 자체 서명 된 클라이언트 인증서를 사용하여 Azure 관리 서비스 호출을 작성했지만이 경우 서버 측 구성 방법을 알지 못합니다.

그래서 나는 인증서가 "작동하지 않게"하는 자체 서명 된 특성이라는 결론에 도달했습니다. 나는 뭔가를 추가로했습니다. 아마도 web.config에 뭔가를 추가하거나 인증서를 서버 측의 일부 인증서 저장소에 추가하십시오. 나는 이것이 무엇이어야하는지 전혀 모른다.

어떻게 설치합니까?

답변

0

IIS는 클라이언트와 상호 트러스트 된 연결을 "협상"하려고 시도하고 클라이언트 인증서가 자체 서명 되었기 때문에 IIS는 신뢰하지 않습니다.

귀하의 옵션 :

  1. 를 사용하여 잘 알려진 인증 기관에서 발급 한 인증서. 이것은 효과가 있지만 매년 인증서를 재발급 받아야합니다.
  2. 자신의 CA 인프라를 실행하고 루트 CA 인증서를 서비스 컴퓨터의 "신뢰할 수있는 루트"인증서 저장소에 추가하고 해당 루트 (중간 인증서를 통한 가능성이 높음)로 서명 된 인증서를 발급하십시오.
  3. 자체 서명 된 인증서를 서비스 시스템의 "신뢰할 수있는 루트"에 추가하십시오. This may induce subtle yet serious security risks. 나는 정말로 안전하지 않기 때문에 개인적으로이 옵션에 반대합니다.
  4. 클라이언트 인증서를 사용하지 않는 다른 인증 체계로 전환하십시오.
관련 문제