Доверете се на самоподписан сертификат за удостоверяване на сървър (.NET клиент в Windows)

Имам .NET приложение, което се свързва с отдалечен сървър през SSL. В тестова среда отдалеченият сървър използва самоподписан сертификат. По подразбиране SSL връзката е неуспешна. Ако инсталирам сертификата в хранилището на Trusted Root Certification Authorities, връзката е успешна.

Въпреки това, тъй като вече е доверен сертифициращ орган, този сертификат може да се използва за подписване на сертификати за всеки друг сайт и приложенията на моя компютър, като Internet Explorer, ще им се доверят. Искам този сертификат да бъде надежден за удостоверяване на конкретен уеб сайт, но не и като сертифициращ орган. Има ли някакъв начин да го направите?


person Alla    schedule 04.04.2012    source източник


Отговори (1)


Можете да приложите свой собствен механизъм за проверка на сертификати, който позволява допълнително определени самоподписани или персонализирани сертификати.

Разгледайте RemoteCertificateValidationCallback Delegate. В това обратно извикване можете да проверите дали проверката вече е била успешна (sslPolicyErrors == SslPolicyErrors.None), след което не е нужно да правите нищо. В противен случай можете да проверите дадения сертификат, ако е равен на потребителския сертификат, на който искате да се доверите в този контекст. Ако сертификатът съвпада, връща true.

Използването на вашия собствен RemoteCertificateValidationCallback Delegate може да бъде направено ориентирано към връзката (използвайки например този SslStream конструктор).

person Robert    schedule 04.04.2012
comment
По-скоро исках да избегна всякакви хакове за самоподписани сертификати в кода на приложението. - person Alla; 04.04.2012
comment
AFAIK има само тези две опции: Инсталирайте сертификата като доверен корен или му се доверете ръчно чрез код. BTW: Не всеки сертификат може да се използва за издаване на други сертификати по пътя като PKI. - person Robert; 04.04.2012