標籤:
本篇文章就介紹一下如何使用微軟CAPI介面完成將USBKey中的憑證註冊到Windows系統中。
(1) 擷取CSP控制代碼。
CryptAcquireContext(
&hTokenProv,NULL,
“EnterSafe ET199Auto CSP V1.0”,
PROV_RSA_FULL,
NULL)
(2) 擷取USBKey內密鑰控制代碼,這時要注意鎖內密鑰的類型是簽名密鑰(AT_SIGNATURE)或者交換密鑰(AT_KEYEXCHANGE)。
CryptGetUserKey(hTokenProv,AT_KEYEXCHANGE,&hKeyCAPI)
(3) 擷取認證資料(只是認證資訊資料,不包括私密金鑰),這時可以通過兩次調用,先擷取認證資料的長度,分配空間,然後再調用一次。
CryptGetKeyParam(hKeyCAPI, KP_CERTIFICATE, pbCert, &dwCertLen, 0)
(4) 建立CERT_CONTEXT結構
pCertContext = CertCreateCertificateContext(
PKCS_7_ASN_ENCODING | X509_ASN_ENCODING,
pbCert,
dwCertLen)
(5) 開啟MY儲存區,這個就是Windows系統中“個人”認證存放的地區。
hSysStore = CertOpenStore(
CERT_STORE_PROV_SYSTEM_REGISTRY,
0,
0,
CERT_SYSTEM_STORE_CURRENT_USER,
L"MY");
(6) 設定認證內容屬性。這時要先聲明CRYPT_KEY_PROV_INFO結構
CRYPT_KEY_PROV_INFO ckpi = {0};
ckpi.pwszProvName = L" EnterSafe ET199Auto CSP V1.0";
ckpi.pwszContainerName = pbWideContainer;
ckpi.dwProvType = PROV_RSA_FULL;
ckpi.dwKeySpec = AT_KEYEXCHANGE;
ckpi.dwFlags = CERT_KEY_CONTEXT_PROP_ID;
ckpi.cProvParam = 0;
ckpi.rgProvParam = NULL;
CertSetCertificateContextProperty(
pCertContext,
CERT_KEY_PROV_INFO_PROP_ID, CERT_STORE_NO_CRYPT_RELEASE_FLAG,
&ckpi)
(7) 將憑證註冊到Windows系統中。
CertAddCertificateContextToStore(
hSysStore,
pCertContext,
CERT_STORE_ADD_REPLACE_EXISTING,
NULL);
(8) 釋放CSP控制代碼。
CryptReleaseContext(hTokenProv,0)
通過上述步驟就可以將ET199Auto中的憑證註冊到Windows系統中了。我們可以在IE?Internet選項?內容?認證?個人下面查看到ET199Auto中的認證。
如何將USBKey中的憑證註冊到Windows系統中