muszę zaufać kilka certyfikatów z podpisem własnym w aplikacji, więc zastępują zwrotnego walidacji tak:Jak wywołać domyślne sprawdzanie certyfikatu podczas zastępowania ServicePointManager.ServerCertificateValidationCallback w języku C#?
ServicePointManager.ServerCertificateValidationCallback = MyRemoteCertificateValidationCallback;
...
public static bool MyRemoteCertificateValidationCallback(
Object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
if (IsAprrovedByMyApplication(sender, certificate)) // <-- no matter what the check here is
return true;
else
return false; // <-- here I'd like to call the default Windwos handler rather than returning 'false'
}
Ale kiedy tam jesteśmy pewne błędy polityczne, a strona Łączę się nie jest zatwierdzony przez aplikacji, zgłaszany jest wyjątek. Problem polega na tym, że różni się od standardowego zachowania Windows.
Rozważmy witrynie: https://www.dscoduc.com/
certyfikat Za ma nieznaną emitenta, a zatem niezaufane. Dodałem go z MMC do Zaufanych Ludzi Lokalnych Kmuterów (to Windows 7).
Jeśli uruchomić ten kod bez przesłanianie callback poprawności certyfikatu:
HttpWebRequest http = (HttpWebRequest)HttpWebRequest.Create("https://www.dscoduc.com/");
using (WebResponse resp = http.GetResponse())
{
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
string htmlpage = sr.ReadToEnd();
}
}
łączy pomyślnie. Oznacza to, że domyślny weryfikator systemu Windows postanowił zaufać temu certyfikatowi.
Ale kiedyś zastąpić ServerCertificateValidationCallback moja zwrotna jest wywoływana z SslPolicyErrors.RemoteCertificateChainErrors i łańcucha zawiera jeden element ze statusem X509ChainStatusFlags.PartialChain (w rzeczywistości byłoby oczekiwać, aby otrzymać błędów tutaj, ponieważ posiadał prądu cert ma być zaufany)
Ta strona nie znajduje się na mojej zaufanej liście i nie chce zwracać "prawdziwości" z mojego wywołania zwrotnego. Ale nie chcę zwracać "fałszu", albo otrzymam wyjątek: "Zdalny certyfikat jest nieprawidłowy zgodnie z procedurą sprawdzania oryginalności", co oczywiście nie jest oczekiwane dla https://www.dscoduc.com/, ponieważ jest on dodawany do sklepu Zaufane osoby i jest zatwierdzony przez system Windows, gdy odwołanie zwrotne certyfikatu nie zostało zmienione. Chcę, aby system Windows zastosował domyślną procedurę sprawdzania poprawności dla tej witryny. Nie chcę zaglądać do sklepów Windows Trusted i przechodzić przez wszystkie elementy łańcucha, ponieważ jest już (i miejmy nadzieję poprawnie) zaimplementowany w systemie Windows.
Innymi słowy, muszę wyraźnie zaufać witrynom zatwierdzonym przez użytkownika (które są przechowywane gdzieś w jego ustawieniach) i zadzwonić do domyślnego sprawdzenia certyfikacji dla wszystkich innych.
Domyślna wartość ServicePointManager.ServerCertificateValidationCallback ma wartość null, więc nie ma "domyślnego" połączenia zwrotnego, z którego mógłbym zadzwonić później. Jak powinienem nazwać tę "domyślną" procedurę obsługi certyfikatów?
Dzięki