posts - 72, comments - 66, trackbacks - 0, articles - 0

有关强大的capicom的应用

Posted on 2008-07-09 23:20 Fingki.li 阅读(3495) 评论(7)  编辑  收藏 所属分类: About security
最近和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(StoreLocationStoreName , 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

Feedback

# re: 有关强大的capicom的应用  回复  更多评论   

2008-09-23 09:51 by guogb
为什么运行这个代码页面是空白呢?

# re: 有关强大的capicom的应用  回复  更多评论   

2008-09-23 10:41 by guogb
证书已经导入了。

# re: 有关强大的capicom的应用[未登录]  回复  更多评论   

2008-09-25 14:17 by Fingki.li
@guogb
运行vbs脚本文件

# re: 有关强大的capicom的应用  回复  更多评论   

2008-09-28 09:46 by guogb
无法读取MY里的证书 CA里的可以读到 。我用ASP写的

# re: 有关强大的capicom的应用[未登录]  回复  更多评论   

2008-10-20 16:10 by Fingki.li
@guogb
检查一下用到的常量值是否都预设置了。

# re: 有关强大的capicom的应用  回复  更多评论   

2008-12-04 13:52 by 水水
我的证书都存放在USBKEY里,如果同时需要使用两个,一个是登录进去的用户,操作时需要另一个用户用KEY里的证书进行授权,应该怎么做?这时默认的就是第一个证书,不再出现弹出选择证书的窗口了.
先谢谢你,我的头都大了.

# re: 有关强大的capicom的应用  回复  更多评论   

2008-12-12 16:39 by Fingki.li
@水水
在应用中完全可以读出指定证书库中的所有证书,然后应用。并且完全可以在你的应用软件中加入重新导入证书功能。

只有注册用户登录后才能发表评论。


网站导航: