2012-10-20 4 views
2

저는 HTTPS에서 작동하는 작은 C# 웹 서버를 만들려고합니다. this WebServer library을 사용하기로 결정했기 때문에 내가 원하는 모든 것을 수행 한 것 같습니다. 나는 SSL/TLS에 관해서 가장 잘 알고있는 사람이 아니기 때문에 누구나 내가 HTTPS 부분을 작동하도록 도울 수 있는지 궁금해하고 있었다. 기본적으로 웹 서버 라이브러리 (from this example, X.509 인증서를 사용하는 것처럼 보임)와 작동 할 SSL 인증서를 만든 다음 컴퓨터 및/또는 현재 사용자의 신뢰할 수있는 인증서에 해당 인증서를 추가해야합니다. 여기 프로그래밍 방식으로 C#을 사용하여 SSL 인증서를 만들고 신뢰 하시겠습니까?

가 (이 예에서 붙여 넣기 기본적으로 그냥 & 복사) 내가 지금까지 한 코드입니다 : 존재 : 그 코드 전에 어딘가에

var certificate = new X509Certificate2("C:\\Certs\\certificate.dat", "password"); 

// We do the cast since we want to specify UseClientCert 
var listener = HttpListener.Create(System.Net.IPAddress.Any, 8080, certificate); 
listener.RequestReceived+=listener_RequestReceived; 
listener.Start(5); 

, 나는 "\ 인증서 표시 \가 certificate.dat C"가 있는지 확인해야합니다 &은 컴퓨터에서 신뢰하며, 그렇지 않으면 인증서를 만들고 신뢰해야합니다.

응용 프로그램은 높은 실행되므로 권한 문제는 문제

EDIT 1 안 : 나는 정확히 내가 할 노력하고있어 설명해야처럼 보이는 . 실행될 때 로컬 컴퓨터에서 HTTPS 웹 서버를 시작하는 프로그램을 만들려고합니다. 나는 어떤 종류의 실제 유효성 검사를하기 위해이 키를 사용하려고하지 않고 단지 "OMG THIS PAGE DOESNT가 좋은 보안 키를 가지지 않고 HTTPS 로컬 페이지에 컴퓨터를 액세스하게합니다!" 오류. 이 테스트는 중요하지 않은 데이터 인 & 테스트와 함께 사용하기위한 용도로만 사용되었으므로 실제 보안은 작동하는 한 그다지 중요하지 않습니다. 코드 측면에서

, 나는 실제 웹 서빙을 처리 할 수 ​​ this WebServer library를 사용하고, 그리고 당신은 C# 코드에서 인증서를 만들 필요가 없습니다, 당신은 단지 당신의 자신을 가져올 수

+1

코드는 질문과 같이 신비합니다. Afaict, 당신은 전체 인증서 과정을 거꾸로 가지고 있습니다. 인증서는 귀하가 아니라 당국에서 발행합니다. 그 기관에는 누군가가 당신의 인증서가 합법적인지, 그리고 실제로 당신이 말하는 사람인지를 확인할 수있게 해주는 서버가 있습니다. 당신은 당신 자신의 권위가 될 수 없습니다, 그것은 나의 십대 아들이 "아빠를 믿으세요!"라고 말하는 것과 같습니다. 아니면 당신의 성이 정말로 "Thepc"라고 말하는 것입니다. http://en.wikipedia.org/wiki/Certificate_authority –

+1

@HansPassant OP는 https를 지원하는 웹 서버를 만들고 싶어 할뿐, 자신이 말하는 것을 증명하는 것이 아닙니다. –

+0

@HansPassant - 당신 말이 맞아요, 제 마지막 이름은 Thepc가 아닙니다. 아이디어는 이것이 웹 사이트를 테스트 할 수있는 컴퓨터에서 "빠른 테스트"시나리오를 설정하는 데 사용된다는 것입니다 (https 및 all) 버튼을 클릭하십시오. 저는 이것을 어떤 종류의 영구 인증서 시스템으로도 사용하지 않습니다. 죄송합니다 코드가 너무 모호한 경우; 나는 분명히하기 위해 포스트를 조금 편집 할 것이다. – MatthewSot

답변

3

from this example에서 코드입니다 프로그램 (즉, makecert에 의해 만들어진). 이미 설치되어 있는지 확인하려면 해당 X509Store을 이미 설치했는지 확인하고, 설치되어 있지 않은 경우 추가하십시오. 샘플은 StoreName enumeration 주제에서 찾을 수 있습니다.

여기 샘플에서 MSDN에 당신이 상점을 조작 할 필요가 임의 라인/인증서입니다

X509Store store = new X509Store(StoreName.My); 
store.Open(OpenFlags.ReadWrite); 
X509Certificate2 certificate1 = new X509Certificate2("c:\\mycerts\\*****.cer"); 
store.Add(certificate1); 
foreach (X509Certificate2 x509 in storecollection) 
{ 
    Console.WriteLine("certificate name: {0}", x509.Subject); 
} 

주 :

  • 추가 인증서 특권 작업입니다 및 일부 관리자 privilegies 필요할 수 있습니다 점포.
  • 인증서에 대한 피들러의 동작을 살펴보고 비슷한 프롬프트가 있는지 확인하십시오. (HTTPS 암호 해독을 활성화 할 때 Fiddler는 자체 인증서를 설치합니다).
관련 문제