最近和capicom亲密接触了一下,感觉到它的强大,记录以备后查.
capicom是一个对windows来讲非常重要的CryptoAPI.
通过capicom你可以在你的应用中集成Public Key Infrastructure (PKI)功能:获取证书库,利用服务器证书签名,加密数据.
通过vbscript你可以轻松的调用它,当然,前提是你已经安装了capicom.dll.
注册capicom.dll,打开cmd,转到capicom.dll目录下,执行:
regsvr32 capicom.dll.(当然你也可以自己做个.msi来安装)
之后你就可以用各种脚本调用它的强大功能了
以vbscript为例:
拿到当前用户的数字证书
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
上面这段代码就是得到了当前用户的所有数字证书.
当然你也可以得当前机器上的,AD上的等.
store = CreateObject ("CAPICOM.Store")将返回一个证书库.
可利用这个store的open()方法得到相应证书库及其中的证书.
.open ()语法为:
.open(
StoreLocation ,
StoreName ,
OpenMode)
StoreLocation :
CAPICOM_ACTIVE_DIRECTORY_USER_STORE 3 得到AD上已经发布的证书
CAPICOM_CURRENT_USER_STORE 2 得到当前用户的证书
CAPICOM_LOCAL_MACHINE_STORE 1 得到本地机器上的证书
CAPICOM_MEMORY_STORE 0 得到内存中的证书
StoreName :
CAPICOM_MY_STORE "MY" 得到当前用户证书与CAPICOM_CURRENT_USER_STORE配合使用
"CN=your user name on domain" 得到指定用户的证书,一般与CAPICOM_ACTIVE_DIRECTORY_USER_STORE配合使用.
OpenMode:
CAPICOM_STORE_OPEN_READ_ONLY 0 只读方法
经常易出错的地方是:以上这些常量在vbscript中并没被预定义,使用前要自己定义一下.其值就是后面相应的数字.
之前我就是以为这此常量是VBS预定义了,所以直接用,导致操作不成功,浪费了大量时间去找原因.
当然,你也可以直接用相应数字代替这此常量.
了解更多请参考:
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