Flitig postare
|
|
Reg.datum: Feb 2007
Inlägg: 382
|
|
Flitig postare
Reg.datum: Feb 2007
Inlägg: 382
|
Det är ganska komplicerat, och jag kan inte alla detaljer själv, men lite förenklat så fungerar det ungefär såhär:
1) Du försöker ansluta till en server vars kommunikation är krypterad med SSL
2) Du laddar hem ett certifikat ifrån servern
3) Certifikatet kan ha en hel kedja med certifikat "över sig", där varje certifikat är signerat av certifikatet strax över sig i kedjan
4) Certifikatet längst upp i kedjan kan mycket väl vara det enda certifikatet, då är det ett så kallat "självsignerat" certifikat
5) Varje certifikat har en hel massa metadata instoppade, t.ex. giltighetstid, vad det får användas för (t.ex. autentisering, signering, kryptering, utfärdande av undercertifikat osv.), vilken/vilka domäner/personer/datorer/annat det är giltigt för, samt om det finns någonstans där man kan kolla upp ifall certifikatet är tillbakadraget (CRL/OCSP, i regel på någon webbserver någonstans i världen.)
6) Du kollar upp mot en lista med betrodda certifikat du redan har på datorn om några certifikat i den här kedjan är betrodda, och för vilka ändamål de är betrodda att användas. Dessutom kontrolleras giltighetstiden. Om certifikatet har information om någon server där man kan kontrollera att certifikatet är giltigt (eller snarare, att det inte förklarats ogiltigt) fortfarande så kontaktas den servern.
7) Om kedjan verkar hålla, dvs. att man hittar ett betrott certifikat med rätt att utfärda undercertifikat, och alla certifikat från där och neråt till det certifikat din server vill använda uppfyller alla villkor för att de ska vara giltiga, och det sista certifikatet får användas för att kryptera den här kommunikationen, så förklaras alltihopa giltigt.
Som ni ser så finns det ganska många steg där det kan bli problem, t.ex:
1) Fel giltighetstid (antingen gammalt certifikat, eller felaktig klocka)
2) Inget certifikat är betrott (På Windows så har Windows en lista som uppdateras ifrån Windows Update, samt man har möjlighet att själv lägga in certifikat, antingen per användare eller för hela datorn. På Linux finns någonting liknande. Java lever i en egen värld, och har dels en systemglobal lista, dels kan man definera helt egna listor för enskilda applikationer.)
3) CRL/OCSP går inte att kontakta (t.ex. ingen internetuppkoppling/brandvägg.) En vanlig lösning är att många stänger av den här funktionen pga prestandaproblem, nackdelen är dock att man tappar en del säkerhet då man tagit bort möjligheten att "döda" certifikat som har kommit på villovägar
4) Certifikatet försöker användas för ett ändamål det inte är utfärdat för (t.ex. autentisering när ska enbart ska användas för kryptering av kommunikation)
5) Certifikatet försöker användas för fel domän
|