14.4.4. CA:n allekirjoittamat (julkisesti luotetut) varmenteet¶
Itse allekirjoitetut varmenteet toimivat, kun hallitset molempia päitä. Jos sen sijaan mielivaltaisten asiakkaiden (selaimet, puhelimet, kolmannen osapuolen ohjelmistot) on yhdistettävä kameraan ilman, että niitä ohjeistetaan luottamaan mukautettuun varmenteeseen, varmenteen on oltava sellaisen julkisen varmenneviranomaisen (CA) allekirjoittama, johon nuo asiakkaat jo luottavat. Kameran TLS-koodi on identtinen itse allekirjoitetun tapauksen kanssa – load_cert_chain varmenteella ja avaimella DER-muodossa – vain tapa, jolla hankit kyseisen varmenteen, muuttuu.
Yksittäinen tärkein seikka: luot yksityisen avaimen itse, eikä se koskaan poistu koneeltasi. CA ei koskaan näe sitä. Mitä lähetät CA:lle, on varmenteen allekirjoituspyyntö (CSR) – pieni tiedosto, joka sisältää julkisen avaimesi ja verkkotunnuksesi – ja mitä saat takaisin, on varmenne (julkinen avaimesi ja nimesi, CA:n allekirjoittamana). Avain ja varmenne ovat kaksi erillistä tiedostoa, jotka tuotetaan kahdessa erillisessä vaiheessa; CA käsittelee vain julkista puoliskoa.
Yleinen kulku, kaikki tehtynä tavallisella koneella (ei koskaan kameralla):
Hanki verkkotunnus. Julkiset CA:t varmentavat hallinnassasi olevan DNS-nimen (esim.
cam.example.com); ne eivät myönnä varmennetta pelkälle IP-osoitteelle tai vain paikalliselle nimelle kutenmycam.Luo avain ja CSR. Yksi OpenSSL-komento tuottaa yksityisen avaimen ja sitä vastaavan CSR:n. Käytä samaa avaintyyppiä kuin käyttäisit itse allekirjoitetulle varmenteelle (katso Käsitteet: luottamus, avaimet ja tiedostomuoto); ECDSA P-256 on suositeltu.
ECDSA P-256 – suositeltu:
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ -nodes -keyout domain.key -out domain.csr \ -subj "/CN=cam.example.com" \ -addext "subjectAltName=DNS:cam.example.com"
ECDSA P-384 – vahvempi, suurempi/hitaampi:
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:secp384r1 \ -nodes -keyout domain.key -out domain.csr \ -subj "/CN=cam.example.com" \ -addext "subjectAltName=DNS:cam.example.com"
RSA-2048 – maksimaalinen yhteensopivuus:
openssl req -new -newkey rsa:2048 \ -nodes -keyout domain.key -out domain.csr \ -subj "/CN=cam.example.com" \ -addext "subjectAltName=DNS:cam.example.com"
Pidä
domain.keysalassa – tämä on avaintiedosto, jonka lopulta laitat kameraan.domain.csron tiedosto, jonka luovutat CA:lle; se ei sisällä salaisuuksia.Lähetä CSR ja todista, että hallitset verkkotunnusta. Tässä kohtaa kaksi yleistä reittiä eroavat toisistaan:
Automatisoitu ACME-CA, kuten Let’s Encrypt, jota ohjaa työkalu kuten
certbottaiacme.sh, tekee vaiheet 2 ja 3 puolestasi: se luo avaimen, rakentaa CSR:n, vastaa haasteeseen automaattisesti (HTTP-01: tarjoa token portin 80 kautta verkkotunnuksessa, tai DNS-01: julkaise TXT-tietue sen DNS:ssä) ja kirjoittaa valmiit tiedostot.Kaupallinen CA (ostettu suoraan tai verkkotunnus-/hosting-jälleenmyyjän kautta): liität
domain.csr-tekstin verkkolomakkeeseen, ja todistat sitten hallinnan vastaamalla vahvistussähköpostiin, julkaisemalla DNS-tietueen tai sijoittamalla tiedoston kyseisen verkkotunnuksen verkkopalvelimelle. Kun vahvistus on tehty, lataat myönnetyt tiedostot.
Kerää myönnetyt tiedostot. Jotta ymmärtäisit, mitä saat, on hyödyllistä tietää, että varmenteet muodostavat luottamusketjun: verkkotunnuksesi varmenteen on allekirjoittanut välitason CA, jonka on puolestaan allekirjoittanut juuri-CA. Jokainen lenkki takaa alapuolellaan olevan. Lopputuloksena saat:
Yksityisen avaimesi (vaiheesta 2). CA:lla ei sitä koskaan ollut; se pysyy koneellasi ja on avain, jonka lopulta laitat kameraan.
Lehtivarmenteen – jota kutsutaan myös loppukäyttäjän tai palvelinvarmenteeksi. Tämä on varmenne juuri sinun verkkotunnuksellesi (
cam.example.com): se sisältää julkisen avaimesi ja nimesi, ja CA:n välivarmenne on allekirjoittanut sen. Tämä on varmenne, jonka kamera esittää tunnistautuakseen.Yhden tai useamman välitason CA-varmenteen (”ketju” tai ”CA-nippu”). CA ei allekirjoita lehtivarmennettasi juurivarmenteellaan suoraan – juuren avain pidetään verkon ulkopuolella ja vahvasti suojattuna – joten se allekirjoittaa välivarmenteella, jonka juurivarmenne puolestaan on allekirjoittanut. Välivarmenne on lenkki, joka yhdistää lehtivarmenteesi juurivarmenteeseen.
Juurivarmenne on luottamusankkuri: itse allekirjoitettu varmenne, joka kuuluu CA:lle ja sijaitsee ketjun huipulla. Sitä ei anneta sinulle etkä koskaan ota sitä käyttöön, koska jokaisella asiakkaalla on se jo – käyttöjärjestelmät, selaimet, puhelimet ja ohjelmointikielten ajoympäristöt toimitetaan sisäänrakennetulla juurivarmenteiden ”luottamusvarastolla”. Asiakas luottaa lehtivarmenteeseesi kulkemalla ketjun läpi: se luottaa jo juurivarmenteeseen, juurivarmenne takaa välivarmenteen ja välivarmenne takaa lehtivarmenteesi. (Tämä on juuri se tehtävä, jonka yksittäinen
server.der/cafilehoitaa itse allekirjoitetussa tapauksessa – siinä sinä olet oma juurivarmenteesi.)Fullchain-tiedosto on yksinkertaisesti lehtivarmenne ja välivarmenne(et) yhdistettynä yhteen tiedostoon, lehtivarmenne ensin, tarkoituksellisesti ilman juurivarmennetta (juurivarmenteen lähettäminen on turhaa – asiakas luottaa vain juurivarmenteisiin, jotka sillä jo on). Tavallinen palvelin esittää koko tämän fullchainin, jotta mikä tahansa asiakas voi kulkea sen läpi. Kamera ei voi: se lataa ja esittää yhden varmenteen – lehtivarmenteen – eikä voi lisäksi lähettää CA:n antamia välivarmenteita.
Tiedostonimet, joita todella näet: ACME-työkalu kuten
certbotkirjoittaaprivkey.pem(avaimesi),cert.pem(pelkkä lehtivarmenne),chain.pem(pelkät välivarmenteet) jafullchain.pem(lehtivarmenne + välivarmenteet). Kaupallinen CA antaa yleensä.crt-tiedoston lehtivarmenteelle ja.ca-bundle-tiedoston välivarmenteille, ja.keyon se, jonka loit itse.Muunna ja kopioi. Muunna yksityinen avain ja lehtivarmenne DER-muotoon ja kopioi ne kameraan täsmälleen kuten Itse allekirjoitetut varmenteet-sivulla. Kamera esittää ne sitten palvelinvarmenteenaan ja tavalliset asiakkaat hyväksyvät yhteyden automaattisesti, koska ne luottavat jo CA:han – mitään asiakaspuolen määritystä ei tarvita.
Vihje
Käytännössä se, että kamera esittää vain lehtivarmenteen (eikä koskaan välivarmenteita), näkyy näin:
Asiakkaat, joilla on CA:n välivarmenne jo välimuistissa – valtavirran selaimilla ja HTTPS-kirjastoilla yleensä on – täydentävät ketjun itse ja yhdistävät ongelmitta.
Asiakkaat, jotka luottavat siihen, että palvelin toimittaa välivarmenteen, epäonnistuvat kättelyssä kameraa vastaan.
Jos jokaisen mahdollisen asiakkaan on onnistuttava, älä päätä julkista TLS:ää suoraan kamerassa. Sijoita kameran eteen yhdyskäytävä / käänteisvälityspalvelin, joka tarjoaa täyden ketjun ulkomaailmalle, ja anna välityspalvelimen tavoittaa kamera yllä kuvatun itse allekirjoitetun kulun kautta.