Filtrera vid underskrift

Arbetar du med att skapa lösningar där du behöver skapa underskrifter (i webbmiljö)? Då behöver du säkerställa att användaren inte ställs inför ett val av certifikat. Såhär gör du:

En testsida som denna, utan filter satt, kan ge ett val som detta:

no_filter

Det är klart obra!

Regel 1

För att slippa listning ska man spara på sig information om den som är inloggad och skapa ett filter baserat på denna kunskap. Certifikaten kommer ju allt som oftast i par så om SubjectSerialNumber för inloggningscertifikatet är [X] så kan man vara tämligen säker på att underskriftcertifikatet även det har [X] i SubjectSerialNumber. Kombinerar du detta med att även filtrera på Issuer/Utfärdare så lär ditt filter vara svårt att lura. (Skulle nån vara så ond att man skapar en fiktiv CA med samma namn som en riktig så smäller det ju ändå på serverside vid kontrollen av underskriften)

Ett bra filter skulle således kunna se ut såhär:
‘Issuers’=’cn=SITHS CA v3’
‘Subjects’=’2.5.4.5=SE165565594230-11RS’

Vilket lämnar följande spår i trace:
[2256:6308] 00.00.35.834 Plg – SetProperty ‘Subjects’=’2.5.4.5=SE165565594230-11RS’
[2256:6308] 00.00.35.881 Web – SetProperty ‘Subjects’ … done
[2256:6308] 00.00.35.881 Web – SetProperty ‘Issuers’ …
[2256:6308] 00.00.35.834 Plg – SetProperty ‘Issuers’=’cn=SITHS CA v3’

På så vis slipper jag problemet med specialtecken som kan förekomma i SubjectCommonName. Det hanteras nämligen inte utan vidare av t.ex. Chrome och Firefox.

Regel 2

Vill du, trots det ovan anförda, skapa filter baserat på SubjectCommonName måste du hantera eventuella specialtecken, som t.ex. bokstaven “Ö”.

Alla dessa filter fungerar fungerar i Internet Explorer:
‘Subjects’=’cn=Jonas Öholm’
‘Subjects’=’cn=Jonas*’
‘Subjects’=’cn=cn=J*’

Men i t.ex. Chrome och Firefox fungerar bara:
cn=Jonas*
cn=J*

Då sätter jag istället följande filter:
cn=Jonas %D6holm
Vilket funkar klockrent i Chrome och Firefox (och IE)

å = %E5
ä = %E4
ö = %F6
Å = %C5
Ä = %C4
Ö = %D6