Microsoft on tehnyt .netissään monta asiaa oikein, mutta jotkut tuntuvat edelleen aavistuksen hankalilta. Tähän kirjoitukseen innoitti tilanne, jossa haluat sallia itse allekirjoitetun sertifikaatin käytön omasta koodista avattavassa HTTPS-yhteydessä. Ohessa ratkaisu.
Itse tehdyt sertifikaatit eivät tietenkään pohjaudu perimmiltään mihinkään luotettavan tahon (kuten Verisignin) allekirjoittamaan sertifikaattiin, joten eihän moisiin passaa oletusarvoisesti luottaa: "Could not establish trust relationship with remote server." Toisaalta harvalla meistä on julkisesti luotettavia varmenteita kaikille testipalvelimillemme.
Vastaus on sinänsä helppo; ICertificatePolicy-rajapinnan kautta on vaivatonta määritellä sellainen politiikka, että mikä tahansa sertifikaatti kelpaa. Tämä ei välttämättä ole kovinkaan turvallista, mutta varsinkin testikäytössä funktionaalisuus yleensä ratkaisee. Seuraavalla pääsee vauhtiin:
using System.Net;
using System.Security.Cryptography.X509Certificates;
internal class TotaalinenLuottaja : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint sp,
X509Certificate certificate,
WebRequest request, int problem) {
return true;
}
}
// ... ja toisaalla koodissa, ennen https-hakua ...
ServicePointManager.CertificatePolicy = new TotaalinenLuottaja();
Posted by Jouni Heikniemi at 07.02.04 19:07