helmikuu 07, 2004

.net ja omat sertifikaatit

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
tietotekniikka