CSP開發基礎–如何將USBkey中的憑證註冊到Windows系統中

來源:互聯網
上載者:User

本文轉自和訊部落格堅實誠金
http://zyf860825.blog.hexun.com/61812512_d.html

USBKey是一種USB介面的硬體裝置。如堅石誠信的ET199Auto,內建16位國外進口高效能智慧卡晶片,有一定的儲存空間,可以儲存使用者的私密金鑰以及數位憑證,利用USBKey內建的RSA公私密金鑰演算法實現對使用者身份的認證。由於使用者私密金鑰儲存在ET199Auto中,同時智慧卡可以很好的防止物理攻擊/邊頻攻擊等竊取手段,從而有效保證任何方式都無法讀取ET199Auto中的私密金鑰,因此保證了使用者認證的安全性。
目前,USBKey已廣泛應用在網上銀行,網上辦公,證券交易,網路遊戲等眾多系統中。那麼USBKey又怎麼與應用系統串連而進行身份認證的呢?實際上,USBKey中儲存者代表使用者身份的數位憑證。一張數位憑證包括:認證資訊+公開金鑰+私密金鑰,其中認證+公開金鑰是可以公開的,私密金鑰是在USBKey中,任何人都無法擷取的。當USBKey插入電腦後,USBKey廠商提供的中介軟體程式會將認證資訊註冊到Windows系統中,應用系統中在認證時通過Windows系統找到使用者認證,該認證通過USBKey廠商的中介軟體找到USBKey中對應的私密金鑰,然後在USBKey中使用私密金鑰進行簽名運算,將結果傳給伺服器認證。過程如下:
網銀àWindows系統中使用者認證àUSBKey中介軟體à私密金鑰簽名à伺服器驗證
本篇文章就介紹一下如何使用微軟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中的認證。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.