2013-02-04 4 views
2

나는 간단한 웹 서버를 구현하기 위해 HttpListener을 사용하고 있습니다. 포트 44430에 바인딩됩니다. IIS와 포트를 공유하지 않습니다. netsh을 사용하여 서버 인증서를 구성했습니다.HttpListener에서 클라이언트 인증서 사용

netsh http add sslcert ipport=0.0.0.0:44430^
    certhash=a614ebdfd07968dedd3afdb1cb8c696988dd7734^
    appid="{00112233-4455-6677-8899-AABBCCDDEEFF}" 

이제 클라이언트 인증서가 필요합니다. 위의 명령에 clientcertnegotiation=enable을 추가하면 netsh http show sslcert에 활성화 된 것으로 표시됩니다.

var context = listener.GetContext(); 
var clientCertificate = context.Request.GetClientCertificate(); 

을 ...하지만 Internet Explorer를 사용하여 사이트를 탐색 할 때, 다음 clientCertificatenull입니다 :

나는 내 서버에서 다음 코드를 사용합니다.

무엇이 누락 되었습니까?

+0

IIRC의 경우 'clientcertnegotiation = enable'은 초기 핸드 셰이크 중에 클라이언트 인증서 협상을 활성화합니다. Wireshark로 트래픽을 살펴보면 ("* Decode As ... -> SSL *"로 해당 포트의 패킷을보십시오)'Certificate Request' 메시지가 보일 것입니다. – Bruno

답변

0

Windows 인증서 저장소에 클라이언트 인증서가 있어야합니다.

인증서는 서버 호스트에서 이 신뢰되는 CA (인증 기관)에서 서명해야합니다.

그러면 IE는 클라이언트 인증서를 찾아 서버 에게 전달할 수 있어야합니다.

+1

포트 443의 IIS에서 제대로 작동합니다. 질문 : HttpListener가 클라이언트 인증서를 협상하지 않는 이유는 무엇입니까? 어떻게 구성합니까? –