Vissa saker är inte OK...
När man bygger en certifikatsbaserad inloggningslogik till en applikation bör
man göra detta baserat på att man:
a) Ger klienten en "utmaning" (challenge) som måste signeras (kräver att den
privata nyckeln används)
b) Validera signaturen avseende matematiken, certifikatskedjan och spärrstatus
(certifikatet finns med i signaturen)
c) Helst göra det via MS-CAPI eller PKCS#11
Förvisso kan man i vissa fall vilja använda finesser i Net iDs plugin (t.ex.
som denna site gör i samband med inloggningen men då bara för att upptäcka saker
som att inget kort sitter i osv.) men man får INTE
förledas att tro att bara för att användaren kan PIN-koden till kortet så har
man gjort en påloggning. (Se exempel på
denna sida
utanför sitens påloggningsskydd)
Alltså, att logga på ett kort är INTE samma sak som att logga på en
applikation.
När man "loggar på kortet" med sin PIN-kod så används inte
den privata nyckeln!
Hur hänger det här ihop?
Jo, på vissa kort kan man enkelt lägga till certifikat som:
a) Är utställda till någon annan än en själv
b) Inte korresponderar mot privat nyckel på kortet
(Kom ihåg att certifikaten inte är skyddade på kortet, det är de privata
nycklarna som är skyddade. Certifikaten kan läsas ut utan PIN, de kan hämtas
från en katalog, de kommer med i signerade e-postmeddelanden osv.)
Ta en titt på nedanstående bild. Sju certifikat, men det är bara tre av dem som
korresponderar mot privat nyckel på kortet. Så om jag försöker göra TLS/SSL mot
en webbapplikation och väljer t.ex. "Richard Lindvall" så kommer jag förstås
inte in eftersom jag inte har Richard Lindvalls privata nyckel. Så långt allt gott
tack vare SSL-protokollets inbyggda funktion att ge klienten en "utmaning" som
sedan valideras på serversidan.
MEN, om man bygger en egen inloggningslogik i sin applikation, loggar på kortet med PIN, och sedan
läser ut certifikaten så har man egentligen ingen aning om vilken användare vi
har att göra med. Jag hade kunnat radera mina egna certifikat och bara importera
certifikatet från den jag vill utge mig för att vara. Då har man ett problem...

Med vänliga hälsningar,
