2016-08-19 47 views
1

我正在使用pkcs11庫來做到這一點,但我找不到與我想存儲在我的程序中的universalPrincipalName對應的屬性。如何從智能卡獲取universalPrincipalName對象?

這裏是dumpasn1結果:

SEQUENCE { 
    OBJECT IDENTIFIER subjectAltName (52 565 529 177) 
    OCTET STRING, encapsulates { 
    SEQUENCE { 
     [0] { 
      OBJECT IDENTIFIER 
      universalPrincipalName (1 783 756 578 457 155 473 200 654 565) 
      [0] { 
      UTF8String '[email protected]' 
      } 
      } 

我怎樣才能獲得「[email protected]」到現場存儲在一個變量。

我想我需要使用CK_ATTRIBUTEs但沒有一個似乎對應universalPrincipalName(即「[email protected]」)

CK_ATTRIBUTE getattribute[] = { 
      {CKA_WHICH_ONE_TO_USE, NULL_PTR, 0} 
    }; 

C_GetAttributeValue(hSession, privKeyObject, getattribute, size); 

是C_GetAttributeValue得到這個信息或右功能是否有另一種方法來獲得universalPrincipalName?

回答

1

沒有爲UPN定義的標準PKCS#11屬性。您需要讀取整個證書(證書對象的CKA_VALUE屬性)並自行解析。

+0

我不知道如何解析證書。我怎麼能告訴從相應的對象標識符中讀取UPN?有沒有函數來獲取對象標識符的名稱? – poloDD

+0

隨着\t \t \t \t CK_ATTRIBUTE數據[2] = { \t \t \t \t \t {CKA_LABEL,NULL_PTR,0}, \t \t \t \t \t {CKA_VALUE,NULL_PTR,0}, \t \t \t \t};我從C_GetAttributeValue得到這個:data [1] .pValue =0 0 Ġ8 [ j 0。所以我不能解析它來檢索UPN。我需要解碼pValue的結果嗎? – poloDD