2010-03-24 29 views
12

Piszę narzędzie, które pozwoli mi monitorować stan naszych stron internetowych. Składa się z szeregu zadań sprawdzania poprawności, które można uruchomić na podstawie aplikacji internetowej. Jednym z testów jest przewidzenie wygaśnięcia danego certyfikatu SSL.Wstępne pobieranie certyfikatu SSL .NET

Szukam sposobu, aby wstępnie pobrać certyfikat SSL zainstalowany na stronie internetowej przy użyciu .NET lub WINAPI, aby zweryfikować datę wygaśnięcia certyfikatu powiązanego z daną witryną.

Jednym ze sposobów, w jaki mogę to zrobić, jest buforowanie certyfikatów, gdy są one sprawdzane w procedurze obsługi ServicePointManager.ServerCertificateValidationCallback, a następnie dopasowywanie ich do skonfigurowanych witryn sieci Web, ale wydaje się to nieco hackowe. Innym rozwiązaniem byłoby skonfigurowanie aplikacji z certyfikatem dla witryny, ale wolałbym tego uniknąć, jeśli mogę, aby zminimalizować konfigurację.

Jaki byłby najłatwiejszy sposób pobrania certyfikatu SSL powiązanego z witryną przy użyciu platformy .NET, aby umożliwić sprawdzenie informacji zawartych w certyfikacie w celu jego sprawdzenia?

EDIT:

Aby przedłużyć na odpowiedź poniżej nie ma potrzeby ręcznego tworzenia Servicepoint przed utworzeniem żądania. Jest generowany na obiekcie żądania w ramach wykonywania żądania.

+4

niesamowite pytanie :) –

Odpowiedz

17

Właśnie próbowałem tego, co "działa na mojej maszynie (tm)".

Zwraca ciąg tekstowy reprezentujący datę ważności na certyfikacie serwera i wymaga rzeczywistego trafienia na stronie internetowej.

private string GetSSLExpiryDate(string url) 
{ 
    Uri u = new Uri(url); 
    ServicePoint sp = ServicePointManager.FindServicePoint(u); 

    string groupName = Guid.NewGuid().ToString(); 
    HttpWebRequest req = HttpWebRequest.Create(u) as HttpWebRequest; 
    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(); 

    return expiryDate; 
} 

Obawiam się, że nie znam wszystkich praw i krzywd korzystania Servicepoint oraz wszelkie inne obręcze, które mogą być potrzebne, aby przejść przez, ale dostaniesz datę ważności SSL dla aktualnej strony internetowej chcesz wiedzieć o.

EDYTOWANIE: upewnij się, że parametr "url" korzysta z protokołu https: //.

np. string contosoExpiry = GetSSLExpiryData ("https://www.contoso.com/");

+0

Miły człowiek - działa idealnie. Dzięki!!! –

+0

Użyłem tego do zapisania szczegółów certyfikatu po uruchomieniu wyjątków. Działa świetnie. – GregB

+0

Kiedy przeczytałem to, moje główne pytanie brzmiało: "Co to za ServicePoint?" Wygląda na to, że jest to obiekt "pomocnika połączenia" do połączenia z daną witryną, http lub https i udostępnia informacje niezbędne do wielokrotnego połączenia z tą witryną, jak w tym przypadku certyfikat. Poręczny. –

Powiązane problemy