2013-03-11 36 views
7

Verileri herhangi bir etki alanı adı SSL sertifikasından almak istiyorum. Örneğin, herhangi bir web sitesine girmek istiyorum örn. "http://stackoverflow.com" ve kodum önce bir SSL sertifikası olup olmadığını kontrol eder. Eğer yaparsa, sertifikanın son kullanma tarihini çıkarmasını istiyorum. Örnek [i DB den DOMAINNAMES okuyorum] i son kullanma tarihini kontrol etmek için bir web hizmeti oluşturmak için gereken http://www.digicert.com/help/ssl sertifika bilgilerini edinin - .net

. Bunu nasıl uygulayabilirim? - RequestCertificateValidationCallback ve ClientCertificates gibi farklı şeyleri araştırdım. Bunun için yeni olduğumdan, ne yapılması gerektiğinden emin değilim.

Tamamen yanlış olabilir (dolayısıyla yardıma ihtiyacım neden) ama yaratacak bir HttpWebRequest ve sonra bir şekilde istemci sertifikası ve belirli öğeleri yolu talep?

i örnek sağlanan @SSL sertifika .NET ön getirme çalıştım ama 403 hatası forbitten alıyorum.

Herhangi bir yardım çok takdir edilecektir - Teşekkürler.

Bu

403 yasak hatası atıyor i yazdım koddur.

 Uri u = new Uri("http://services.efi.com/"); 
     ServicePoint sp = ServicePointManager.FindServicePoint(u); 

     string groupName = Guid.NewGuid().ToString(); 
     HttpWebRequest req = HttpWebRequest.Create(u) as HttpWebRequest; 
     req.Accept = "*/*"; 
     req.ConnectionGroupName = groupName; 

     using (WebResponse resp = req.GetResponse()) 
     { 
      // Ignore response, and close the response. 
     } 
     sp.CloseConnectionGroup(groupName); 

     // Implement favourite null check pattern here on sp.Certificate 
     string expiryDate = sp.Certificate.GetExpirationDateString(); 

     string str = expiryDate; 

cevap

1

. IE'yi kullanarak Uri'ye göz atarken aynı şeyi görüyorum. Bu durum, URL’ye erişim izninizin olmadığını gösterir. Bu nedenle, kodunuzu erişebileceğiniz bir sayfada denemelisiniz.

Ayrıca, http bağlantısında bir sertifika görmeniz olası değildir - bunun yerine https'u denemek isteyebilirsiniz.

+0

https://services.efi.com/ kullanmayı denedim, ancak yine de 403 hatası veriyor. 'http://ipp.efi.com' kullandığımda mükemmel çalıştı. – user166013

+0

Evet, çünkü bu ikinci Url genel olarak erişilebilir (ve ayrıca https'ye otomatik olarak yönlendirir) ve eski değil. IE'ye göz atamazsanız, kodu da yükleyemezsiniz. Sadece 'services.efi.com''a erişemezsiniz (sahip olmadığımız bir kimlik veya erişim yolunuz yoksa!). Belki de bu etki alanı için sadece bir alan adı Uri yerine özel bir sayfaya ihtiyacınız var ... –

+0

oh tamam, cevabınız için teşekkürler :) .. alanımın altında (services.efi.com) barındıran web sitesi sayısı hosted.my requireemnet, SSL Son Kullanma tarihini belirlemek ve gerekli işlemi yapmaktır (son kullanma tarihi yaklaşık 20 gün içinde ise, postayı gönderin). alanımın SSL sertifikası bilgilerini almak için nasıl yapabilirim? – user166013

5

Bu çalışıyor: bu sunucu döndürür Söz konusu sayfayı eriştiklerinde ne çünkü bir "403 yasak" durumu alıyorsanız

namespace ConsoleApplication1 
{ 
    using System; 
    using System.Net; 
    using System.Net.Security; 
    using System.Security.Cryptography.X509Certificates; 

    class Program 
    { 
    static void Main() 
    { 
     ServicePointManager.ServerCertificateValidationCallback += ServerCertificateValidationCallback; 

     var request = WebRequest.Create("https://www.google.com"); 

     var response = request.GetResponse(); 

     Console.WriteLine("Done."); 
     Console.ReadLine(); 

    } 

    private static bool ServerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { 
     Console.WriteLine("Certificate expires on " + certificate.GetExpirationDateString()); 

     return true; 
    } 
    } 
} 
+0

yani https://webapps.efi.internal/ 403 yasak hatasını atıyor. Aslında, webapps sunucunun adı altında barındırılan web sitelerinin sayısı olan benim durumumda. – user166013

1

sertifikayı indirmek gerekirse:

  //Do webrequest to get info on secure site 
     var certName = "FileName"; 
     var url = "https://mail.google.com"; 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     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(); 

     var path = Directory.GetCurrentDirectory() + string.Concat("\\", certName, ".der"); 
     byte[] certData = cert2.Export(X509ContentType.Cert); 
     File.WriteAllBytes(path, certData); 

     Console.WriteLine("cert2.GetIssuerName :{0}", cert2.GetIssuerName()); 
     Console.WriteLine("cert2.GetExpirationDateString :{0}", cert2.GetExpirationDateString()); 
     Console.WriteLine("cert2.GetPublicKeyString :{0}", cert2.GetPublicKeyString()); 

.cs Numune Dosyası: Ben de bu siteyi tavsiye https://gist.github.com/thedom85/6db200104c075310527aaef63b172253

: benim alan adını kullanarak çalıştı zaman https://www.simple-talk.com/dotnet/.net-framework/tlsssl-and-.net-framework-4.0/

İlgili konular