2012-07-19 3 views
4

HTTP 및 SSL을 통해 서버와 통신하는 C#으로 응용 프로그램을 개발 중입니다. 서버에서 제공 한 인증서를 프로그램이 신뢰하도록 할 수있는 방법이 있습니까? 이 인증서는 소프트웨어와 함께 배포되므로 외부 CA와 관련없이 서버를 식별 할 수 있습니다.수동으로 C#에서 SSL 인증서를 신뢰하십시오.

설명 : 클라이언트 응용 프로그램이 클라이언트에서 하드 코딩 된 하나의 인증서를 신뢰하도록하여 내 서버 만 신뢰하도록합니다.

+0

모든 인증서를 신뢰 하시겠습니까 (자체 CA가 아닌 완전히 서명 된 인증서를 사용하여 인증서의 유효성 검사를 무시하십시오)? –

+0

이 질문 - http://stackoverflow.com/questions/7485313/check-self-signed-certificate-ssl-c - 시작하는 데 도움이 될까요? –

+0

@ J.Steen 그게 내가 생각하고 내 의견을 추가 한 것일 수도 있습니다. 특정 코드의 유효성을 검사하고 싶을 수도 있습니다. –

답변

1

BouncyCastle을 사용할 수 있습니다.

  1. FromX509Certificate(X509Certificate) 기능을
  2. 로드 BC에 서버 인증서의 공개 키를 사용하여 BC의 usign에 DotNetUtilities 클래스를 사용자의 CA 인증서를로드합니다.

인증서의 서명을 확인이 방법 키 공개 서버 인증서에

  • 전화 Verify. 가장 안전한 방법은 무엇입니까? 또한 클라이언트를 업데이트하지 않고도 서버 인증서를 업데이트 할 수 있습니다. (언제 까지나 CA가 해제 물론 유효한 경우)의

    소스가 여기에 확인 http://www.bouncycastle.org/viewcvs/viewcvs.cgi/csharp/crypto/src/x509/X509Certificate.cs?view=markup 라인 : 제 생각에는 540

  • +0

    그래서 아직 적절한 CA 인증서가 필요합니까? –

    +0

    클라이언트 측에서 인증서로 서명 한 인증서 (서버 인증서를 확인하는 데 사용하는 인증서)는 확인되지 않습니다. 따라서 자기 제작 된 CA만으로 충분할 것입니다. – albertjan

    0

    , 나는 당신이 보안 채널을 가질 수 이것과 신뢰를 할 수 있다고 생각하지 않습니다를. 누군가 내가 잘못하면 나를 바로 잡을 수 있지만 SSL의 CA 트러스트 체인은 엄지 손가락이 특정 값 (또는 인증서의 다른 부분)인지 확인하는 것이 아닙니다. 클라이언트가 올바른 서버와 통신하고 있음을 증명합니다 (공유 CA 키로 인해). This illustration은 좋은 참고 자료입니다. 3 단계를 건너 뛰면 서버가 클라이언트에 신원을 증명할 수 없습니다 (인증서 유효성 검사 실행). (베리사인 등 같은) 공유 CA 인증서를 사용하여

    so that it will only ever trust my own server

    SSL 보장이. 어쩌면 나는 왜 당신이 을 의도적으로 SSL을 사용하지 않기로 선택하는지 이해할 수 없습니다.

    편집 : 그의 대답에 밖으로 the_ajp 으로 점, 인증서 체인에 전체 검증을 할 것입니다 (탄력이 성 등) 라이브러리가있다. 이들은 수동으로 호출 할 수 있습니다.

    +0

    4 단계 "서버 ID 확인"은 comonname을 dnsname과 비교하는 것 이상입니다. – albertjan

    +0

    @the_ajp 그래, 미안하지만, 그 다이어그램을 보면 혼란스러워. 나는 3 단계를 의미했다. 나는 나의 대답을 편집했다. –

    +0

    바로 그게 내 대답에 설명하는 단계입니다 :) – albertjan

    관련 문제