




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
甘肅省公共資源交易數字證書(CA)
互認共享標準規范
目錄
1.數字證書介質(USBKey)兼容互認接口技術標準錯誤!未
定義書簽。
1.1.簡介......................錯誤!未定義書簽。
1.2.算法標識..................錯誤!未定義書簽。
1.3.數據交換結構..............錯誤!未定義書簽。
1.4.SM2簽名時計算Z值的操作流程和相關擴展錯誤!
未定義書簽。
2.數字證書兼容互認接口技術標準…?….錯誤!未定義書簽。
2.1.范圍......................錯誤!未定義書簽。
2.2.應用集成目標..............錯誤!未定義書簽。
2.3.應用集成要求..............錯誤!未定義書簽。
2.4.應用集成內容..............錯誤!未定義書簽。
2.5.數字證書兼容互認應用接口規范錯誤!未定義書簽。
2.5.1.B/S客戶端接口.......錯誤!未定義書簽。
2.5.2.C/S客戶端接口.......錯誤!未定義書簽。
2.53服務端接口.........錯誤!未定義書簽。
2.6.交易系統接入CA互聯互通流程錯誤!未定義書簽。
2.7.CA機構接入CA互聯互通流程錯誤!未定義書簽。
3.電子簽章兼容互認動態鏈接庫....錯誤!未定義書簽。
3.1.電子簽章驗證結果規范......錯誤!未定義書簽。
3.2.電子簽章互通標準接口定義.….錯誤!未定義書簽。
3.2.1.讀取標準印章數據....錯誤!未定義書簽。
3.2.2.讀取標準印章列表....錯誤!未定義書簽。
3.2.3.讀取具體標準印章數據..錯誤!未定義書簽。
3.3.電子印章數據格式..........錯誤!未定義書簽。
3.3.1.電子印章數據.........錯誤!未定義書簽。
3.3.2.印章信息.............錯誤!未定義書簽。
3.3.3.印章頭信息...........錯誤!未定義書簽。
3.3.4.印章屬性信息.........錯誤!未定義書簽。
3.3.5.印章圖片信息.........錯誤:未定義書簽。
3.3.6.印章簽名信息.........錯誤!未定義書簽。
1.數字證書介質(USBKey)兼容互認接口技術標準
1.1.簡介
本規范是為同時兼容存量舊介質和新介質而基于CSP規范
擴展,主要針對USBKey在國密系列(SM系列)算法上的相
關接口標準規范進行說明,國際系列(RSA相關)算法上的相
關標準規范完全按照國際CSP及相關標準,本文不再贅述。
1.2.算法標識
(一)SM1算法
標識符值
ALG_SID_SM1IF
CALG_SM1(ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|
ALG_SID_SM1)
(二)SM2算法
標識符值
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算法
標識符值
ALG_SID_SM30x41
CALG_SM3(ALG_CLASS_HASH|ALG_TYPE_ANY|
ALG_SID_SM3)
(四)SM4
標識符值
ALG_SID_SM420
CALG_SM4(ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|
ALG_SID_SM4)
13數據交換結構
所有SM2算法相關數據均使用大端序,包括公鑰、簽名值、
密文。
(一)預定義宏
標識符值
ECC_MAX_MODULUS_BITS256
_LEN
ECC_MAX_XCOORDINATE_256
BITS_LEN
ECC_MAX_YCOORDINATE_256
BITS_LEN
(二)SM2私鑰結構
typedefstructStruct_ECCPRIVATEKEYBLOB
(
ULONGAlgID;
ULONGBitLen;
BYTE
PrivateKey[ECC_MAX_MODULUS_BITS_LEN/8];
JECCPRIVATEKEYBLOB,*PECCPRIVATEKEYBLOB;
該結構的字段具有如下含義:
AlgID算法標識號
值為
CALG_SM2_EXCHANGE
CALG_SM2_ENCRYPT
CALG_SM2_SIGNATURE
之一
BitLen模數的實際長度
PrivateKey[]私鑰256位數據
(三)SM2公鑰結構
typedefstructStruct_ECCPUBLICKEYBLOB
{
ULONGAlgID;
ULONGBitLen;
BYTE
XCoordinate[ECC_MAX_XCOORDINATE_BITS_L
EN/8];
BYTE
YCoordinate[ECC_MAX_YCOORDINATE_BITS_L
EN/8];
JECCPUBLICKEYBLOB,*PECCPUBLICKEYBLOB;
該結構的字段具有如下含義:
AlgID算法標識號
值為
CALG_SM2_EXCHANGE
CALG_SM2_ENCRYPT
CALG_SM2_SIGNATURE
之一
BitLen模數的實際長度
XCoordinate[]公鑰曲線X坐標
YCoordinate[]公鑰曲線Y坐標
(四)SM2簽名傳出傳入結構
typedefstructStruct_ECCSIGNATUREBLOB
{
BYTEr[ECC_MAX_XC00RDINATE_BITS_LEN/8];
BYTEs[ECC_MAX_YCOORDINATE_BITS_LEN/8];
}ECCSIGNATUREBLOB,*PECCSIGNATUREBLOB;
該結構的字段具有如下含義:
r[]簽名值第一部分,參見SM2簽名算法
規范
s[]簽名值第二部分,參見SM2簽名算法
規范
(五)SM2密文傳出傳入結構
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;
該結構的字段具有如下含義:
XCoordinate加密曲線X坐標,參見SM2加密算法
規范
^Coordinate加密曲線Y坐標,參見SM2加密算法
規范
HASH口SM3(X坐標|原文|Y坐標),參見SM2
加密算法規范
Cipher[]密文數據,參見SM2加密算法規范
(六)SM2私鑰導出導入結構
struct_ERHeader
(
BLOBHEADERblobheader;
ECCPUBLICKEYBLOBsm2PubKey;
ECCPRIVATEKEYBLOBsm2PriKey;
);
該結構的字段具有如下含義:
blobheaderPRIVATEKEYBLOB該結構的
aiKeyAlg的值為CALG.SM2
sm2PubKey該結構的AligID的值:
如果是簽名密鑰對則為
CALG_SM2_SIGNATURE
如果密鑰交換的則為
CALG_SM2_EXCHANGE
sm2PriKey該結構的AligID的值:
如果是簽名密鑰對則為
CALG_SM2_SIGNATURE
如果密鑰交換的則為
CALG_SM2_EXCHANGE
(七)SM2公鑰導出導入結構
struct_PHeader
(
BLOBHEADERblobheader;
ECCPUBLICKEYBLOBsm2PubKey;
);
該結構的字段具有如下含義:
blobheaderPUBLICKEYBLOB該結構aiKeyAlg
的值為CALG_SM2
sm2PubKey該結構的AligID的值:
如果是簽名密鑰對則為
CALG_SM2_SIGNATURE
如果密鑰交換的則為
CALG_SM2_EXCHANGE
(A)密文導入SM私鑰方法:
首先,導入用非對稱密鑰(通常是簽名密鑰對)加密的對
稱密鑰,采用SIMPLEBLOB
BLOBHEADERblobheader;〃參考下邊的BLOGHEADER
ALGIDalg;〃如果該對稱密鑰是被SM2公鑰
加密,則此處的alg為CALG_SM2_EXCHANGE,如果是被RSA
公鑰加密,則alg為CALG_RSA_KEYX;
BYTEencryptedKey[];〃如果該對稱密鑰是被SM2公鑰
加密,則參考本文SM2密文結構;如果是被RSA公鑰加密,
則為微軟RSA密文結構
ion=CUR_BLOB_VERSION;
=SIMPLEBLOB;
ved=0;
Alg=algid;//對稱密鑰的算法SM1標識為
CALG.SM1,SM4標識為CALG_SM4其他采用微軟默認標識
然后用上一步導入的對稱密鑰,導入密文的SM2密鑰,采
用PRIVATEKEYBLOB
如果導入的是SM2密鑰對,參考定義的(六)中SM2密
鑰導入結構,具體如下:
typedefstruct_ERHeader〃用于導出導入SM2的私鑰
BLOBHEADERblobheader;//PRIVATEKEYBLOB
ECCPUBLICKEYBLOBsm2PubKey;
ECCPRIVATEKEYBLOBsm2PriKey;
}ECCPRIKEYHEADER,*PECCPRIKEYHEADER;
其中:
(0)blobheader
=PRIVATEKEYBLOB;
ion=CUR_BLOB_VERSION;
ved=0;
Alg=CALG_SM2_EXCHANGE;
//CALG_SM2_EXCHANGE為加密密鑰對;
CALG_SM2_SIGNATURE為簽名密鑰對(很少用)
(1)ECCPRIVATEKEYBLOB
typedefstructStruct_ECCPRIVATEKEYBLOB
{
ULONGAlgID;〃算法標識號
CALG_SM2_EXCHANGE/CALG_SM2_SIGNATURE
ULONGBitLen;〃模數的實際位長度
BYTE
PrivateKeyLECC_MAX_MODULUS_BlTS_LEN/8J;〃該結
構的私鑰部分為被對稱密鑰加密的32字節密文
}ECCPRIVATEKEYBLOB,
*PECCPRIVATEKEYBLOB;
(2)ECCPUBLICKEYBLOB
typedefstructStruct_ECCPUBLICKEYBLOB
{
ULONGAlgID;〃算法標識號
CALG_SM2_EXCHANGE/CALG_SM2_SIGNATURE
ULONGBitLen;〃模數的實際位長度
BYTE
XCoordinate[ECC_MAX_XCOORDINATE_BITS_LEN/8];//
曲線上點的X坐標
BYTE
YCoordinate[ECC_MAX_YCOORDINATE_BITS_LEN/8];//
曲線上點的Y坐標
}ECCPUBLICKEYBLOB,*PECCPUBLICKEYBLOB;
1.4.SM2簽名時計算Z值的操作流程和相關擴展
CSP在進行SM2簽名時,如果未設置與Z值計算有關的
UserID和公鑰時,簽名不計算Z值。
以下部分可選擇實現。
1.通過CryptSetHashParam方法實現三個擴展
1)使用HP_USERID0x101設置UserID。
例:
CryptSetHashParam(hHash,HP_USERID,
(PBYTE)pbUserlD,0);
//pbUserlD為16字節長的UserID
2)使用HP_SM2_PUBLICKEY0x102設置公鑰,通過傳
入ECCPUBLICKEYBLOB結構實現。
例:
CryptSetHashParam(hHash,HP_SM2_PUBLICKEY_H,(PB
YTE)&EccPubLickeyBlob,0);
//EccPubLickeyBlob為ECCPUBLICKEYBLOB結構
3)使用HP_SM2_PUBLICKEY_H0x104設置公鑰,通過
傳入HCRYPTKEY句柄的實現。
例:
CryptSetHashParam(hHash,HP_SM2_PUBLICKEY_H,(PB
YTE)&hKey,0);
//hKey為HCRYPTKEY句柄
2.通過句柄設置公鑰時,句柄可以是其他容器中的密鑰,
且不管是簽名密鑰或加密密鑰,都可用于計算。
3.如果既通過結構設置了公鑰,又通過句柄設置了公鑰,
則使用句柄設置的公鑰進行計算。
4.如果未通過HP_SM2_PUBLICKEY或HP_SM2_PUB
LICKEY.H設置公鑰,不計算Z值。
5.如果這樣調用CryptSetHashParam(hHash,HP_SM2_PU
BLICKEY,NULL,0),則視為沒有設置。如果先前設置過,則
取消設置。
6.如果這樣調用CryptSe田ashParam(hHash,HP_SM2_PU
BLICKEY_H,NULL,0),則視為沒有設置。如果先前設置過,
則取消設置。
7.在已設置公鑰但未設置UserID的情況下,使用默認Us
erlD“5678”計算。在設置了UserID的情況下,使用設置的Us
erlD計算Z值。
8.設置UserID時傳入NULL,應報錯。
2.數字證書兼容互認接口技術標準
2.1.范圍
本規范參照國家密碼管理局“公鑰密碼基礎設施應用技術體
系''系列技術規范,結合系統業務特點,提出系統數字證書應
用集成目標、集成要求、集成內容,定義統一的證書應用接口,
并提供證書應用接口的典型部署示例、登錄認證流程示例和簽
名驗證流程示例等。
2.2.應用集成目標
1)遵循本規范要求新建或者修改的信息系統,使用不同
CA機構頒發的數字證書,實現數字證書的互通互認,并確保系
統訪問控制的高安全性和高可靠性;
2)對信息系統的重要操作環節和重要數據實現基于多CA
數字證書的數字簽名功能,保護數據的完整性,并為后期糾紛
處理及責任認定提供合法電子證據;
3)對信息系統的敏感信息實現支持多CA的數字證書的數
據加密功能,確保敏感信息在傳輸和存儲階段的安全性及多CA
支持。
2.3.應用集成要求
在證書應用集成時,應根據應用系統本身的業務特點和業
務需求,確定需要使用數字證書認證的用戶及范圍、確定需要
加密、簽名的重要操作環節和數據,具體集成要求如下:
1)對于具有操作行為責任認定、證據保存需求的應用系
統,應集成基于數字證書的數字簽名的功能;
2)對于具有數據加密和解密需求的信息系統,應集成基于
數字證書的信息加密、信息解密功能;
2.4.應用集成內容
應用系統數字證書應用集成內容如下:
1)數字簽名和驗證
信息系統中關鍵業務數據和操作的數字簽名,應滿足《電
子簽名法》以及其他相關政策法規規定的書面形式、原件形式
及文件保存等要求,至少應包括數據原文、電子簽名、可信時
間等內容,并可在需要時查詢、閱讀、下載、驗證,具備作為
電子證據的真實性、可靠性和可驗證性。
2)數據加密和解密
數據加密時應采用對稱算法和非對稱算法相結合的方式,
既保障加密機制的安全性、密鑰分發的方便性,同時又提高了
加解密操作的效率。根據業務需求,可使用單個數字證書加密,
也可使用多個數字證書對數據共同加密,形成密文數據。
密文數據應安全存儲在數據庫或磁盤上,待解密時間達到
后方可解密。數據解密時,須使用數字證書對應的密碼設備或
證書介質解密。如果證書介質損壞或丟失,電子認證服務機構
應在安全可控的前提下,為用戶及時提供密鑰恢復服務。
25數字證書兼容互認應用接口規范
數字證書兼容互認應用接口規范是應用系統可直接調用的
應用接口,分為B/S客戶端接口、C/S客戶端接口和服務端接口。
2.5.1.B/S客戶端接口
B/S客戶端接口是B/S客戶端應用程序直接調用的接口,支
持主流操作系統,支持IE、Chrome>Firefox等主流瀏覽器。支
持使用符合《數字證書介質(USBKey)兼容互認接口接口技術
標準》的數字證書介質。支持符合國際RSA算法和國家密碼管
理局制定的SM2算法的數字證書。
2.5.1.L功能介紹
CertKitWinClient是一套用于Windows平臺下B/S客戶端的
證書應用套件。由一組JS接口和客戶端組件組成。
CertKit支持的功能和特性如下:
1.證書應用。如:基于證書的加密解密、簽名驗簽。
2.JS接口和客戶端組件支持多種瀏覽器,如:IE32/64位、
Chrome、Firefoxo
3.CertKit提供的功能均支持RSA和SM2證書。
CertKitWinClient提供了以下JS對象:
l.TCAo用于對CertKitWinClient提供配置,并提供了多個
常量值。
2.CertStoreo提供列舉證書的多種證書管理功能。
3.Certificateo證書對象,可用于獲取證書信息和部分證書操
作。
4.CertSeto證書集合,由一組證書對象組成的證書集合,包
含多個過濾方法,并提供了部分證書操作。
5.PKCS7o用于操作PKI體系中的PKCS7結構,同時作為
部分接口的返回值。
2.5.L2.接口說明
2.5J.2.1.TCA
2.5.L2.1.L概述
TCA對象用于配置CertKitWinClient,并提供了多個PKI相
關常量值。
2.5.1.2.L2,構造方法
無
2.5.1.2.L3.成員方法
無
.1.4.常量
TCA提供多個常量值,可作為一些接口的參數使用。
用于表示算法的常量
1
2
4
3
1024
2048
用于表示密鑰用法的常量
alSignature
pudiation
cipherment
ncipherment
reement
rtSign
gn
herOnly
herOnly
ntCommitment
用于表示擴展密鑰用法的常量
rAuth
tAuth
igning
Protection
EndSystem
Tunnel
User
tamping
igning
ertAAServerAuth
esponder
erPPP
erLAN
erver
lient
IKE
pAC
pWTP
cardlogon
.1.5.靜態方法
.1.5.1.TopESAConfigO
描述
此方法用于配置CertKitWinCliento
這個方法必須在調用其他對象和方法之前調用。
參數
無
返回值
true/false
.2.CertStore
.2.1.概述
CertStore提供了列舉證書的功能。
.2.2.構造方法:
無
2.5?1?2?2.3.靜態方法:
.2.3.1.listAHCerts()
描述
用于列舉當前系統中“個人”存儲區下的所有證書。
CertStore不會主動從“個人”存儲區以外讀取證書。
對于UKey或其他密碼設備中的證書,需要由廠商將
證書注冊到“個人”存儲區下。
參數
無。
返回值
CertSet類型。
.2.3.2.byName(name)
描述
獲取指定名字的CertStore對象
參數
nameString類型
返回值
CertStore類型。
2?5?1.2?2?3.3.byCertificate(cert)
描述
獲取指定證書所在的CertStore對象
參數
certCertificate類型
返回值
CertStore類型
.2.4.成員方法:
.2A.1.listCerts()
描述
獲取當前CertStore下的證書
參數
無
返回值
CertSet對象
.3.CertSet
2.5.L2.3.1.概述
CertSet用于儲存一組Certificate對象,并提供了數個過濾
方法。
2.5.1.23.2.構造方法
.3.2.1.CertSet(pkcs7)
描述
讀取PKCS7中的證書,并用其中的證書構造CertSet
對象。
參數
pkcs7Base64編碼的PKCS7
2.5.1?2?3?2.2.CertSet(b64Certs)
描述
使用一個字符串數組構造CertSet對象。
參數
b64Certs字符串數組,每一項都是Base64編碼后的證
書數據。
2.5?L.CertSet(certs)
描述
使用一個Certificate對象數組構造CertSet對象。
參數
certs證書對象數組
.3.3.靜態方法
無
3.4.成員方法
2?5?L2?3.4.Lsize()
描述
獲取當前CertSet對象中的證書數量。
參數
無
返回值
當前CertSet對象中的證書數量。
3.4.2.get(idx)
描述
使用索引獲取證書
參數
idx指定索引
返回值
Certificate類型
2?5?1?2?3?4?3?encryptMessage(origin)
描述
使用當前CertSet對象中的證書進行加密
參數
origin字符串類型。原文。
返回值
字符串類型。加密后的密文。
3.4.4.forSign()
描述
過濾含有簽名用法的證書集合
參數
無
返回值
CertSet類型。其中的證書是當前CertSet中含有簽名用
法的所有證書。
.3?4.5.forEncrypt()
描述
過濾含有加密用法的證書集合。
參數
無
返回值
CertSet類型。其中的證書是當前CertSet中含有加密用
法的所有證書。
2.5?L.byKeyUsage(intKeyUsage)
描述
過濾含有指定密鑰用法的證書集合
參數
intKeyUsageint類型,用于指定密鑰用法。
取值可使用TCA中的密鑰用法常量組合得
出。
請參見TCA中的密鑰用法常量
返回值
CertSet類型。其中的證書是當前CertSet中含有指定密
鑰用法的所有證書。
.3.4.7.byKeyUsage(strarrKeyUsage)
描述
過濾含有指定密鑰用法的證書集合
參數
strarrKeyUsage字符串數組,用于指定密鑰用法。
返回值
CertSet類型。其中的證書是當前CertSet中含有指定密
鑰用法的所有證書。
3.4.8.byValidity()
描述
過濾在當天有效的證書。
日期取自客戶端。
參數
無
返回值
CertSet類型。其中的證書是當前CertSet中在當天有效
的所有證書。
2?5?L2?3.4.9.byValidity(date)
描述
過濾在制定日期有效的證書。
日期由調用者傳入。
參數
datajs中的Date對象
返回值
CertSet類型。其中的證書是當前CertSet中在指定日期
有效的所有證書。
.3.4.10.bylssuer(issuer)
描述
使用指定關鍵字,通過頒發者過濾證書。
參數
issuer字符串類型。
返回值
CertSet類型。其中的證書是當前CertSet中使用指定關
鍵字過濾后的所有證書。
.3.4.11.bySubject(subject)
描述
使用指定關鍵字。通過主題過濾證書。
參數
subject字符串類型
返回值
CertSet類型。其中的證書是當前CertSet中使用指定關
鍵字過濾后的所有證書。
.3.4.12.bySerialnumber(serial)
描述
使用指定關鍵字。通過序列號過濾證書。
請注意,此接口為精確匹配。
參數
serial字符串類型
返回值
CertSet類型。其中的證書是當前CertSet中使用序列號
過濾后的證書。
2?5?L2.4.Certificate
2?5?L2?4.1.概述
Certificate用于表示一張證書,提供了多個方法用于獲取
證書信息,并提供了一些證書應用的接口。
.4.2.構造方法:
.4.2.1.Certificate(b64str)
描述
使用Base64證書數據構造Certificate對象
參數
b64str字符串類型。Base64編碼后的證書數據
靜態方法
無
.4.3.用于獲取證書信息的成員方法
Certificate提供了多個用于獲取證書信息接口,這些接口均
無參數。
這些接口如下:
serialNumber()
issuer()
subject()
notBefore()
notAfter()
keyUsage()
extededKeyUsage()
crlUrl()
.4.4.用于證書應用的成員方法
.4.4.1.signMessage(plaintext)
描述
使用證書對消息進行簽名。
需要注意的是,簽名實際使用的是證書所對應的私鑰。
如果你僅持有證書而沒有私鑰,此方法會報錯。
簽名結果為P7,包含原文。
參數
plaintext字符串類型。原文。
返回值
String類型,Base64編碼后的P7數據,包含原文。
.4.4.2.signLogondata(plaintext)
描述
使用證書對消息進行登錄的簽名,簽名時會在消息原
文前追加LOGONDATA:字符,驗簽時需要注意同步追加。
需要注意的是,簽名實際使用的是證書所對應的私鑰。
如果你僅持有證書而沒有私鑰,此方法會報錯。
簽名結果為P7,包含原文。
參數
plaintext字符串類型。原文。
返回值
String類型,Base64編碼后的P7數據,包含原文。
2.5?L.signMessage(plaintext,b)
描述
使用證書對消息進行簽名。
需要注意的是,簽名實際使用的是證書所對應的私鑰。
如果你僅持有證書而沒有私鑰,此方法會報錯。
簽名結果為P7,由調用者決定是否原文。
參數
plaintext字符串類型。原文。
bbool類型。true時,會輸出包含原文的P7簽名。
false時,會輸出不包含原文的P7簽名。
返回值
String類型,Base64編碼后的P7數據。
2.5.1?2.4?4.4.encryptMessage(origin)
描述
使用證書對消息進行加密。
參數
origin
返回值
String類型,Base64編碼后的P7數據
2?5?1?2.4?4.5.toBase64()
描述
導出證書的Base64字符串
參數
無
返回值
證書的Base64字符串
.5.PKCS7
.5.1.概述
PKCS7用于操作PKI體系中的PKCS7數據結構。
2.5A.2.5.2.構造方法
.5.2.1.PKCS7(cms)
描述
使用Base64編碼后的P7數據構造PKCS7對象
參數
cms字符串類型。Base64編碼后的數據結構。
2?5?.靜態方法
無
.5.4.成員方法
2?5?1?2?5?4.LcontentMessage()
描述
獲取P7簽名中的原文信息。
請注意,如果當前的PKCS7對象不是簽名P7,此方法
會報錯。
參數
無
返回值
字符串類型,P7簽名中的原文數據。
.5.4.2.verify()
描述
驗證P7簽名。
請注意,如果當前的PKCS7對象不是簽名P7或P7中
不包含原文,此方法會報錯。
參數
無
返回值
如果驗證通過,則返回Certificate對象。
.5.43.toBase64()
描述
返回base64編碼的p7
參數
無
返回值
base64編碼的p7
.5.4.4.verify(plaintext)
描述
驗證P7簽名。原文信息由調用者指定
請注意,如果當前的PKCS7對象不是簽名P7,此方法
會報錯。
參數
plaintext字符串類型。原文。
返回值
如果驗證通過,則返回Certificate對象
2?5?1?2.5?4.5.decryptMessage()
描述
解密數據。
請注意,如果當前的PKCS7對象不是加密P7,此方法
會報錯。
參數
無
返回值
String類型。解密后的原文
2.5.2.C/S客戶端接口
2.5.2.1.功能介紹
iTrusPTA是應用于Windows平臺下C/S客戶端的的證書應
用套件,采用com技術,產品形態為dll動態庫。
iTrusPTA依托于微軟CSP密碼體系規范,基于微軟
CryptoAPI開發和擴展,同時支持符合國際RSA算法體系和國
家密碼管理局制定的SM2算法體系的數字證書。
iTrusPTA組■件層次結構圖如下:
iTni^PTA
IVfirrnQnftCrvntnAPT
MicrcscftThirdSoft|INRKev
圖2.1
iTrusPTA基于CSP密碼體系規范,借助MicrosoftCryptoAPI
實現,通過不同加密服務提供者,對各種證書軟硬件需求提供
靈活地支持。
2.5?22數據結構說明
2.5.22L密鑰用法類型
說明:用于證書擴展項〈密鑰用法〉的表述。
類型:枚舉
定義:
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;
具體含義可參見RFC5280。
2?522?2.消息指示類型
說明:用于指示輸入/輸出消息編碼類型和內容選項。
類型:枚舉
定義:
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進制編碼
OUTPUT_BASE64:指示輸出的消息為base64編碼
OUTPUT.HEX:指示輸出的消息為16進制編碼
INNER.CONTENT:指示PKCS7簽名結果需要包含明
文
PLAINTEXT.UTF8:指示明文為UTF8編碼格式字符串
MIN.CERTSTORE:指示消息的PKCS7簽名結果不含
證書鏈
MSG_BASE64:指示驗證簽名時輸入的明文為base64
編碼
MSG.HEX:指示驗證簽名時輸入的明文為16進
制編碼
2?5?2?2.3.證書編碼類型
說明:用于指示證書的編碼類型。
類型:枚舉
定義:
typedefenum_MIDLMIDL_itf_PTA_0000_0003
{CERT_ENCODE_DER=0,
CERT_ENCODE_PEM=1,
CERT_ENCODE_BASE64=2
}CERT_ENCODING;
具體含義如下:
CERT_ENCODE_DER:指示證書為二進制編碼
CERT_ENCODE_PEM:指示證書為pem編碼
CERT_ENCODE_BASE64:指示證書為base64編碼
2.5.23.接口說明
.1.ICertFilter
ICertFilter是證書過濾條件的設置接口,其本身不獨立工
作,它作為liltrusPTA的證書過濾屬性影響liltrusPTA的證書集
合屬性。
2.5.23.1.1.屬性
2?5?2?3?1.1.LSubject
類型:BSTR
說明:證書過濾的主題條件,支持正則表達式。
.1.1.2.Issuer
類型:BSTR
說明:證書過濾的頒發者條件,支持正則表達式。
2.5.2?3.1?1.3.SerialNumber
類型:BSTR
說明:證書過濾的序列號條件。
.1.4.CSP
類型:BSTR
說明:證書過濾的CSP條件。
2?5.2?3?L1.5.UseLocalMachineCertStore
類型:BOOL
說明:標識是使用本機證書store還是使用當前用戶證書
store的標記。TRUE表示使用本機證書store,FALSE表示使用
當前用戶證書storeo
.1.2.方法
.2.1.Clear
原型:HRESULTClear()
說明:用于清除已經設置的過濾屬性條件,清除范圍包含
如下屬性:Subject、Issuer>SerialNumber和CSP。
輸入參數:無
輸出參數:無
返回值:無
.liltrusPTA
.1.liltrusPTA屬性
.1.1.Filter
類型:ICertFilter*
說明:證書過濾器。用于設置過濾證書的條件,只讀屬性
(本身不可改變,但其內容可變)。
2?5?2?3?2?L2.MyCertificates
類型:ICerti行cates*
說明:當前系統容器中個人證書集合,只讀屬性(本身不
可改變,但其內容可變)。
.2.1.3.OtherCertificates
類型:ICertificates*
說明:當前系統容器中其他人證書集合,只讀屬性(本身
不可改變,但其內容可變)。
.2.1.4.CaCertificates
類型:ICertificates*
說明:當前系統容器中中間證書頒發機構證書集合,只讀
屬性(本身不可改變,但其內容可變)。
2.5?2?3.2?1.5.RootCertificates
類型:ICerti仔cates*
說明:當前系統容器中受信任根證書頒發機構證書集合,
只讀屬性(本身不可改變,但其內容可變)。
.2.1.6.Version
類型:BSTR
說明:文件版本號,只讀屬性。
2.5.2?3?2.1.7.LangCode
類型:BSTR
說明:語言代碼JEN”表示英語,其他表示中文。
.2.liltrusPTA方法
2?5.2?3.2.2.LDecryptMessage
原型:HRESULTDecryptMessage([in]BSTRp7msg,
[in,defaultvalue(1)]OPTIONopt,[out,retval]BSTR*m
Sg);
說明:解密PKCS7信封消息。
輸入參數:p7msg待解密的消息
opt指示密文消息和輸出的明文消息的編碼格式,下述
值可聯合使用:
INPUT_BASE64表示密文消息為Base64編碼,
TNPUT_HEX表示密文消息為16進制字符串,
OUTPUT_BASE64指示輸出的明文消息為Base64編碼,
OUTPUT_HEX指示輸出的明文消息為16進制字符串
輸出參數:無
返回值:明文消息。
2.S..2.VerifySignature
原型:HRESULTVerifySignature([in]BSTRmsg,[in]BSTR
sign,[in,defaultvalue(l)]OPTIONopt,[out,retval]ICertificate**
signer);
說明:驗證PKCS7簽名消息。
輸入參數:msg消息明文,可選,當PKCS7簽名消息內
含明文,可不提供。
signPKCS7簽名消息
opt指示明文消息和P7簽名消息的編碼格式,下述值可聯
合使用:
MSG_BASE64表示明文消息為Base64編碼,
MSG_HEX表示明文消息為16進制字符串,
PLAINTEXT_UTF8表示明文消息為UTF8編碼字符串,
INPUT_BASE64表示P7簽名消息為Base64編碼,
INPUT.HEX表示P7簽名消息為16進制字符串
輸出參數:無
返回值:簽名者證書。
2?5.2?3.3.【Certificate
2.5.2.33.1.屬性
2?5?2?3?3?1?1?CommonName
類型:BSTR
說明:證書的cn串,只讀屬性。
2?5?2?3.3?1.2.Subject
類型:BSTR
說明:證書主題名稱dn,只讀屬性。
2.5.2?.Issuer
類型:BSTR
說明:證書頒發者dn,只讀屬性。
2.5?2?3.3?1.4.SerialNumber
類型:BSTR
說明:證書序列號,只讀屬性。
3.1.5.ValidFrom
類型:DATE
說明:證書有效期開始時間,只讀屬性。
?3.L6.ValidTo
類型:DATE
說明:證書有效期結束時間,只讀屬性。
.3.1.7.keyUsage
類型:KEY_USAGE_TYPE
說明:證書密鑰用法,只讀屬性。
3.1.8.CSP
類型:BSTR
說明:證書所屬csp名稱,只讀屬性。
.3.1.9.KeyContainer
類型:BSTR
說明:證書密鑰容器名稱,只讀屬性。
2.5.2.33.2.方法
2.5.2?.CreateFromStream
原型:HRESULTCreateFromStream([in]BSTRstream);
說明:從流創建證書對象。
輸入參數:stream證書字節流。
輸出參數:無
返回值:無
3.2.2.GetEncodedCert
原型:HRESULTGetEncodedCert([in,defaultvalue(l)]CER
T_ENCODINGenc,[out,retval]BSTR*certEnc);
說明:獲取證書內容串。
輸入參數:enc證書內容串編碼格式標識
輸出參數:無
返回值:證書內容串。
3.2.3.SignMessage
原型:HRESULTSignMessage([in]BSTRmsg,[in,defaultva
lue(4)]OPTIONopt,[out,retval]BSTR*signout);
說明:PKCS7消息簽名。
輸入參數:
msg待簽名消息
opt指示待簽名消息和簽名消息的編碼格式,下述值可聯
合使用:
INPUT_BASE64表示待簽名消息為Base64編碼,
INPUT_HEX表示待簽名消息為16進制字符串,
PLAINTEXT_UTF8表示待簽名消息為UTF8編碼格式字符
串,
OUTPUT.BASE64指示簽名消息為Base64編碼,
OUTPUT_HEX指示簽名消息為16進制字符串
輸出參數:無
返回值:PKCS7消息
.4.Icertificates
.4.1.屬性
無自身屬性,繼承屬性參見微軟【Collection接口。
23.2.3.4.2.方法
.4.2.1.EncryptMessage
原型:HRESULTEncryptMessage([in]BSTRmsg,[in,defau
ltvalue(4)]OPTIONopt,[out,retval]BSTR*val);
說明:消息加密
輸入參數:msg待加密消息
opt指示待加密消息和密文消息的編碼格式
輸出參數:無
返回值:密文消息。
2.5.3.服務端接口
服務器端接口是供應用系統服務器端程序直接調用的高級
接口,支持所有主流操作系統,支持B/S和C/S等系統架構,
支持符合國際RSA算法和國家密碼管理局制定的SM2算法的
數字證書,可通過添加證書信任列表的方式實現不同電子認證
服務機構證書之間的交叉認證和互信互認。服務端接口使用
HTTP/HTTPS作為通訊接口協議,所有的請求都使用POST方
法,請求參數保存在POST表單域內。
2.5.3.L互認平臺API調用協議說明
2.5.3.L1.API調用協議詳解
互聯互通開放平臺(UAP)的API是基于HTTP協議來調
用的,開發者可以直接使用UAP提供的官方SDK及dem。(支
持多種語言,包含了請求的封裝,簽名加密,響應解釋,性能
優化等)來調用,也可以根據UAP的協議來自行封裝HTTP請
求進行調用,以下主要是針對自行封裝HTTP請求進行API調
用的原理進行詳細解說。
2.5.3.L2,調用流程
使用官方SDK,Java和C#將自動完成以下封裝和解析過
程。
應用系統可根據協議,按以下協議解析即可,根據UAP的
協議:填充參數>生成簽名>拼裝HTTP請求>發起HTTP
請求,得到HTTP響應>解釋json結果,以下是大體的調用
過程示意圖:
服務端
(UAP)
平臺統一接口地址及公共參數
:82/uap/api/verify
公共參數:
參數類是否必
參數名稱參數描述
型須
methodString是API接口名稱。
UAP分配給應用的AppKeyo
這里要注意正式環境和沙箱
app_keyString是環境的AppKey是不同的(包
括AppSecret),使用時要注意
區分;
時間戳,格式為yyyy-MM-dd
HH:mm:ss,時區為GMT+8,
例如:2016-01-0112:00:00o
timestampString是
UAPAPI服務端允許客戶端
請求最大時間誤差為10分
鐘。
響應格式。默認為xml格式,
formatString否
可選值:xml,jsono
VString是API協議版本,可選值:1.0。
ign_metho簽名的摘要算法,可選值為:
String是
dhmaco
API輸入參數簽名結果,簽名
signString是
算法參照下面的介紹。
2?5?3.1.3.請求參數簽名算法
為了防止API調用過程中被黑客惡意篡改,調用任何一個
API都需要攜帶簽名,UAP服務端會根據請求參數,對簽名進
行驗證,簽名不合法的請求將會被拒絕。TOP目前支持的簽名
算法是HMAC:HMAC_MD5(sign_method=hmac),簽名大體過
程如下:
1)對所有API請求參數(包括公共參數而業務參數,但
除去sign參數和byte口類型的參數),根據參數名稱的ASCII碼
表的順序排序。如:foo:1,bar:2,foo_bar:3,foobar:4排序后的順
序是bar:2,foo:l,foo_bar:3,foobar:4o
2)將排序好的參數名和參數值拼裝在一起,根據上面的
示例得到的結果為:bar2foo1foo_bar3foobar4。
3)把拼裝好的字符串采用utf-8編碼,使用簽名算法對編
碼后的字節流進行摘要。如果使用MD5算法,則需要在拼裝的
字符串前后加上app的secret后,再進行摘要,如:
md5(secret+bar2foo1foo_bar3foobar4+secret);如果使用
HMAC_MD5算法,則需要用app的secret初始化摘要算法后,
再進行摘要,如:hmac_md5(bar2foo1foo_bar3foobar4)o
4)將摘要得到的字節流結果使用十六進制表示,如:
hex(uhelloworldv.getBytes(uutf-8v))=
“68656c6c6F776F726c64”說明:HMAC_MD5是128位長
度的摘要算法,用16進制表示,一個十六進制的字符能表示4
個位,所以簽名后的字符串長度固定為32個十六進制字符。
2.53.2.平臺API接口
2.5.32L簽名驗證接口
請求的業務參數
所有參數均采用UTF-8方式進行
參數名稱說明
method接口名稱,指定為:y.verifypkcs7
to_sign簽名原文字符串
signeddata簽名值結果字符串
op_type操作內容,如登陸簽名,標識解密等
requestid客戶端請求流水號
返回值說明
返回值類Json格式數據
型
返回值(
“code":200,
“message":“操作成功”,
"requestid”:“2018-06-2913:16:470,
,'reponseidM:,"\
ndataH:{
“certCN":“企業證書”,
"entityName":”企業證書”,
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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 模擬應聘面試題及答案
- 2025年音樂理論與實踐考試試題及答案
- 西方國家的社會公正理念探討試題及答案
- 2025年統計學基礎知識考試題及答案
- 嚇人測試題及答案
- 2025年翻譯學專業考試題及答案
- 優衣庫招聘面試題及答案
- 規劃中心面試題及答案
- 寶鋼財務面試題及答案
- 汽車電子技術模擬試題
- 無創機械通氣護理要點
- TCCAATB0045-2023城市航站樓服務規范
- 七下道法【選擇題】專練50題
- 2024年北京第二次高中學業水平合格信息技術試卷試(含答案詳解)
- 職業壓力管理學習通超星期末考試答案章節答案2024年
- 人力資源管理:基于創新創業視角學習通超星期末考試答案章節答案2024年
- 安全環保職業健康法律法規清單2024年
- 基于杜邦分析法的蔚來汽車經營財務分析及建議
- 職業教育專業教學資源庫建設工作方案和技術要求
- 江蘇省徐州市2023-2024學年七年級下學期期末英語試卷(含答案解析)
- 2024年西藏初中學業水平考試生物試題(原卷版)
評論
0/150
提交評論