Oletan nyt, että olet lukenut edellisen postaukseni siitä, miten luoda itse allekirjoitettuja varmenteita kehitystyötä varten, ja se on saattanut jättää sinut ajattelemaan: ”Jee, hienoa! ….Mutta miten oikeastaan käytän niitä?”. Tämä blogikirjoitus vie sinut askel askeleelta läpi manuaalisen prosessin, jossa IIS konfiguroidaan tietokoneellasi tai Windows-palvelimellasi käyttämään itse allekirjoitettuja varmenteita yhdessä IIS:n asiakasvarmentekartoitustodennuksen kanssa.
Huomaa, että käytän esimerkeissäni localhost-hostingia ja satunnaista verkkotunnusta, mutta voit tehdä tämän oikean palvelimesi IIS:llä, jos sinulla on internet-palveluntarjoajaltasi tai verkkotunnuksen isännöintiyhtiöltä saatava staattinen IP-osoite ja jos olet myös konfiguroinut palomuurisi, reitittimesi yms. kunnolla, jolloin voit osoittaa verkkotunnuksen nimen tuohon osoitteen. MUTTA en suosittele kumpaakaan yhdessä itse allekirjoitettujen varmenteiden kanssa, elleivät asiakkaasi/käyttäjäsi ole halukkaita vastaanottamaan ja asentamaan itse allekirjoitettuja pää- ja asiakasvarmenteita. Hyvä esimerkki tästä on suljettu intranet, jossa sinulla on pääsy kaikkiin loppukäyttäjien tietokoneisiin, koska silloin voit asentaa varmenteet heidän koneisiinsa, mikä on välttämätöntä, jos et halua, että käyttäjät saavat ison varoituksen luottamusongelmista itse allekirjoitetun palvelinvarmenteen kanssa. Jos etsit kaupalliseen tuotantoon soveltuvaa ratkaisua, sinun kannattaa ostaa varmenteet itse allekirjoittamisen sijaan. Nyt kun tämä on selvitetty, käytän tietokonetta, jossa on Windows 8.1 Pro, IIS 8.5 ja Visual Studio Premium 2013. (Olen testannut myös Windows Server 2012 R2 Hyper-V VM:llä tietokoneellani).
IIS:n asentaminen
Jos et ole vielä asentanut IIS:ää koneeseen, joka toimii isännöintipalvelimena, tee se painamalla PC:n Windows-painiketta ja etsimällä hakusanalla ”Windows-ominaisuuksien kytkeminen päälle tai pois päältä” (tai menemällä Ohjauspaneeliin ja etsimällä). Tarkista Internet Information Services (Internetin tietopalvelut) ja seuraavat alisolmut.
(Jos käytössäsi on .NET 3.5, sinun on tarkistettava .NET Extensibility 3.5 ja ASP.NET 3.5)
Windows Server 2012:ssa siirry Server Manager Dashboardiin ➜ Napsauta Lisää rooleja ja ominaisuuksia ➜ Valitse roolipohjainen tai ominaisuus-based installation ja siirry seuraavaan ➜ Valitse palvelin ➜ Ota käyttöön palvelinrooli nimeltä Web Server (IIS) ja seuraavat lapsielementit
Varmista myös, että Application Development on valittuna ja seuraavat lapsielementit
Klikkaa OK ja anna Windowsin asentaa.
Esimerkkiprojektimme luominen
Tämän demon vuoksi luomme todella yksinkertaisen minisovelluksen, jota isännöimme paikallisessa IIS:ssä. Mahtavaa, isännöidään tätä sovellusta paikallisen IIS:n avulla.
Huomautus: Emme enää aja sovellusta suoraan Visual Studiosta (F5), joka on asetettu käyttämään IIS Expressiä.
IIS:n konfigurointi
Avaa IIS Manager (Windows-painike + haku). Lisää uusi verkkosivusto ja sovellusallas esimerkkisovelluksellamme. (Klikkaa hiiren kakkospainikkeella Sivustot ➜ Lisää verkkosivusto) Polun on oltava se kansio, jossa verkkosivustosi dokumentit sijaitsevat, joten jos olet julkaissut verkkosivustosi, osoita polku sinne. Käytän tässä hyvin yksinkertaisessa esimerkissä vain suoraa polkua Visual Studiossa olevaan projektiin.
Nyt isännöidään tätä sivustoa paikallisesti määrittelemällä isäntänimi AKA. verkkotunnuksesi.
Koska isännöin vain paikallisesti, minun on lisättävä sivusto paikalliseen hosts-tiedostooni, jotta localhostin IP-osoite voidaan sitoa isäntänimeen. Tämä tapahtuu ajamalla notepad järjestelmänvalvojana ja avaamalla hosts-tiedosto polulla: %systemroot%\System32\drivers\etc
Lisäämällä loppuun seuraavat: 127.0.0.1 yourdomain.com www.yourdomain.com
Nyt aina kun surffaan yourdomain.com:iin ja www.yourdomain.com koneellani, se ratkaisee sivuston äsken lisätyillä sidonnaisuuksillani 127.0.0.1 IP-osoitteeseen (joka on localhostin IP-osoite).
Lisätään www. sidonta sivustoosi myös IIS Managerissa
Surffataan sidonnoissa määrittelemääsi verkkotunnukseen www:llä tai ilman www:tä ja lisätään pääte /api/cats, niin pitäisi löytyä meowing cats. (Jos ei onnistu, kokeile tyhjentää välimuisti)
TÄRKEÄÄ: Tämä tapahtuu AINOASTAAN paikallisella koneella, koska muutimme hosts-tiedostoa niin, että se ohjaa lisäämämme domain-nimen pyynnöt localhostin IP-osoitteeseen. Se on tarkoitettu kehitykseen ja siihen, että voit testata muutoksesi ennen kuin otat ne käyttöön oikealle web hosting-palvelimellesi.
Palvelimen suojaaminen SSL:llä
Jatkossa haluamme suojata kissat lisäämällä SSL-varmenteen palvelimellemme.
IIS-hallinnassasi siirry palvelimellesi (Vasemmalla olevan puun yläreunassa) ➜ Selaa alaspäin ja kaksoisnapsauta Palvelinvarmenteet.
(Jos itse allekirjoitettu varmenne on jo tässä, hyppää eteenpäin sitomisen vaiheisiin)
Meidän on tuotava itse allekirjoitettu palvelinvarmenne voidaksemme ottaa käyttöön https-viestinnän SSL:llä, joten napsauta Tuo… 14 Tuo palvelinvarmenne Tuo palvelinvarmenne
Knapsauta … ja etsi .pfx-tiedoston, täytä salasana (komentojonotiedostosi -po -parametri) ja napsauta OK
Varmenteesi on nyt lisätty
Kaksoisklikkaa äskettäin lisättyä varmentetta tarkistaaksesi, että se on luotettu (Itsesigneeratut varmenteesi lisättiin oikeisiin säilytyspaikkoihin aiemmassa kirjoituksessani, joten vielä kerran: lue se, jos olet nyt eksyksissä ;-))
So far, so good! Nyt voimme lisätä https-sidonnan, samalla tavalla kuin aiemmin, mutta valitsemme https:n portilla 443, verkkotunnuksesi isäntänimeksi ja etsimme itse allekirjoitetun varmenteesi pudotusvalikosta
Rastita Server Name Indication -ruutu, jonka avulla palvelimellamme voi olla useampia varmenteita asennettuna samaan IP-osoitteeseen lähettämällä isäntänimen SSL:n kädenväännön ensimmäisen vaiheen yhteydessä. Toista samat vaiheet lisätäksesi SSL:n osoitteeseen www.yourdomain.com, mutta varmenteella, jossa CN-nimi vastaa verkkotunnuksen nimeä, tai jokerimerkkivarmenteella
Sidonnat ovat nyt valmiit
Tadaa, voit nyt käyttää https://yourdomain.com/api/cats ja https://www.yourdomain.com/api/cats
Huom: Firefox ei käytä Windowsin sertifikaattivarastoa, joten sinun on lisättävä juurivarmentaja manuaalisesti. Mene Firefoxin Asetukset ➜ Asetukset ➜ Lisäasetukset ➜ Näytä varmenteet ➜ Varmentajat ➜ Tuo CARoot.cer-tiedostosi
IIS Client Certificate Mapping Authentication
Olemme nyt käyneet läpi juuri- ja palvelinvarmenteiden käyttötarkoitukset ja mietit varmaan, mitä tehdä myös edellisessä viestissäni luodulle asiakasvarmenteelle. Tämä on tarkoitettu tilanteisiin, joissa meidän on esimerkiksi autentikoitava asiakkaita ilman käyttäjätunnusta ja salasanaa, vaan haluamme palvelimen pyytävän asiakasta näyttämään varmenteensa ja jos se on oikea, asiakas pääsee sisään. Tämä voidaan tehdä Many-To-One- tai One-To-One-kartoituksella, ja näytän, miten molemmat tehdään manuaalisesti IIS Managerissa.
Ensin meidän on asennettava ominaisuus, joten tuodaan uudelleen esiin ”Ota Windowsin ominaisuudet käyttöön tai pois käytöstä” ja asennetaan seuraava
Käskemme palvelimemme vaatia asiakkaalta SSL-varmenteen
Sitten meidän on määritettävä palvelin tietämään, mikä asiakkaan varmenne sen on validoitava, joten mene Configuration Editoriin ja valitse iisClientCertificateMappingAuthentication-osio (voit myös syöttää polun system.webServer/security/authentication/iisClientCertificateMappingAuthentication kenttään Section)
Many-To-One Mappings
Jos haluat mapata useita asiakasvarmenteita yhdelle käyttäjälle, tämä lähestymistapa on se, mitä tarvitset. Voit myös jakaa asiakasvarmenteita tällä tavoin asentamalla asiakasvarmenteen (ja CA-juurivarmenteen, koska kyseessä on itse allekirjoitettava varmenne) muille käyttäjille, millä koneella tahansa, kunhan asiakasvarmenne vastaa kartoituksen sääntökriteerejä. Se olisi hyödyllistä esimerkiksi tilanteessa, jossa halutaan, että kaikki organisaation käyttäjät saavat pääsyn yhden käyttäjäkartoituksen kautta.
Enable the client certificate mapping authentication
Kartoituksen lisäämiseksi napsauta … of the manyToOneMappings
Tässä lisäät käyttäjät, joille haluat myöntää pääsyn.
Täytä kartoituksen ominaisuudet ja toista tämä jokaiselle käyttäjälle, jolle haluat määrittää pääsyn tai epäämisen. Muista, että sinun on asennettava asiakasvarmenne ja CA:n juurivarmenne kaikkien käyttäjien mmc:hen.
TÄRKEÄÄ: Jotta tämä toimisi, sinun on syötettävä kelvollinen käyttäjätunnus ja salasana, ja koska minun tietokoneeni on palvelin, valtakirjatiedot ovat Windows-käyttäjätunnukseni ja -salasanani.
Nyt meidän on luotava joitain sääntöjä tämän mappingin yhteyteen, niin että palvelin voi määritellä, sallitaanko asiakkaan sisäänpääsy vai ei. Se on joten klikkaa rules-ominaisuutta ja … -painiketta
Lisään esimerkkinä yhden säännön, jossa palvelin tarkistaa asiakkaan varmenteen, onko se oikean CA-juuren allekirjoittama. Siirry eteenpäin ja lisää sääntöjä lisää turvallisuutta varten, katso IIS:n Monta-yksi-kartoitusviite, josta löydät lisää dokumentaatiota.
Muista soveltaa muutokset IIS Managerissa, joten sulje sääntö- ja mappings-ikkunat ja napsauta Apply
Avaa uusi incognito-selainikkuna varmistaaksesi, että aloitat puhtaalta pöydältä välimuistien ja evästeiden suhteen, ja syötä url-osoitteeseen /api/cats ja katso, että selain pyytää varmenteen. Valitse ClientCert ja klikkaa ok saadaksesi pääsyn kissoihin.
Jos tämä ei toimi, varmista, että asiakasvarmenne on CurrentUser/Personal-varmenteessa sekä selaimesi varmenteiden varastossa. Jos kyllä, siirry Ohjauspaneeli ➜ Internet-asetukset ➜ Sisältö ja valitse Tyhjennä SSL-tila.
Avaa uusi incognito-ikkuna ja yritä uudelleen, selaimesi pitäisi nyt kysyä sinulta asiakasvarmenteen.
Huomautus: Muista, kuten aiemmin selitin, että Firefoxilla on oma varmenneavaruusvarasto, joten sinun on tuotava asiakasvarmenne ”Omat varmenteet” -osioon voidaksesi käyttää tätä.
Yksilö-kohtaiset vastaavuudet
Kävellään läpi myös yksi-yksilö-kohtaiset vastaavuudet. Tämä lähestymistapa tarkoittaa, että tarvitsemme yksittäisen asiakasvarmenteen jokaista käyttäjäkartoitusta varten. Voit joko poistaa monesta yhteen -kartoituksen käytöstä ja käyttää samaa varmentetta ja käyttäjää tai luoda uusia. Palaa takaisin Configuration Editoriin ja avaa iisClientCertificateMappingAuthentication-osio uudelleen. Napsauta … kohdasta oneToOneMappings.
Voidaksemme lisätä kartoituksen varmenteeseen meidän on vietävä asiakasvarmenteen varmentetiedoston julkinen avain. Voit viedä tämän koneenhallintakonsolista (paina Windows-painiketta ja etsi mmc) Napsauta paikallisen koneen varmenteen henkilökohtaiseen varastoon ja vie haluamasi asiakkaan ssl-varmenne ilman yksityistä avainta base64-muodossa.
Klikkaa hiiren kakkospainikkeella juuri viety varmenne ja avaa se notepadilla. Poista kaikki rivinvaihdot itse sertifikaatista.
Kopioi tämä nyt mappingin certificate property -kenttään ja täytä loput
TÄRKEÄÄ: Jotta tämä toimisi, sinun täytyy syöttää kelvollinen käyttäjätunnus ja salasana, ja koska tietokoneeni on palvelimena, tunnistetietoina käytetään Windows-käyttäjätunnusta ja -salasanaa.
Muista jälleen kerran soveltaa muutokset.
Ja niin, kokeile sitä ja kun sinua pyydetään, valitse äsken yhdistämällesi käyttäjälle yhdistämäsi varmenne.
Toivottavasti löysit tämän postauksen hyödylliseksi ja seuraavassa postauksessani käyn läpi, miten käyttää itse allekirjoitettuja varmenteita yhdessä Windows Azuren kanssa ja miten konfiguroida IIS:ää C#-koodin avulla, käy katsomassa täältä: http://blog.jayway.com/2015/04/21/configure-a-windows-azure-cloud-service-to-use-your-self-signed-certificates-for-iis-client-certificate-mapping-authentication/
Hyvää jatkoa =)