.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에 뭔가를 추가하거나 인증서를 서버 측의 일부 인증서 저장소에 추가하십시오. 나는 이것이 무엇이어야하는지 전혀 모른다.
어떻게 설치합니까?