Skrivet av Balconette:
Du har rätt i att certifikat handlar om att det ska vara en betrodd aktör bakom, men dagens baseras på att DNS:en pekar till rätt server.
Men, du kan inte ens slå på kryptering utan ett certifikat idag. Och skapar du ett eget självsignerat certifikat så skriker webbläsarna rött när folk vill ansluta till webbplatsen och totalt krossar förtroendet för sidan. Det gör att vissa hellre kör okrypterat.
Garanti kan göras bättre med DNSSEC.
Många missförstånd i detta, så jag försöker reda ut begreppen.
Ett SSL-certifikat utfärdas av en betrodd certifikatutfärdare. De som tillverkar operativsystem och webbläsare väljer utifrån sina egna kriterier vem som får vara med och utfärda certifikat som ska vara betrodde som standard när man installerar deras program. En slutanvändare kan välja att själv lägga in en betrodd utfärdare av certifikat om de så vill.
Beroende på certifikatutfärdare så finns olika kriterier för hur man utfärdar certifikat, vilket gör att man kan välja om man ska lita på en certifikatutfärdare beroende på vilka kriterier de har för att utfärda certifikat. I praktiken så är dock dessa beslut delegerade till de som tillverkar operativsystem och webbläsare.
De enklaste certifikaten på marknaden idag är s.k. "domänvaliderade" certifikat. Allt dessa certifikat gör är att be den som ska ha sitt certifikat att bevisa att de har kontroll över det datorsystem som är knutet till ett visst domännamn. Detta kan ske på olika sätt, t.ex. att systemadministratören behöver lägga upp en viss fil på webbservern, ta emot mail till en specifik mailadress, eller lägga upp en specifik post i DNS.
Dessa certifikat är bara så säkra som själva systemen de skyddar. Om någon lyckas hacka en mailkorg med ett sånt här speciellt namn under domänen, kan hen också lura en certifikatutfärdare att utfärda ett certifikat.
Det finns till och med automatiska tjänster som utfärdar certifikat gratis så länge man kan bevisa att man har kontroll över domänen på detta sätt.
Det går inte heller på ett enkelt sätt se vem som utfärdat ett certifikat och på vilka kriterier. (Javisst man kan klicka fram infon, men ingen gör detta.)
Det gör i sin tur att de certifikatutfärdare som är mer krångliga ur hur de utfärdar certifikat inte har någon edge över de som utfärdar enklare certifikat annat än i väldigt specifika scenarion. Jag som användare ser ingen skillnad, och jag som serveradministratör får inga fördelar med ett mer komplicerat certifikat.
Det man kan räkna med när man ser att en webbsida har ett certfikat är alltså att någon slags process validerat att serverägaren har kontroll över en specifik webadress. Varken mer eller mindre. Det säger inget om att den som driver servern är seriös, och inte ens något om vem det är som står bakom servern, mer än vilket domännamn som är bakom.
Det finns ändå ett värde i detta. Någon som kan kapa din internetanslutning, antingen genom att routa om trafik från en viss part till vissa IP-adresser eller DNS-namn kan inte styra om din trafik till andra webbsidor utan att din webbläsare visar ett meddelande om att certifikatet inte gäller. (Det är så klart teoretiskt möjligt att kapa certifikatutfärdarnas internetanslutning, men de har ju säkerhetsavdelningar som upptäcker och stoppar detta, antar jag?)
Vad DNSSEC gör är något helt annat. DNSSEC innebär att den data som lagras i DNS (internets "telefonkatalog" som mappar namn som www.sweclockers.se till IP-adresser) kryptografiskt signeras och därför inte går att kapa.
Rent teoretiskt kan man lägga kryptonycklar i DNS, som sedan används för att upprätta en säker anslutning, men du kan inte använda en symmetrisk kryptonyckel här, eftersom vem som helst som kommer åt denna kryptonyckel (vilket är vem som helst på Internet, eftersom de bara kan slå upp DNS-namnet) kan låtsas vara servern. Om de alltså styr om trafiken endast på IP-nivå.
Ska du använda DNS för att distribuera kryptonycklar måste du därför använda någon slags assymmetrisk kryptering, som t.ex., varför inte ett certifikat? Rent teoretiskt skulle du kunna i DNS lagra information om vilken certifikatutfärdare som är giltig för en viss domän (det kan t.o.m. vara en certifikatutfärdare du driver själv!), men det är fortfarande certifikatbaserad kryptering. Dessutom kommer man över överskådlig framtid fortsätta ha kompatibilitet med äldre system som inte kan kolla i DNS efter ett giltigt CA. Inte omöjligt att detta sker i framtiden.
Men för nutiden så finns det en enkel lösning: Använd en automatisk certifikatutfärdare som LetsEncrypt, som automatiskt ser till att du har ett giltigt, domänvaliderat certifikat. Det går även att använda för tjänster som ligger på interna nätverk som inte är exponerade för omvärlden om man använder DNS-01 som valideringsmetod. Alternativt använder du ett företags-specifikt CA för interna tjänster och har något sätt att konfigurera företagets datorer att använda lita på denna interna CA.
Ovanstående är grovt förenklat, det finns en massa nyanser, men då skulle detta också bli ett väldigt långt inlägg.