2013-03-07 9 views
11

나는 주어진 도메인 이름 SSL 인증서에서 데이터를 얻으려고합니다. 예를 들어 나는 어떤 웹 사이트 주소에 넣고 싶습니다. "http://stackoverflow.com"그리고 내 코드는 먼저 SSL 인증서가 있는지 확인합니다. 그럴 경우 인증서의 만료일을 철회하고 싶습니다. [DB에서 도메인 이름을 읽는 중] 예 : http://www.digicert.com/help/.net에서 SSL 인증서 가져 오기

만료일을 확인하려면 웹 서비스를 만들어야합니다. 어떻게 구현할 수 있습니까 ?? - RequestCertificateValidationCallback 및 ClientCertificates 등과 같은 다른 여러 가지를 조회했습니다.

내가 완전히 틀릴 수 있으므로 (내가 왜 도움이 필요한지) 나는 HTTPWebRequest를 만든 다음 어떻게 든 클라이언트 인증서와 특정 요소를 요청할 수 있습니다. ?

나는 예제를 시도했다 @SSL certificate pre-fetch .NET, 그러나 나는 forbitten 403 오류를 얻고있다.

도움을 주시면 감사하겠습니다. - 감사합니다.

+0

이 링크에서 자세한 사항을 사용하십시오 http://stackoverflow.com/questions/1534908/transfer-files-over-ftps-ssl-tls-using-c-net?answertab=active#tab- 위로 http://www.codeproject.com/Articles/31624/An-FTP-secure-client-library-for-C 이 링크는 ftp를 다루지 만 ... 원하는대로 사용하고 있습니다. 인증서에 대한 세부 정보를 얻으십시오. httprequest에 사용하십시오. – cdev

+0

httprequest를 사용해 보았지만 403 금지 된 오류가 발생했습니다 – user166013

+0

답변을 추가했습니다. 그것을 확인하고 당신에게 도움이되는 것을 알려주세요. – cdev

답변

18
using System.Security; 
    using System.Security.Cryptography; 
    using System.Security.Cryptography.X509Certificates; 

    //Do webrequest to get info on secure site 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://mail.google.com"); 
    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    response.Close(); 

    //retrieve the ssl cert and assign it to an X509Certificate object 
    X509Certificate cert = request.ServicePoint.Certificate; 

    //convert the X509Certificate to an X509Certificate2 object by passing it into the constructor 
    X509Certificate2 cert2 = new X509Certificate2(cert); 

    string cn = cert2.GetIssuerName(); 
    string cedate = cert2.GetExpirationDateString(); 
    string cpub = cert2.GetPublicKeyString(); 

    //display the cert dialog box 
    X509Certificate2UI.DisplayCertificate(cert2); 

이것을 실행하려면 참조 할 system.security를 ​​추가해야합니다.

+0

인쇄 값 cn, cedate, cpub – cdev

+0

감사합니다 .. 그 잘 작동 :) – user166013

3

한 가지주의해야 할 점은 request.AllowAutoRedirect = False을 설정해야 할 수도 있다는 것입니다. 그렇지 않으면 서버가 HTTPS를 HTTP로 리디렉션하면 HttpWebRequest 개체에서 인증서를 가져올 수 없습니다. 당신이 을 원하는