最近和capicom親密接觸了一下,感覺(jué)到它的強(qiáng)大,記錄以備后查.
capicom是一個(gè)對(duì)windows來(lái)講非常重要的CryptoAPI.
通過(guò)capicom你可以在你的應(yīng)用中集成Public Key Infrastructure (PKI)功能:獲取證書(shū)庫(kù),利用服務(wù)器證書(shū)簽名,加密數(shù)據(jù).
通過(guò)vbscript你可以輕松的調(diào)用它,當(dāng)然,前提是你已經(jīng)安裝了capicom.dll.
注冊(cè)capicom.dll,打開(kāi)cmd,轉(zhuǎn)到capicom.dll目錄下,執(zhí)行:
regsvr32 capicom.dll.(當(dāng)然你也可以自己做個(gè).msi來(lái)安裝)
之后你就可以用各種腳本調(diào)用它的強(qiáng)大功能了
以vbscript為例:
拿到當(dāng)前用戶的數(shù)字證書(shū)
Const CAPICOM_MY_STORE = "My"
Const CAPICOM_CURRENT_USER_STORE = 2
Const CAPICOM_STORE_OPEN_READ_ONLY = 0
Dim oCert, oStore
Set oStore = CreateObject ("CAPICOM.Store")
if Err.Number <> 0 Then
wscript.echo "CAPICOM NOT detected"
Wscript.Quit(1)
End if
oStore.Open CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY
For Each oCert in oStore.Certificates
WScript.Echo " Subject Name: " & oCert.SubjectName
WScript.Echo " Issuer Name: " & oCert.IssuerName
WScript.Echo " SHA-1 Thumbprint: " & oCert.Thumbprint
WScript.Echo " Serial Number: " & oCert.SerialNumber
WScript.Echo " Version: " & oCert.Version
WScript.Echo " Valid From: " & oCert.ValidFromDate
WScript.Echo " Valid To: " & oCert.ValidToDate
Next
上面這段代碼就是得到了當(dāng)前用戶的所有數(shù)字證書(shū).
當(dāng)然你也可以得當(dāng)前機(jī)器上的,AD上的等.
store = CreateObject ("CAPICOM.Store")將返回一個(gè)證書(shū)庫(kù).
可利用這個(gè)store的open()方法得到相應(yīng)證書(shū)庫(kù)及其中的證書(shū).
.open ()語(yǔ)法為:
.open(
StoreLocation ,
StoreName ,
OpenMode)
StoreLocation :
CAPICOM_ACTIVE_DIRECTORY_USER_STORE 3 得到AD上已經(jīng)發(fā)布的證書(shū)
CAPICOM_CURRENT_USER_STORE 2 得到當(dāng)前用戶的證書(shū)
CAPICOM_LOCAL_MACHINE_STORE 1 得到本地機(jī)器上的證書(shū)
CAPICOM_MEMORY_STORE 0 得到內(nèi)存中的證書(shū)
StoreName :
CAPICOM_MY_STORE "MY" 得到當(dāng)前用戶證書(shū)與CAPICOM_CURRENT_USER_STORE配合使用
"CN=your user name on domain" 得到指定用戶的證書(shū),一般與CAPICOM_ACTIVE_DIRECTORY_USER_STORE配合使用.
OpenMode:
CAPICOM_STORE_OPEN_READ_ONLY 0 只讀方法
經(jīng)常易出錯(cuò)的地方是:以上這些常量在vbscript中并沒(méi)被預(yù)定義,使用前要自己定義一下.其值就是后面相應(yīng)的數(shù)字.
之前我就是以為這此常量是VBS預(yù)定義了,所以直接用,導(dǎo)致操作不成功,浪費(fèi)了大量時(shí)間去找原因.
當(dāng)然,你也可以直接用相應(yīng)數(shù)字代替這此常量.
了解更多請(qǐng)參考:
http://msdn.microsoft.com/en-us/library/aa388130.aspx
http://207.46.196.114/windowsserver/en/library/8f918fdc-9841-48f9-a46d-28232742239a1033.mspx?mfr=true