2017-03-09 3 views
0

인증서 체인이있는 서버로 클라이언트에 연결할 수 있습니까?SslStream.AuthenticateAsServer 인증서 체인

clientStream.AuthenticateAsServerAsync(certificate, false, System.Security.Authentication.SslProtocols.Tls, false).Wait(); 

저는 자체 서명 된 인증서 체인을 사용하여 클라이언트에 연결하려고 시도했지만 운이 없습니다. SslStream 인스턴스의 메서드 AuthenticateAsServer에는 인수로 하나의 인증서 만 있습니다. 하지만 브라우저에서 additional root certificate을 요청하십시오. 의견이나 코드 샘플이 있습니까?

답변

0

체인은 루트를 전송하지 않습니다. A) 이미 가지고 있기 때문에 루트 저장소에 중복됩니다. 또는 B) 그렇지 않으면, 당신은 그것을 신뢰하지 않을 것입니다. 그렇다면 왜 귀찮게합니까?

RFC 5246, section 7.4.2

는 :

certificate_list : 이것은 일련의 증명서 (체인)이다. 보낸 사람의 인증서가 목록에 먼저 와야합니다. 다음에 나오는 각각의 인증서는 그 앞에 오는 인증서를 직접 인증해야합니다. 인증서 유효성 검사 루트 키가 가정하에 독립적으로, 루트 인증 기관을 지정하는 자체 서명 된 인증서 체인에서 생략 될 수있다 을 분산하는 것이 필요하기 때문에 원격 끝을 확인 하기 위해 그것을 가지고 이미해야 어쨌든.

SslStream 클래스는 서버 신원이 알고있는 중간체 다음 인증서가 아니라 (물론, 서버 ID 인증서가 자체 서명,하지 않는 한) 루트를 보내드립니다.

일반적으로 신뢰할 수없는 루트는 하위/중간 CA에 기록한 기관 정보 액세스 레코드를 통해 조회 할 수 있습니다. AIA가 없거나 엔드 포인트에 도달 할 수없는 경우 다른 메커니즘을 통해 루트를 클라이언트 시스템으로 전송해야합니다.