HSAID


 

Om du arbetar med Net iD SDK är det inte osannolikt att du behöver läsa ut SubjectSerialNumber. Där finns nämligen inte sällan ett unikt “användarID”. För e-legitimationer är det personnummer (ÅÅÅÅMMDDXXXY) och för SITHS-certifikat är det HSAID. Då kan du ha nytta av att läsa det nedanstående.

Net iD SDK erbjuder två API:er; Net iD Plugin (helt properitiärt) samt PKCS#11 (standard). Den förstnämnda vägen via plugin kommer subjekt vara en del av det som returneras via EnumProperty(‘Certificate’) eller EnumProperty(‘CertificateEx’), den är konverterad från DER-form till en läsbar sträng. För det andra fallet via pkcs#11 så ingår inte certifikat parsning out-of-the-box, men subjekt finns i DER-form för attributet CKA_SUBJECT för certifikat objektet.

EnumProperty(‘Certificate’) är relativt självförklarande, man ser direkt vad som returneras. Däremot kommer exempelkoden (netid.cpp) innehålla uppläsning av alla certifikat på kortet via pkcs#11, men som påpekas ovan finns inte HSA-ID lätt läsbar. Har man tillgång till någon form av certifikatsparser är detta lätt att hämta ut från subjekt, eftersom exemplet innehåller läsning av hela certifikatvärdet. Har man inte tillgång till parsning, kan man nyttja ett icke standardiserat sätt att hämta ut värdet. Eftersom man med Net iD SDK själv bestämmer vilken konfiguration man använder kan man sätta det “friendlyname” som returneras från pkcs#11 för exempelkoden (blir label):

Default

[Pkcs11]
FriendlyName=%subject.2.5.4.3% (%subject.2.5.4.10%);%subject.2.5.4.3% (%issuer.2.5.4.10%);%subject.2.5.4.3% (%issuer.2.5.4.3%);

Anpassat

[Pkcs11]
FriendlyName=%subject.2.5.4.3% (%subject.2.5.4.5%)

I det anpassade exemplet har en ändring gjorts så att FriendlyName = SubjectSerialNumber, för den delen som hamnar inom paranteser.

Detta är en finess man inte kan förvänta sig av andra PKCS##11 bibliotek vilket skapar ett beroende till Net iD:s PKCS#11-implementation.

Ska man göra “rätt” måste man läsa ut alla certifikat och först filtrera fram certifikat med just den Issuer man är intresserad av, därefter plocka bort alla certifikat med KeyUsage=non-repudiation (40) om det är inloggning man pysslar med. Oftast har man då bara ett certifikat kvar och kan plocka fram SubjectSerialNumber. Får man mer än en träff trots filtret måste ditt program/app presentera ett vettigt formaterat val baserat på valda delar av certifikatsinnehållet, t.ex. SubjectCommonName och SubjectOrganization.

Alltså: Vi rekommenderar alltid PKCS#11, eftersom det är standard, men plugin integration kan ofta bli enklare.