甘肅省公共資源交易數(shù)字證書(shū)CA互認(rèn)共享標(biāo)準(zhǔn)規(guī)范_第1頁(yè)
甘肅省公共資源交易數(shù)字證書(shū)CA互認(rèn)共享標(biāo)準(zhǔn)規(guī)范_第2頁(yè)
甘肅省公共資源交易數(shù)字證書(shū)CA互認(rèn)共享標(biāo)準(zhǔn)規(guī)范_第3頁(yè)
甘肅省公共資源交易數(shù)字證書(shū)CA互認(rèn)共享標(biāo)準(zhǔn)規(guī)范_第4頁(yè)
甘肅省公共資源交易數(shù)字證書(shū)CA互認(rèn)共享標(biāo)準(zhǔn)規(guī)范_第5頁(yè)
已閱讀5頁(yè),還剩63頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

甘肅省公共資源交易數(shù)字證書(shū)(CA)

互認(rèn)共享標(biāo)準(zhǔn)規(guī)范

目錄

1.數(shù)字證書(shū)介質(zhì)(USBKey)兼容互認(rèn)接口技術(shù)標(biāo)準(zhǔn)錯(cuò)誤!未

定義書(shū)簽。

1.1.簡(jiǎn)介......................錯(cuò)誤!未定義書(shū)簽。

1.2.算法標(biāo)識(shí)..................錯(cuò)誤!未定義書(shū)簽。

1.3.數(shù)據(jù)交換結(jié)構(gòu)..............錯(cuò)誤!未定義書(shū)簽。

1.4.SM2簽名時(shí)計(jì)算Z值的操作流程和相關(guān)擴(kuò)展錯(cuò)誤!

未定義書(shū)簽。

2.數(shù)字證書(shū)兼容互認(rèn)接口技術(shù)標(biāo)準(zhǔn)…?….錯(cuò)誤!未定義書(shū)簽。

2.1.范圍......................錯(cuò)誤!未定義書(shū)簽。

2.2.應(yīng)用集成目標(biāo)..............錯(cuò)誤!未定義書(shū)簽。

2.3.應(yīng)用集成要求..............錯(cuò)誤!未定義書(shū)簽。

2.4.應(yīng)用集成內(nèi)容..............錯(cuò)誤!未定義書(shū)簽。

2.5.數(shù)字證書(shū)兼容互認(rèn)應(yīng)用接口規(guī)范錯(cuò)誤!未定義書(shū)簽。

2.5.1.B/S客戶端接口.......錯(cuò)誤!未定義書(shū)簽。

2.5.2.C/S客戶端接口.......錯(cuò)誤!未定義書(shū)簽。

2.53服務(wù)端接口.........錯(cuò)誤!未定義書(shū)簽。

2.6.交易系統(tǒng)接入CA互聯(lián)互通流程錯(cuò)誤!未定義書(shū)簽。

2.7.CA機(jī)構(gòu)接入CA互聯(lián)互通流程錯(cuò)誤!未定義書(shū)簽。

3.電子簽章兼容互認(rèn)動(dòng)態(tài)鏈接庫(kù)....錯(cuò)誤!未定義書(shū)簽。

3.1.電子簽章驗(yàn)證結(jié)果規(guī)范......錯(cuò)誤!未定義書(shū)簽。

3.2.電子簽章互通標(biāo)準(zhǔn)接口定義.….錯(cuò)誤!未定義書(shū)簽。

3.2.1.讀取標(biāo)準(zhǔn)印章數(shù)據(jù)....錯(cuò)誤!未定義書(shū)簽。

3.2.2.讀取標(biāo)準(zhǔn)印章列表....錯(cuò)誤!未定義書(shū)簽。

3.2.3.讀取具體標(biāo)準(zhǔn)印章數(shù)據(jù)..錯(cuò)誤!未定義書(shū)簽。

3.3.電子印章數(shù)據(jù)格式..........錯(cuò)誤!未定義書(shū)簽。

3.3.1.電子印章數(shù)據(jù).........錯(cuò)誤!未定義書(shū)簽。

3.3.2.印章信息.............錯(cuò)誤!未定義書(shū)簽。

3.3.3.印章頭信息...........錯(cuò)誤!未定義書(shū)簽。

3.3.4.印章屬性信息.........錯(cuò)誤!未定義書(shū)簽。

3.3.5.印章圖片信息.........錯(cuò)誤:未定義書(shū)簽。

3.3.6.印章簽名信息.........錯(cuò)誤!未定義書(shū)簽。

1.數(shù)字證書(shū)介質(zhì)(USBKey)兼容互認(rèn)接口技術(shù)標(biāo)準(zhǔn)

1.1.簡(jiǎn)介

本規(guī)范是為同時(shí)兼容存量舊介質(zhì)和新介質(zhì)而基于CSP規(guī)范

擴(kuò)展,主要針對(duì)USBKey在國(guó)密系列(SM系列)算法上的相

關(guān)接口標(biāo)準(zhǔn)規(guī)范進(jìn)行說(shuō)明,國(guó)際系列(RSA相關(guān))算法上的相

關(guān)標(biāo)準(zhǔn)規(guī)范完全按照國(guó)際CSP及相關(guān)標(biāo)準(zhǔn),本文不再贅述。

1.2.算法標(biāo)識(shí)

(一)SM1算法

標(biāo)識(shí)符值

ALG_SID_SM1IF

CALG_SM1(ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|

ALG_SID_SM1)

(二)SM2算法

標(biāo)識(shí)符值

ALG_TYPE_E(10?9)

CC

ALG_SID_ECC0

_ANY

ALG_SID_ECC1

_SM2

CALG.SM2(ALG_CLASS_ANY|ALG_TYPE_ECC|

ALG_SID_ECC_SM2)

CALG_SM2_SI(ALG_CLASS_SIGNATURE|ALG_TYPE_ECC|

GNATUREALG_SID_ECC_SM2)

CALG_SM2_E(ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_ECC|

XCHANGEALG_SID_ECC_SM2)

CALG_SM2_E(ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_ECC|

NCRYPTALG_SID_ECC_SM2)

(三)SM3算法

標(biāo)識(shí)符值

ALG_SID_SM30x41

CALG_SM3(ALG_CLASS_HASH|ALG_TYPE_ANY|

ALG_SID_SM3)

(四)SM4

標(biāo)識(shí)符值

ALG_SID_SM420

CALG_SM4(ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|

ALG_SID_SM4)

13數(shù)據(jù)交換結(jié)構(gòu)

所有SM2算法相關(guān)數(shù)據(jù)均使用大端序,包括公鑰、簽名值、

密文。

(一)預(yù)定義宏

標(biāo)識(shí)符值

ECC_MAX_MODULUS_BITS256

_LEN

ECC_MAX_XCOORDINATE_256

BITS_LEN

ECC_MAX_YCOORDINATE_256

BITS_LEN

(二)SM2私鑰結(jié)構(gòu)

typedefstructStruct_ECCPRIVATEKEYBLOB

ULONGAlgID;

ULONGBitLen;

BYTE

PrivateKey[ECC_MAX_MODULUS_BITS_LEN/8];

JECCPRIVATEKEYBLOB,*PECCPRIVATEKEYBLOB;

該結(jié)構(gòu)的字段具有如下含義:

AlgID算法標(biāo)識(shí)號(hào)

值為

CALG_SM2_EXCHANGE

CALG_SM2_ENCRYPT

CALG_SM2_SIGNATURE

之一

BitLen模數(shù)的實(shí)際長(zhǎng)度

PrivateKey[]私鑰256位數(shù)據(jù)

(三)SM2公鑰結(jié)構(gòu)

typedefstructStruct_ECCPUBLICKEYBLOB

{

ULONGAlgID;

ULONGBitLen;

BYTE

XCoordinate[ECC_MAX_XCOORDINATE_BITS_L

EN/8];

BYTE

YCoordinate[ECC_MAX_YCOORDINATE_BITS_L

EN/8];

JECCPUBLICKEYBLOB,*PECCPUBLICKEYBLOB;

該結(jié)構(gòu)的字段具有如下含義:

AlgID算法標(biāo)識(shí)號(hào)

值為

CALG_SM2_EXCHANGE

CALG_SM2_ENCRYPT

CALG_SM2_SIGNATURE

之一

BitLen模數(shù)的實(shí)際長(zhǎng)度

XCoordinate[]公鑰曲線X坐標(biāo)

YCoordinate[]公鑰曲線Y坐標(biāo)

(四)SM2簽名傳出傳入結(jié)構(gòu)

typedefstructStruct_ECCSIGNATUREBLOB

{

BYTEr[ECC_MAX_XC00RDINATE_BITS_LEN/8];

BYTEs[ECC_MAX_YCOORDINATE_BITS_LEN/8];

}ECCSIGNATUREBLOB,*PECCSIGNATUREBLOB;

該結(jié)構(gòu)的字段具有如下含義:

r[]簽名值第一部分,參見(jiàn)SM2簽名算法

規(guī)范

s[]簽名值第二部分,參見(jiàn)SM2簽名算法

規(guī)范

(五)SM2密文傳出傳入結(jié)構(gòu)

typedefstructStruct_ECCCIPHERBLOB

BYTE

XCoordinate[ECC_MAX_XCOORDINATE_BITS_L

EN/8];

BYTE

YCoordinate[ECC_MAX_XCOORDINATE_BITS_L

EN/8];

BYTEHASH[32];

BYTECipher[l];

}ECCCIPHERBLOB,*PECCCIPHERBLOB;

該結(jié)構(gòu)的字段具有如下含義:

XCoordinate加密曲線X坐標(biāo),參見(jiàn)SM2加密算法

規(guī)范

^Coordinate加密曲線Y坐標(biāo),參見(jiàn)SM2加密算法

規(guī)范

HASH口SM3(X坐標(biāo)|原文|Y坐標(biāo)),參見(jiàn)SM2

加密算法規(guī)范

Cipher[]密文數(shù)據(jù),參見(jiàn)SM2加密算法規(guī)范

(六)SM2私鑰導(dǎo)出導(dǎo)入結(jié)構(gòu)

struct_ERHeader

BLOBHEADERblobheader;

ECCPUBLICKEYBLOBsm2PubKey;

ECCPRIVATEKEYBLOBsm2PriKey;

);

該結(jié)構(gòu)的字段具有如下含義:

blobheaderPRIVATEKEYBLOB該結(jié)構(gòu)的

aiKeyAlg的值為CALG.SM2

sm2PubKey該結(jié)構(gòu)的AligID的值:

如果是簽名密鑰對(duì)則為

CALG_SM2_SIGNATURE

如果密鑰交換的則為

CALG_SM2_EXCHANGE

sm2PriKey該結(jié)構(gòu)的AligID的值:

如果是簽名密鑰對(duì)則為

CALG_SM2_SIGNATURE

如果密鑰交換的則為

CALG_SM2_EXCHANGE

(七)SM2公鑰導(dǎo)出導(dǎo)入結(jié)構(gòu)

struct_PHeader

(

BLOBHEADERblobheader;

ECCPUBLICKEYBLOBsm2PubKey;

);

該結(jié)構(gòu)的字段具有如下含義:

blobheaderPUBLICKEYBLOB該結(jié)構(gòu)aiKeyAlg

的值為CALG_SM2

sm2PubKey該結(jié)構(gòu)的AligID的值:

如果是簽名密鑰對(duì)則為

CALG_SM2_SIGNATURE

如果密鑰交換的則為

CALG_SM2_EXCHANGE

(A)密文導(dǎo)入SM私鑰方法:

首先,導(dǎo)入用非對(duì)稱(chēng)密鑰(通常是簽名密鑰對(duì))加密的對(duì)

稱(chēng)密鑰,采用SIMPLEBLOB

BLOBHEADERblobheader;〃參考下邊的BLOGHEADER

ALGIDalg;〃如果該對(duì)稱(chēng)密鑰是被SM2公鑰

加密,則此處的alg為CALG_SM2_EXCHANGE,如果是被RSA

公鑰加密,則alg為CALG_RSA_KEYX;

BYTEencryptedKey[];〃如果該對(duì)稱(chēng)密鑰是被SM2公鑰

加密,則參考本文SM2密文結(jié)構(gòu);如果是被RSA公鑰加密,

則為微軟RSA密文結(jié)構(gòu)

ion=CUR_BLOB_VERSION;

=SIMPLEBLOB;

ved=0;

Alg=algid;//對(duì)稱(chēng)密鑰的算法SM1標(biāo)識(shí)為

CALG.SM1,SM4標(biāo)識(shí)為CALG_SM4其他采用微軟默認(rèn)標(biāo)識(shí)

然后用上一步導(dǎo)入的對(duì)稱(chēng)密鑰,導(dǎo)入密文的SM2密鑰,采

用PRIVATEKEYBLOB

如果導(dǎo)入的是SM2密鑰對(duì),參考定義的(六)中SM2密

鑰導(dǎo)入結(jié)構(gòu),具體如下:

typedefstruct_ERHeader〃用于導(dǎo)出導(dǎo)入SM2的私鑰

BLOBHEADERblobheader;//PRIVATEKEYBLOB

ECCPUBLICKEYBLOBsm2PubKey;

ECCPRIVATEKEYBLOBsm2PriKey;

}ECCPRIKEYHEADER,*PECCPRIKEYHEADER;

其中:

(0)blobheader

=PRIVATEKEYBLOB;

ion=CUR_BLOB_VERSION;

ved=0;

Alg=CALG_SM2_EXCHANGE;

//CALG_SM2_EXCHANGE為加密密鑰對(duì);

CALG_SM2_SIGNATURE為簽名密鑰對(duì)(很少用)

(1)ECCPRIVATEKEYBLOB

typedefstructStruct_ECCPRIVATEKEYBLOB

{

ULONGAlgID;〃算法標(biāo)識(shí)號(hào)

CALG_SM2_EXCHANGE/CALG_SM2_SIGNATURE

ULONGBitLen;〃模數(shù)的實(shí)際位長(zhǎng)度

BYTE

PrivateKeyLECC_MAX_MODULUS_BlTS_LEN/8J;〃該結(jié)

構(gòu)的私鑰部分為被對(duì)稱(chēng)密鑰加密的32字節(jié)密文

}ECCPRIVATEKEYBLOB,

*PECCPRIVATEKEYBLOB;

(2)ECCPUBLICKEYBLOB

typedefstructStruct_ECCPUBLICKEYBLOB

{

ULONGAlgID;〃算法標(biāo)識(shí)號(hào)

CALG_SM2_EXCHANGE/CALG_SM2_SIGNATURE

ULONGBitLen;〃模數(shù)的實(shí)際位長(zhǎng)度

BYTE

XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];//

曲線上點(diǎn)的X坐標(biāo)

BYTE

YCoordinate[ECC_MAX_YCOORDINATE_BITS_LEN/8];//

曲線上點(diǎn)的Y坐標(biāo)

}ECCPUBLICKEYBLOB,*PECCPUBLICKEYBLOB;

1.4.SM2簽名時(shí)計(jì)算Z值的操作流程和相關(guān)擴(kuò)展

CSP在進(jìn)行SM2簽名時(shí),如果未設(shè)置與Z值計(jì)算有關(guān)的

UserID和公鑰時(shí),簽名不計(jì)算Z值。

以下部分可選擇實(shí)現(xiàn)。

1.通過(guò)CryptSetHashParam方法實(shí)現(xiàn)三個(gè)擴(kuò)展

1)使用HP_USERID0x101設(shè)置UserID。

例:

CryptSetHashParam(hHash,HP_USERID,

(PBYTE)pbUserlD,0);

//pbUserlD為16字節(jié)長(zhǎng)的UserID

2)使用HP_SM2_PUBLICKEY0x102設(shè)置公鑰,通過(guò)傳

入ECCPUBLICKEYBLOB結(jié)構(gòu)實(shí)現(xiàn)。

例:

CryptSetHashParam(hHash,HP_SM2_PUBLICKEY_H,(PB

YTE)&EccPubLickeyBlob,0);

//EccPubLickeyBlob為ECCPUBLICKEYBLOB結(jié)構(gòu)

3)使用HP_SM2_PUBLICKEY_H0x104設(shè)置公鑰,通過(guò)

傳入HCRYPTKEY句柄的實(shí)現(xiàn)。

例:

CryptSetHashParam(hHash,HP_SM2_PUBLICKEY_H,(PB

YTE)&hKey,0);

//hKey為HCRYPTKEY句柄

2.通過(guò)句柄設(shè)置公鑰時(shí),句柄可以是其他容器中的密鑰,

且不管是簽名密鑰或加密密鑰,都可用于計(jì)算。

3.如果既通過(guò)結(jié)構(gòu)設(shè)置了公鑰,又通過(guò)句柄設(shè)置了公鑰,

則使用句柄設(shè)置的公鑰進(jìn)行計(jì)算。

4.如果未通過(guò)HP_SM2_PUBLICKEY或HP_SM2_PUB

LICKEY.H設(shè)置公鑰,不計(jì)算Z值。

5.如果這樣調(diào)用CryptSetHashParam(hHash,HP_SM2_PU

BLICKEY,NULL,0),則視為沒(méi)有設(shè)置。如果先前設(shè)置過(guò),則

取消設(shè)置。

6.如果這樣調(diào)用CryptSe田ashParam(hHash,HP_SM2_PU

BLICKEY_H,NULL,0),則視為沒(méi)有設(shè)置。如果先前設(shè)置過(guò),

則取消設(shè)置。

7.在已設(shè)置公鑰但未設(shè)置UserID的情況下,使用默認(rèn)Us

erlD“5678”計(jì)算。在設(shè)置了UserID的情況下,使用設(shè)置的Us

erlD計(jì)算Z值。

8.設(shè)置UserID時(shí)傳入NULL,應(yīng)報(bào)錯(cuò)。

2.數(shù)字證書(shū)兼容互認(rèn)接口技術(shù)標(biāo)準(zhǔn)

2.1.范圍

本規(guī)范參照國(guó)家密碼管理局“公鑰密碼基礎(chǔ)設(shè)施應(yīng)用技術(shù)體

系''系列技術(shù)規(guī)范,結(jié)合系統(tǒng)業(yè)務(wù)特點(diǎn),提出系統(tǒng)數(shù)字證書(shū)應(yīng)

用集成目標(biāo)、集成要求、集成內(nèi)容,定義統(tǒng)一的證書(shū)應(yīng)用接口,

并提供證書(shū)應(yīng)用接口的典型部署示例、登錄認(rèn)證流程示例和簽

名驗(yàn)證流程示例等。

2.2.應(yīng)用集成目標(biāo)

1)遵循本規(guī)范要求新建或者修改的信息系統(tǒng),使用不同

CA機(jī)構(gòu)頒發(fā)的數(shù)字證書(shū),實(shí)現(xiàn)數(shù)字證書(shū)的互通互認(rèn),并確保系

統(tǒng)訪問(wèn)控制的高安全性和高可靠性;

2)對(duì)信息系統(tǒng)的重要操作環(huán)節(jié)和重要數(shù)據(jù)實(shí)現(xiàn)基于多CA

數(shù)字證書(shū)的數(shù)字簽名功能,保護(hù)數(shù)據(jù)的完整性,并為后期糾紛

處理及責(zé)任認(rèn)定提供合法電子證據(jù);

3)對(duì)信息系統(tǒng)的敏感信息實(shí)現(xiàn)支持多CA的數(shù)字證書(shū)的數(shù)

據(jù)加密功能,確保敏感信息在傳輸和存儲(chǔ)階段的安全性及多CA

支持。

2.3.應(yīng)用集成要求

在證書(shū)應(yīng)用集成時(shí),應(yīng)根據(jù)應(yīng)用系統(tǒng)本身的業(yè)務(wù)特點(diǎn)和業(yè)

務(wù)需求,確定需要使用數(shù)字證書(shū)認(rèn)證的用戶及范圍、確定需要

加密、簽名的重要操作環(huán)節(jié)和數(shù)據(jù),具體集成要求如下:

1)對(duì)于具有操作行為責(zé)任認(rèn)定、證據(jù)保存需求的應(yīng)用系

統(tǒng),應(yīng)集成基于數(shù)字證書(shū)的數(shù)字簽名的功能;

2)對(duì)于具有數(shù)據(jù)加密和解密需求的信息系統(tǒng),應(yīng)集成基于

數(shù)字證書(shū)的信息加密、信息解密功能;

2.4.應(yīng)用集成內(nèi)容

應(yīng)用系統(tǒng)數(shù)字證書(shū)應(yīng)用集成內(nèi)容如下:

1)數(shù)字簽名和驗(yàn)證

信息系統(tǒng)中關(guān)鍵業(yè)務(wù)數(shù)據(jù)和操作的數(shù)字簽名,應(yīng)滿足《電

子簽名法》以及其他相關(guān)政策法規(guī)規(guī)定的書(shū)面形式、原件形式

及文件保存等要求,至少應(yīng)包括數(shù)據(jù)原文、電子簽名、可信時(shí)

間等內(nèi)容,并可在需要時(shí)查詢、閱讀、下載、驗(yàn)證,具備作為

電子證據(jù)的真實(shí)性、可靠性和可驗(yàn)證性。

2)數(shù)據(jù)加密和解密

數(shù)據(jù)加密時(shí)應(yīng)采用對(duì)稱(chēng)算法和非對(duì)稱(chēng)算法相結(jié)合的方式,

既保障加密機(jī)制的安全性、密鑰分發(fā)的方便性,同時(shí)又提高了

加解密操作的效率。根據(jù)業(yè)務(wù)需求,可使用單個(gè)數(shù)字證書(shū)加密,

也可使用多個(gè)數(shù)字證書(shū)對(duì)數(shù)據(jù)共同加密,形成密文數(shù)據(jù)。

密文數(shù)據(jù)應(yīng)安全存儲(chǔ)在數(shù)據(jù)庫(kù)或磁盤(pán)上,待解密時(shí)間達(dá)到

后方可解密。數(shù)據(jù)解密時(shí),須使用數(shù)字證書(shū)對(duì)應(yīng)的密碼設(shè)備或

證書(shū)介質(zhì)解密。如果證書(shū)介質(zhì)損壞或丟失,電子認(rèn)證服務(wù)機(jī)構(gòu)

應(yīng)在安全可控的前提下,為用戶及時(shí)提供密鑰恢復(fù)服務(wù)。

25數(shù)字證書(shū)兼容互認(rèn)應(yīng)用接口規(guī)范

數(shù)字證書(shū)兼容互認(rèn)應(yīng)用接口規(guī)范是應(yīng)用系統(tǒng)可直接調(diào)用的

應(yīng)用接口,分為B/S客戶端接口、C/S客戶端接口和服務(wù)端接口。

2.5.1.B/S客戶端接口

B/S客戶端接口是B/S客戶端應(yīng)用程序直接調(diào)用的接口,支

持主流操作系統(tǒng),支持IE、Chrome>Firefox等主流瀏覽器。支

持使用符合《數(shù)字證書(shū)介質(zhì)(USBKey)兼容互認(rèn)接口接口技術(shù)

標(biāo)準(zhǔn)》的數(shù)字證書(shū)介質(zhì)。支持符合國(guó)際RSA算法和國(guó)家密碼管

理局制定的SM2算法的數(shù)字證書(shū)。

2.5.1.L功能介紹

CertKitWinClient是一套用于Windows平臺(tái)下B/S客戶端的

證書(shū)應(yīng)用套件。由一組JS接口和客戶端組件組成。

CertKit支持的功能和特性如下:

1.證書(shū)應(yīng)用。如:基于證書(shū)的加密解密、簽名驗(yàn)簽。

2.JS接口和客戶端組件支持多種瀏覽器,如:IE32/64位、

Chrome、Firefoxo

3.CertKit提供的功能均支持RSA和SM2證書(shū)。

CertKitWinClient提供了以下JS對(duì)象:

l.TCAo用于對(duì)CertKitWinClient提供配置,并提供了多個(gè)

常量值。

2.CertStoreo提供列舉證書(shū)的多種證書(shū)管理功能。

3.Certificateo證書(shū)對(duì)象,可用于獲取證書(shū)信息和部分證書(shū)操

作。

4.CertSeto證書(shū)集合,由一組證書(shū)對(duì)象組成的證書(shū)集合,包

含多個(gè)過(guò)濾方法,并提供了部分證書(shū)操作。

5.PKCS7o用于操作PKI體系中的PKCS7結(jié)構(gòu),同時(shí)作為

部分接口的返回值。

2.5.L2.接口說(shuō)明

2.5J.2.1.TCA

2.5.L2.1.L概述

TCA對(duì)象用于配置CertKitWinClient,并提供了多個(gè)PKI相

關(guān)常量值。

2.5.1.2.L2,構(gòu)造方法

無(wú)

2.5.1.2.L3.成員方法

無(wú)

.1.4.常量

TCA提供多個(gè)常量值,可作為一些接口的參數(shù)使用。

用于表示算法的常量

1

2

4

3

1024

2048

用于表示密鑰用法的常量

alSignature

pudiation

cipherment

ncipherment

reement

rtSign

gn

herOnly

herOnly

ntCommitment

用于表示擴(kuò)展密鑰用法的常量

rAuth

tAuth

igning

Protection

EndSystem

Tunnel

User

tamping

igning

ertAAServerAuth

esponder

erPPP

erLAN

erver

lient

IKE

pAC

pWTP

cardlogon

.1.5.靜態(tài)方法

.1.5.1.TopESAConfigO

描述

此方法用于配置CertKitWinCliento

這個(gè)方法必須在調(diào)用其他對(duì)象和方法之前調(diào)用。

參數(shù)

無(wú)

返回值

true/false

.2.CertStore

.2.1.概述

CertStore提供了列舉證書(shū)的功能。

.2.2.構(gòu)造方法:

無(wú)

2.5?1?2?2.3.靜態(tài)方法:

.2.3.1.listAHCerts()

描述

用于列舉當(dāng)前系統(tǒng)中“個(gè)人”存儲(chǔ)區(qū)下的所有證書(shū)。

CertStore不會(huì)主動(dòng)從“個(gè)人”存儲(chǔ)區(qū)以外讀取證書(shū)。

對(duì)于UKey或其他密碼設(shè)備中的證書(shū),需要由廠商將

證書(shū)注冊(cè)到“個(gè)人”存儲(chǔ)區(qū)下。

參數(shù)

無(wú)。

返回值

CertSet類(lèi)型。

.2.3.2.byName(name)

描述

獲取指定名字的CertStore對(duì)象

參數(shù)

nameString類(lèi)型

返回值

CertStore類(lèi)型。

2?5?1.2?2?3.3.byCertificate(cert)

描述

獲取指定證書(shū)所在的CertStore對(duì)象

參數(shù)

certCertificate類(lèi)型

返回值

CertStore類(lèi)型

.2.4.成員方法:

.2A.1.listCerts()

描述

獲取當(dāng)前CertStore下的證書(shū)

參數(shù)

無(wú)

返回值

CertSet對(duì)象

.3.CertSet

2.5.L2.3.1.概述

CertSet用于儲(chǔ)存一組Certificate對(duì)象,并提供了數(shù)個(gè)過(guò)濾

方法。

2.5.1.23.2.構(gòu)造方法

.3.2.1.CertSet(pkcs7)

描述

讀取PKCS7中的證書(shū),并用其中的證書(shū)構(gòu)造CertSet

對(duì)象。

參數(shù)

pkcs7Base64編碼的PKCS7

2.5.1?2?3?2.2.CertSet(b64Certs)

描述

使用一個(gè)字符串?dāng)?shù)組構(gòu)造CertSet對(duì)象。

參數(shù)

b64Certs字符串?dāng)?shù)組,每一項(xiàng)都是Base64編碼后的證

書(shū)數(shù)據(jù)。

2.5?L.CertSet(certs)

描述

使用一個(gè)Certificate對(duì)象數(shù)組構(gòu)造CertSet對(duì)象。

參數(shù)

certs證書(shū)對(duì)象數(shù)組

.3.3.靜態(tài)方法

無(wú)

3.4.成員方法

2?5?L2?3.4.Lsize()

描述

獲取當(dāng)前CertSet對(duì)象中的證書(shū)數(shù)量。

參數(shù)

無(wú)

返回值

當(dāng)前CertSet對(duì)象中的證書(shū)數(shù)量。

3.4.2.get(idx)

描述

使用索引獲取證書(shū)

參數(shù)

idx指定索引

返回值

Certificate類(lèi)型

2?5?1?2?3?4?3?encryptMessage(origin)

描述

使用當(dāng)前CertSet對(duì)象中的證書(shū)進(jìn)行加密

參數(shù)

origin字符串類(lèi)型。原文。

返回值

字符串類(lèi)型。加密后的密文。

3.4.4.forSign()

描述

過(guò)濾含有簽名用法的證書(shū)集合

參數(shù)

無(wú)

返回值

CertSet類(lèi)型。其中的證書(shū)是當(dāng)前CertSet中含有簽名用

法的所有證書(shū)。

.3?4.5.forEncrypt()

描述

過(guò)濾含有加密用法的證書(shū)集合。

參數(shù)

無(wú)

返回值

CertSet類(lèi)型。其中的證書(shū)是當(dāng)前CertSet中含有加密用

法的所有證書(shū)。

2.5?L.byKeyUsage(intKeyUsage)

描述

過(guò)濾含有指定密鑰用法的證書(shū)集合

參數(shù)

intKeyUsageint類(lèi)型,用于指定密鑰用法。

取值可使用TCA中的密鑰用法常量組合得

出。

請(qǐng)參見(jiàn)TCA中的密鑰用法常量

返回值

CertSet類(lèi)型。其中的證書(shū)是當(dāng)前CertSet中含有指定密

鑰用法的所有證書(shū)。

.3.4.7.byKeyUsage(strarrKeyUsage)

描述

過(guò)濾含有指定密鑰用法的證書(shū)集合

參數(shù)

strarrKeyUsage字符串?dāng)?shù)組,用于指定密鑰用法。

返回值

CertSet類(lèi)型。其中的證書(shū)是當(dāng)前CertSet中含有指定密

鑰用法的所有證書(shū)。

3.4.8.byValidity()

描述

過(guò)濾在當(dāng)天有效的證書(shū)。

日期取自客戶端。

參數(shù)

無(wú)

返回值

CertSet類(lèi)型。其中的證書(shū)是當(dāng)前CertSet中在當(dāng)天有效

的所有證書(shū)。

2?5?L2?3.4.9.byValidity(date)

描述

過(guò)濾在制定日期有效的證書(shū)。

日期由調(diào)用者傳入。

參數(shù)

datajs中的Date對(duì)象

返回值

CertSet類(lèi)型。其中的證書(shū)是當(dāng)前CertSet中在指定日期

有效的所有證書(shū)。

.3.4.10.bylssuer(issuer)

描述

使用指定關(guān)鍵字,通過(guò)頒發(fā)者過(guò)濾證書(shū)。

參數(shù)

issuer字符串類(lèi)型。

返回值

CertSet類(lèi)型。其中的證書(shū)是當(dāng)前CertSet中使用指定關(guān)

鍵字過(guò)濾后的所有證書(shū)。

.3.4.11.bySubject(subject)

描述

使用指定關(guān)鍵字。通過(guò)主題過(guò)濾證書(shū)。

參數(shù)

subject字符串類(lèi)型

返回值

CertSet類(lèi)型。其中的證書(shū)是當(dāng)前CertSet中使用指定關(guān)

鍵字過(guò)濾后的所有證書(shū)。

.3.4.12.bySerialnumber(serial)

描述

使用指定關(guān)鍵字。通過(guò)序列號(hào)過(guò)濾證書(shū)。

請(qǐng)注意,此接口為精確匹配。

參數(shù)

serial字符串類(lèi)型

返回值

CertSet類(lèi)型。其中的證書(shū)是當(dāng)前CertSet中使用序列號(hào)

過(guò)濾后的證書(shū)。

2?5?L2.4.Certificate

2?5?L2?4.1.概述

Certificate用于表示一張證書(shū),提供了多個(gè)方法用于獲取

證書(shū)信息,并提供了一些證書(shū)應(yīng)用的接口。

.4.2.構(gòu)造方法:

.4.2.1.Certificate(b64str)

描述

使用Base64證書(shū)數(shù)據(jù)構(gòu)造Certificate對(duì)象

參數(shù)

b64str字符串類(lèi)型。Base64編碼后的證書(shū)數(shù)據(jù)

靜態(tài)方法

無(wú)

.4.3.用于獲取證書(shū)信息的成員方法

Certificate提供了多個(gè)用于獲取證書(shū)信息接口,這些接口均

無(wú)參數(shù)。

這些接口如下:

serialNumber()

issuer()

subject()

notBefore()

notAfter()

keyUsage()

extededKeyUsage()

crlUrl()

.4.4.用于證書(shū)應(yīng)用的成員方法

.4.4.1.signMessage(plaintext)

描述

使用證書(shū)對(duì)消息進(jìn)行簽名。

需要注意的是,簽名實(shí)際使用的是證書(shū)所對(duì)應(yīng)的私鑰。

如果你僅持有證書(shū)而沒(méi)有私鑰,此方法會(huì)報(bào)錯(cuò)。

簽名結(jié)果為P7,包含原文。

參數(shù)

plaintext字符串類(lèi)型。原文。

返回值

String類(lèi)型,Base64編碼后的P7數(shù)據(jù),包含原文。

.4.4.2.signLogondata(plaintext)

描述

使用證書(shū)對(duì)消息進(jìn)行登錄的簽名,簽名時(shí)會(huì)在消息原

文前追加LOGONDATA:字符,驗(yàn)簽時(shí)需要注意同步追加。

需要注意的是,簽名實(shí)際使用的是證書(shū)所對(duì)應(yīng)的私鑰。

如果你僅持有證書(shū)而沒(méi)有私鑰,此方法會(huì)報(bào)錯(cuò)。

簽名結(jié)果為P7,包含原文。

參數(shù)

plaintext字符串類(lèi)型。原文。

返回值

String類(lèi)型,Base64編碼后的P7數(shù)據(jù),包含原文。

2.5?L.signMessage(plaintext,b)

描述

使用證書(shū)對(duì)消息進(jìn)行簽名。

需要注意的是,簽名實(shí)際使用的是證書(shū)所對(duì)應(yīng)的私鑰。

如果你僅持有證書(shū)而沒(méi)有私鑰,此方法會(huì)報(bào)錯(cuò)。

簽名結(jié)果為P7,由調(diào)用者決定是否原文。

參數(shù)

plaintext字符串類(lèi)型。原文。

bbool類(lèi)型。true時(shí),會(huì)輸出包含原文的P7簽名。

false時(shí),會(huì)輸出不包含原文的P7簽名。

返回值

String類(lèi)型,Base64編碼后的P7數(shù)據(jù)。

2.5.1?2.4?4.4.encryptMessage(origin)

描述

使用證書(shū)對(duì)消息進(jìn)行加密。

參數(shù)

origin

返回值

String類(lèi)型,Base64編碼后的P7數(shù)據(jù)

2?5?1?2.4?4.5.toBase64()

描述

導(dǎo)出證書(shū)的Base64字符串

參數(shù)

無(wú)

返回值

證書(shū)的Base64字符串

.5.PKCS7

.5.1.概述

PKCS7用于操作PKI體系中的PKCS7數(shù)據(jù)結(jié)構(gòu)。

2.5A.2.5.2.構(gòu)造方法

.5.2.1.PKCS7(cms)

描述

使用Base64編碼后的P7數(shù)據(jù)構(gòu)造PKCS7對(duì)象

參數(shù)

cms字符串類(lèi)型。Base64編碼后的數(shù)據(jù)結(jié)構(gòu)。

2?5?.靜態(tài)方法

無(wú)

.5.4.成員方法

2?5?1?2?5?4.LcontentMessage()

描述

獲取P7簽名中的原文信息。

請(qǐng)注意,如果當(dāng)前的PKCS7對(duì)象不是簽名P7,此方法

會(huì)報(bào)錯(cuò)。

參數(shù)

無(wú)

返回值

字符串類(lèi)型,P7簽名中的原文數(shù)據(jù)。

.5.4.2.verify()

描述

驗(yàn)證P7簽名。

請(qǐng)注意,如果當(dāng)前的PKCS7對(duì)象不是簽名P7或P7中

不包含原文,此方法會(huì)報(bào)錯(cuò)。

參數(shù)

無(wú)

返回值

如果驗(yàn)證通過(guò),則返回Certificate對(duì)象。

.5.43.toBase64()

描述

返回base64編碼的p7

參數(shù)

無(wú)

返回值

base64編碼的p7

.5.4.4.verify(plaintext)

描述

驗(yàn)證P7簽名。原文信息由調(diào)用者指定

請(qǐng)注意,如果當(dāng)前的PKCS7對(duì)象不是簽名P7,此方法

會(huì)報(bào)錯(cuò)。

參數(shù)

plaintext字符串類(lèi)型。原文。

返回值

如果驗(yàn)證通過(guò),則返回Certificate對(duì)象

2?5?1?2.5?4.5.decryptMessage()

描述

解密數(shù)據(jù)。

請(qǐng)注意,如果當(dāng)前的PKCS7對(duì)象不是加密P7,此方法

會(huì)報(bào)錯(cuò)。

參數(shù)

無(wú)

返回值

String類(lèi)型。解密后的原文

2.5.2.C/S客戶端接口

2.5.2.1.功能介紹

iTrusPTA是應(yīng)用于Windows平臺(tái)下C/S客戶端的的證書(shū)應(yīng)

用套件,采用com技術(shù),產(chǎn)品形態(tài)為dll動(dòng)態(tài)庫(kù)。

iTrusPTA依托于微軟CSP密碼體系規(guī)范,基于微軟

CryptoAPI開(kāi)發(fā)和擴(kuò)展,同時(shí)支持符合國(guó)際RSA算法體系和國(guó)

家密碼管理局制定的SM2算法體系的數(shù)字證書(shū)。

iTrusPTA組■件層次結(jié)構(gòu)圖如下:

iTni^PTA

IVfirrnQnftCrvntnAPT

MicrcscftThirdSoft|INRKev

圖2.1

iTrusPTA基于CSP密碼體系規(guī)范,借助MicrosoftCryptoAPI

實(shí)現(xiàn),通過(guò)不同加密服務(wù)提供者,對(duì)各種證書(shū)軟硬件需求提供

靈活地支持。

2.5?22數(shù)據(jù)結(jié)構(gòu)說(shuō)明

2.5.22L密鑰用法類(lèi)型

說(shuō)明:用于證書(shū)擴(kuò)展項(xiàng)〈密鑰用法〉的表述。

類(lèi)型:枚舉

定義:

typedefenum_MIDLMIDL_itfLPTA_0000_0001

{KEY_USAGE_CRL_SIGN=0x2,

KEY_USAGE_CERT_SIGN=0x4,

KEY_USAGE_KEY_AGREEMENT=0x8,

KEY_USAGE_DATA_ENCIPHERMENT=0x10,

KEY_USAGE_KEY_ENCIPHERMENT=0x20,

KEY_USAGE_NON_REPUDIATION=0x40,

KEY_USAGE_DIGITAL_SIGNATURE=0x80

}KEY_USAGE_TYPE;

具體含義可參見(jiàn)RFC5280。

2?522?2.消息指示類(lèi)型

說(shuō)明:用于指示輸入/輸出消息編碼類(lèi)型和內(nèi)容選項(xiàng)。

類(lèi)型:枚舉

定義:

typedefenum_MIDLMIDL_itLPTA_0000_0002

{INPUT_BASE64=0x1,

INPUT_HEX=0x2,

OUTPUT_BASE64=0x4,

OUTPUT_HEX=0x8,

INNER.CONTENT=0x10,

PLAINTEXT_UTF8=0x20,

MIN.CERTSTORE=0x40,

MSG_BASE64=0x4,

MSG_HEX=0x8

}OPTION;

具體含義如下:

INPUT_BASE64:指示輸入的消息為base64編碼

INPUTHEX:指示輸入的消息為16進(jìn)制編碼

OUTPUT_BASE64:指示輸出的消息為base64編碼

OUTPUT.HEX:指示輸出的消息為16進(jìn)制編碼

INNER.CONTENT:指示PKCS7簽名結(jié)果需要包含明

PLAINTEXT.UTF8:指示明文為UTF8編碼格式字符串

MIN.CERTSTORE:指示消息的PKCS7簽名結(jié)果不含

證書(shū)鏈

MSG_BASE64:指示驗(yàn)證簽名時(shí)輸入的明文為base64

編碼

MSG.HEX:指示驗(yàn)證簽名時(shí)輸入的明文為16進(jìn)

制編碼

2?5?2?2.3.證書(shū)編碼類(lèi)型

說(shuō)明:用于指示證書(shū)的編碼類(lèi)型。

類(lèi)型:枚舉

定義:

typedefenum_MIDLMIDL_itf_PTA_0000_0003

{CERT_ENCODE_DER=0,

CERT_ENCODE_PEM=1,

CERT_ENCODE_BASE64=2

}CERT_ENCODING;

具體含義如下:

CERT_ENCODE_DER:指示證書(shū)為二進(jìn)制編碼

CERT_ENCODE_PEM:指示證書(shū)為pem編碼

CERT_ENCODE_BASE64:指示證書(shū)為base64編碼

2.5.23.接口說(shuō)明

.1.ICertFilter

ICertFilter是證書(shū)過(guò)濾條件的設(shè)置接口,其本身不獨(dú)立工

作,它作為liltrusPTA的證書(shū)過(guò)濾屬性影響liltrusPTA的證書(shū)集

合屬性。

2.5.23.1.1.屬性

2?5?2?3?1.1.LSubject

類(lèi)型:BSTR

說(shuō)明:證書(shū)過(guò)濾的主題條件,支持正則表達(dá)式。

.1.1.2.Issuer

類(lèi)型:BSTR

說(shuō)明:證書(shū)過(guò)濾的頒發(fā)者條件,支持正則表達(dá)式。

2.5.2?3.1?1.3.SerialNumber

類(lèi)型:BSTR

說(shuō)明:證書(shū)過(guò)濾的序列號(hào)條件。

.1.4.CSP

類(lèi)型:BSTR

說(shuō)明:證書(shū)過(guò)濾的CSP條件。

2?5.2?3?L1.5.UseLocalMachineCertStore

類(lèi)型:BOOL

說(shuō)明:標(biāo)識(shí)是使用本機(jī)證書(shū)store還是使用當(dāng)前用戶證書(shū)

store的標(biāo)記。TRUE表示使用本機(jī)證書(shū)store,FALSE表示使用

當(dāng)前用戶證書(shū)storeo

.1.2.方法

.2.1.Clear

原型:HRESULTClear()

說(shuō)明:用于清除已經(jīng)設(shè)置的過(guò)濾屬性條件,清除范圍包含

如下屬性:Subject、Issuer>SerialNumber和CSP。

輸入?yún)?shù):無(wú)

輸出參數(shù):無(wú)

返回值:無(wú)

.liltrusPTA

.1.liltrusPTA屬性

.1.1.Filter

類(lèi)型:ICertFilter*

說(shuō)明:證書(shū)過(guò)濾器。用于設(shè)置過(guò)濾證書(shū)的條件,只讀屬性

(本身不可改變,但其內(nèi)容可變)。

2?5?2?3?2?L2.MyCertificates

類(lèi)型:ICerti行cates*

說(shuō)明:當(dāng)前系統(tǒng)容器中個(gè)人證書(shū)集合,只讀屬性(本身不

可改變,但其內(nèi)容可變)。

.2.1.3.OtherCertificates

類(lèi)型:ICertificates*

說(shuō)明:當(dāng)前系統(tǒng)容器中其他人證書(shū)集合,只讀屬性(本身

不可改變,但其內(nèi)容可變)。

.2.1.4.CaCertificates

類(lèi)型:ICertificates*

說(shuō)明:當(dāng)前系統(tǒng)容器中中間證書(shū)頒發(fā)機(jī)構(gòu)證書(shū)集合,只讀

屬性(本身不可改變,但其內(nèi)容可變)。

2.5?2?3.2?1.5.RootCertificates

類(lèi)型:ICerti仔cates*

說(shuō)明:當(dāng)前系統(tǒng)容器中受信任根證書(shū)頒發(fā)機(jī)構(gòu)證書(shū)集合,

只讀屬性(本身不可改變,但其內(nèi)容可變)。

.2.1.6.Version

類(lèi)型:BSTR

說(shuō)明:文件版本號(hào),只讀屬性。

2.5.2?3?2.1.7.LangCode

類(lèi)型:BSTR

說(shuō)明:語(yǔ)言代碼JEN”表示英語(yǔ),其他表示中文。

.2.liltrusPTA方法

2?5.2?3.2.2.LDecryptMessage

原型:HRESULTDecryptMessage([in]BSTRp7msg,

[in,defaultvalue(1)]OPTIONopt,[out,retval]BSTR*m

Sg);

說(shuō)明:解密PKCS7信封消息。

輸入?yún)?shù):p7msg待解密的消息

opt指示密文消息和輸出的明文消息的編碼格式,下述

值可聯(lián)合使用:

INPUT_BASE64表示密文消息為Base64編碼,

TNPUT_HEX表示密文消息為16進(jìn)制字符串,

OUTPUT_BASE64指示輸出的明文消息為Base64編碼,

OUTPUT_HEX指示輸出的明文消息為16進(jìn)制字符串

輸出參數(shù):無(wú)

返回值:明文消息。

2.S..2.VerifySignature

原型:HRESULTVerifySignature([in]BSTRmsg,[in]BSTR

sign,[in,defaultvalue(l)]OPTIONopt,[out,retval]ICertificate**

signer);

說(shuō)明:驗(yàn)證PKCS7簽名消息。

輸入?yún)?shù):msg消息明文,可選,當(dāng)PKCS7簽名消息內(nèi)

含明文,可不提供。

signPKCS7簽名消息

opt指示明文消息和P7簽名消息的編碼格式,下述值可聯(lián)

合使用:

MSG_BASE64表示明文消息為Base64編碼,

MSG_HEX表示明文消息為16進(jìn)制字符串,

PLAINTEXT_UTF8表示明文消息為UTF8編碼字符串,

INPUT_BASE64表示P7簽名消息為Base64編碼,

INPUT.HEX表示P7簽名消息為16進(jìn)制字符串

輸出參數(shù):無(wú)

返回值:簽名者證書(shū)。

2?5.2?3.3.【Certificate

2.5.2.33.1.屬性

2?5?2?3?3?1?1?CommonName

類(lèi)型:BSTR

說(shuō)明:證書(shū)的cn串,只讀屬性。

2?5?2?3.3?1.2.Subject

類(lèi)型:BSTR

說(shuō)明:證書(shū)主題名稱(chēng)dn,只讀屬性。

2.5.2?.Issuer

類(lèi)型:BSTR

說(shuō)明:證書(shū)頒發(fā)者dn,只讀屬性。

2.5?2?3.3?1.4.SerialNumber

類(lèi)型:BSTR

說(shuō)明:證書(shū)序列號(hào),只讀屬性。

3.1.5.ValidFrom

類(lèi)型:DATE

說(shuō)明:證書(shū)有效期開(kāi)始時(shí)間,只讀屬性。

?3.L6.ValidTo

類(lèi)型:DATE

說(shuō)明:證書(shū)有效期結(jié)束時(shí)間,只讀屬性。

.3.1.7.keyUsage

類(lèi)型:KEY_USAGE_TYPE

說(shuō)明:證書(shū)密鑰用法,只讀屬性。

3.1.8.CSP

類(lèi)型:BSTR

說(shuō)明:證書(shū)所屬csp名稱(chēng),只讀屬性。

.3.1.9.KeyContainer

類(lèi)型:BSTR

說(shuō)明:證書(shū)密鑰容器名稱(chēng),只讀屬性。

2.5.2.33.2.方法

2.5.2?.CreateFromStream

原型:HRESULTCreateFromStream([in]BSTRstream);

說(shuō)明:從流創(chuàng)建證書(shū)對(duì)象。

輸入?yún)?shù):stream證書(shū)字節(jié)流。

輸出參數(shù):無(wú)

返回值:無(wú)

3.2.2.GetEncodedCert

原型:HRESULTGetEncodedCert([in,defaultvalue(l)]CER

T_ENCODINGenc,[out,retval]BSTR*certEnc);

說(shuō)明:獲取證書(shū)內(nèi)容串。

輸入?yún)?shù):enc證書(shū)內(nèi)容串編碼格式標(biāo)識(shí)

輸出參數(shù):無(wú)

返回值:證書(shū)內(nèi)容串。

3.2.3.SignMessage

原型:HRESULTSignMessage([in]BSTRmsg,[in,defaultva

lue(4)]OPTIONopt,[out,retval]BSTR*signout);

說(shuō)明:PKCS7消息簽名。

輸入?yún)?shù):

msg待簽名消息

opt指示待簽名消息和簽名消息的編碼格式,下述值可聯(lián)

合使用:

INPUT_BASE64表示待簽名消息為Base64編碼,

INPUT_HEX表示待簽名消息為16進(jìn)制字符串,

PLAINTEXT_UTF8表示待簽名消息為UTF8編碼格式字符

串,

OUTPUT.BASE64指示簽名消息為Base64編碼,

OUTPUT_HEX指示簽名消息為16進(jìn)制字符串

輸出參數(shù):無(wú)

返回值:PKCS7消息

.4.Icertificates

.4.1.屬性

無(wú)自身屬性,繼承屬性參見(jiàn)微軟【Collection接口。

23.2.3.4.2.方法

.4.2.1.EncryptMessage

原型:HRESULTEncryptMessage([in]BSTRmsg,[in,defau

ltvalue(4)]OPTIONopt,[out,retval]BSTR*val);

說(shuō)明:消息加密

輸入?yún)?shù):msg待加密消息

opt指示待加密消息和密文消息的編碼格式

輸出參數(shù):無(wú)

返回值:密文消息。

2.5.3.服務(wù)端接口

服務(wù)器端接口是供應(yīng)用系統(tǒng)服務(wù)器端程序直接調(diào)用的高級(jí)

接口,支持所有主流操作系統(tǒng),支持B/S和C/S等系統(tǒng)架構(gòu),

支持符合國(guó)際RSA算法和國(guó)家密碼管理局制定的SM2算法的

數(shù)字證書(shū),可通過(guò)添加證書(shū)信任列表的方式實(shí)現(xiàn)不同電子認(rèn)證

服務(wù)機(jī)構(gòu)證書(shū)之間的交叉認(rèn)證和互信互認(rèn)。服務(wù)端接口使用

HTTP/HTTPS作為通訊接口協(xié)議,所有的請(qǐng)求都使用POST方

法,請(qǐng)求參數(shù)保存在POST表單域內(nèi)。

2.5.3.L互認(rèn)平臺(tái)API調(diào)用協(xié)議說(shuō)明

2.5.3.L1.API調(diào)用協(xié)議詳解

互聯(lián)互通開(kāi)放平臺(tái)(UAP)的API是基于HTTP協(xié)議來(lái)調(diào)

用的,開(kāi)發(fā)者可以直接使用UAP提供的官方SDK及dem。(支

持多種語(yǔ)言,包含了請(qǐng)求的封裝,簽名加密,響應(yīng)解釋?zhuān)阅?/p>

優(yōu)化等)來(lái)調(diào)用,也可以根據(jù)UAP的協(xié)議來(lái)自行封裝HTTP請(qǐng)

求進(jìn)行調(diào)用,以下主要是針對(duì)自行封裝HTTP請(qǐng)求進(jìn)行API調(diào)

用的原理進(jìn)行詳細(xì)解說(shuō)。

2.5.3.L2,調(diào)用流程

使用官方SDK,Java和C#將自動(dòng)完成以下封裝和解析過(guò)

程。

應(yīng)用系統(tǒng)可根據(jù)協(xié)議,按以下協(xié)議解析即可,根據(jù)UAP的

協(xié)議:填充參數(shù)>生成簽名>拼裝HTTP請(qǐng)求>發(fā)起HTTP

請(qǐng)求,得到HTTP響應(yīng)>解釋json結(jié)果,以下是大體的調(diào)用

過(guò)程示意圖:

服務(wù)端

(UAP)

平臺(tái)統(tǒng)一接口地址及公共參數(shù)

:82/uap/api/verify

公共參數(shù):

參數(shù)類(lèi)是否必

參數(shù)名稱(chēng)參數(shù)描述

型須

methodString是API接口名稱(chēng)。

UAP分配給應(yīng)用的AppKeyo

這里要注意正式環(huán)境和沙箱

app_keyString是環(huán)境的AppKey是不同的(包

括AppSecret),使用時(shí)要注意

區(qū)分;

時(shí)間戳,格式為yyyy-MM-dd

HH:mm:ss,時(shí)區(qū)為GMT+8,

例如:2016-01-0112:00:00o

timestampString是

UAPAPI服務(wù)端允許客戶端

請(qǐng)求最大時(shí)間誤差為10分

鐘。

響應(yīng)格式。默認(rèn)為xml格式,

formatString否

可選值:xml,jsono

VString是API協(xié)議版本,可選值:1.0。

ign_metho簽名的摘要算法,可選值為:

String是

dhmaco

API輸入?yún)?shù)簽名結(jié)果,簽名

signString是

算法參照下面的介紹。

2?5?3.1.3.請(qǐng)求參數(shù)簽名算法

為了防止API調(diào)用過(guò)程中被黑客惡意篡改,調(diào)用任何一個(gè)

API都需要攜帶簽名,UAP服務(wù)端會(huì)根據(jù)請(qǐng)求參數(shù),對(duì)簽名進(jìn)

行驗(yàn)證,簽名不合法的請(qǐng)求將會(huì)被拒絕。TOP目前支持的簽名

算法是HMAC:HMAC_MD5(sign_method=hmac),簽名大體過(guò)

程如下:

1)對(duì)所有API請(qǐng)求參數(shù)(包括公共參數(shù)而業(yè)務(wù)參數(shù),但

除去sign參數(shù)和byte口類(lèi)型的參數(shù)),根據(jù)參數(shù)名稱(chēng)的ASCII碼

表的順序排序。如:foo:1,bar:2,foo_bar:3,foobar:4排序后的順

序是bar:2,foo:l,foo_bar:3,foobar:4o

2)將排序好的參數(shù)名和參數(shù)值拼裝在一起,根據(jù)上面的

示例得到的結(jié)果為:bar2foo1foo_bar3foobar4。

3)把拼裝好的字符串采用utf-8編碼,使用簽名算法對(duì)編

碼后的字節(jié)流進(jìn)行摘要。如果使用MD5算法,則需要在拼裝的

字符串前后加上app的secret后,再進(jìn)行摘要,如:

md5(secret+bar2foo1foo_bar3foobar4+secret);如果使用

HMAC_MD5算法,則需要用app的secret初始化摘要算法后,

再進(jìn)行摘要,如:hmac_md5(bar2foo1foo_bar3foobar4)o

4)將摘要得到的字節(jié)流結(jié)果使用十六進(jìn)制表示,如:

hex(uhelloworldv.getBytes(uutf-8v))=

“68656c6c6F776F726c64”說(shuō)明:HMAC_MD5是128位長(zhǎng)

度的摘要算法,用16進(jìn)制表示,一個(gè)十六進(jìn)制的字符能表示4

個(gè)位,所以簽名后的字符串長(zhǎng)度固定為32個(gè)十六進(jìn)制字符。

2.53.2.平臺(tái)API接口

2.5.32L簽名驗(yàn)證接口

請(qǐng)求的業(yè)務(wù)參數(shù)

所有參數(shù)均采用UTF-8方式進(jìn)行

參數(shù)名稱(chēng)說(shuō)明

method接口名稱(chēng),指定為:y.verifypkcs7

to_sign簽名原文字符串

signeddata簽名值結(jié)果字符串

op_type操作內(nèi)容,如登陸簽名,標(biāo)識(shí)解密等

requestid客戶端請(qǐng)求流水號(hào)

返回值說(shuō)明

返回值類(lèi)Json格式數(shù)據(jù)

返回值(

“code":200,

“message":“操作成功”,

"requestid”:“2018-06-2913:16:470,

,'reponseidM:,"\

ndataH:{

“certCN":“企業(yè)證書(shū)”,

"entityName":”企業(yè)證書(shū)”,

ncaNumbern:n6043n,

nhexSerialNumbern:'781052dO52c13901

c5f4062d5c2491Of85a77b69”,

nnotAfter11:00,

,'notBcforc,':00,

unotAfterBjTimeStrn:"2019-10-15

15:51:33”,

MnotBeforeBjTimeStrn:n2018-10-15

15:51:33”,

McertBase64n:nMIID3zCCA4SgAwIBAg

IUeBBSOFLBOQHF9AYtXCSRD4Wne

2kwDAYIKoEczlUBg3UFADCBgzEL

MAkGA1UEBhMCQ04xQDA+BgNVB

AoMN1NpY2h1YW4gRGl

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論