2010-08-24 5 views
4

개념 증명을해야하며 지금까지는 도움이되지 않는 IIS6을 참조하는 주로 오래된 기사를 찾습니다.IIS 7.5 및 클라이언트 인증

즉, 다음과 같은 요구 사항이 있습니다.

클라이언트 인증서 만 사용하여 하나의 파일/페이지와이 파일/페이지를 보호해야합니다. 사이트의 나머지 부분은 SSL 하에서 계속 작동해야하지만 클라이언트 인증서가 필요하지 않습니다. 단 하나의 파일입니다. 매핑은 C#/VB.NET을 통해 프로그래밍 방식으로 수행되므로 사용자 매핑이 금지됩니다.

이제는 어렵지 않을 것입니다. Request.ClientCertificate 속성에 액세스해야한다는 것을 의미하지만 내 테스트에서는 클라이언트 인증서를 전선을 따라 이동시킬 수 없다는 것입니다.

IIS를 하나의 폴더에 설정하여 SSL을 요구하고 클라이언트 인증서를 수락하고 클라이언트 인증서가 필요하지만 iis에서 페이지를 방문한 후에는 모두 HTTP/1.1 403 Forbidden입니다. 클라이언트 인증서를 선택하라는 요청을받은 적이 없기 때문에 서버에 보내면 내 요청이 모두 통과되어 삭제됩니다.

이것을 테스트하기 위해 일부 코드를 사용하는 경우 더 이상 해집니다. 이 클라이언트 코드에서 CertPolicy 클래스는 cert 오류를 무시하는 메서드에서 true를 반환하고 test.cer은 MakeCert를 사용하여 만든 자체 서명 된 인증서입니다. 그냥 분명히하지만, 클라이언트 인증서 만 자체 서명, 주요 인증서가 제대로 서명되어 있지만 내가 피들러와 많이 놀고 나는 그 해킹 콜백을 가지고 왜 그렇게 그 인증서를 신뢰할 수 없습니다.

Dim Cert As X509Certificate = X509Certificate.CreateFromCertFile("Cert\test.cer") 
' Handle any certificate errors on the certificate from the server. 
ServicePointManager.CertificatePolicy = New CertPolicy() 
' You must change the URL to point to your Web server. 
Dim Request As HttpWebRequest = DirectCast(WebRequest.Create("https://local.domain.com/Cert/Server/"), HttpWebRequest) 
Request.ClientCertificates.Add(Cert) 
Request.UserAgent = "Client Cert Sample" 
Request.Method = "GET" 

Dim sr As StreamReader 
Using Response As HttpWebResponse = DirectCast(Request.GetResponse, HttpWebResponse) 
    ' Print the repsonse headers. 
    output.AppendFormat("{0}\r\n", Response.Headers) 
    output.AppendLine() 
    ' Get the certificate data. 
    sr = New StreamReader(Response.GetResponseStream, Encoding.Default) 
    Dim count As Integer 
    Dim ReadBuf() As Char = New Char((1024) - 1) {} 
    Do 
     count = sr.Read(ReadBuf, 0, 1024) 
     If Not 0 = count Then 
      output.AppendLine(New String(ReadBuf)) 
     End If 
    Loop While (count > 0) 
End Using 

는 대상 페이지는 내가 수락하거나 클라이언트 증명서를 무시하지만, 필요하지 IIS를 설정하면 항상 반환 부착 된 인증서 표시의 수를 반환합니다.

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs) 
    MyBase.OnLoad(e) 
    Dim cs As HttpClientCertificate = Request.ClientCertificate 
    Response.Write(cs.Count) 
    Response.End() 
End Sub 

사람이 나 클라이언트 증명서는 요구에 부착 그냥 좋은 것이 통과 될 수 있도록 IIS7.5을 구성하는 방법을 찾을 수 있습니다 경우

.

답변

3

이것은 오래된 질문이지만 내 자신의 답변을 검색하는 동안 그것을 발견하고 대답해야한다고 생각했습니다. 웹 사이트의 Web.config에서 클라이언트 인증서를 사용하려면 먼저 인증 모듈이 설치되어 있는지 확인해야합니다, 다음 기능을 사용 :

<location path="yourpath"> 
    <system.webServer> 
    <security> 
     <access sslFlags="Ssl, SslNegotiateCert"/> <!-- or SslRequireCert --> 
     <authentication> 
     <iisClientCertificateMappingAuthentication enabled="true" 
      oneToOneCertificateMappingsEnabled="true"> 
      <!-- or manyToOneCertificateMappingsEnabled="true" --> 
     </iisClientCertificateMappingAuthentication> 
     </authentication> 
    </security> 
    </system.webServer> 
</location> 

그런 다음 추가 일대일 또는 다수 - iisClientCertificateMappingAuthentication 요소 내부의 1 대 1 매핑

+0

만약 당신이'SslRequireCert'를 지정하면'SslNegotiateCert'도 지정해야합니다. – AakashM

+0

는 당신이 뭔가있는 것처럼 보입니다. http://stackoverflow.com/questions/14407666/how-do-i-implement-client-certificate-authentication-the-right-way를 확인하고 내가 찾고있는 필요한 정보를 제공 할 수 있습니까? 이 답변과 관련된 중요한 점은 구성의 serverpart에 대한 web.config에서이 ClientCertificateMappingAuthentication-node의 중요성입니다. –

2

서버가 브라우저에 클라이언트 인증서를 요청하면 신뢰할 수있는 인증 기관 목록을 보냅니다. 그러면 브라우저는 인증서 선택 대화 상자에서 관련 인증서 (서버가 신뢰하는 CA가 발급 한 인증서) 만 표시하기 위해이 정보를 기반으로 사용 가능한 인증서를 필터링합니다. 따라서 클라이언트 인증서는 자체 서명해서는 안

하지만, 1) 인증서가 발행되어야한다

는 (다른 브라우저는 필터링을 수행하는 경우 나도 몰라. 적어도이 Internet Explorer가 작동하는 방법입니다) 2) 해당 인증 기관의 인증서는 서버 (로컬 컴퓨터 계정의 신뢰할 수있는 루트 인증 기관 저장소에 있음)에 설치해야합니다.

테스트 목적으로 자신의 CA를 설정할 수 있으며 인증서가 서버에 설치되어 있는지 확인하십시오.