IT点滴

我不去想是否能够成功 既然选择了远方 便只顾风雨兼程
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理

2014年3月20日

摘要: 昨天windows8自动更新Microsoft .NET Framework 3.5和4.5.1安全更新程序,今天用VS2010编译时提示如下错误信息TRACKER : error TRK0002: Failed to execute command: ""E:\Program Files (x86)\MicrosoftVisualStudio10\VC\bin\x86_amd64\CL.exe" @C:\Users\kevin\AppData\Local\Temp\tmp0dedf936ff54492b89897ca05be58d38.rsp". Th 阅读全文

posted @ 2014-03-20 16:19 Ady Lee 阅读(1848) 评论(0) 推荐(0) 编辑

摘要: 1.证书格式PEM 格式PEM格式通常用于数字证书认证机构(Certificate Authorities,CA),扩展名为.pem, .crt, .cer, and .key。内容为Base64编码的ASCII码文件,有类似"-----BEGIN CERTIFICATE-----" 和 "-----END CERTIFICATE-----"的头尾标记。服务器认证证书,中级认证证书和私钥都可以储存为PEM格式(认证证书其实就是公钥)。Apache和类似的服务器使用PEM格式证书。DER 格式DER格式与PEM不同之处在于其使用二进制而不是Base64编码 阅读全文

posted @ 2014-03-20 14:57 Ady Lee 阅读(617) 评论(0) 推荐(0) 编辑

摘要: 修改MSDN上的示例,使之可以通过RSA证书文件加密和解密,中间遇到一个小问题。Q:执行ExportParameters()方法时,回报CryptographicException:该项不适于在指定状态下使用(Key not valid for use in specified state)。A:导入带有私钥的证书时,需要使用"X509KeyStorageFlags"参数标记"私钥可导出"。X509Certificate2 prvcrt=newX509Certificate2(@"X:\path\to\CA.pfx","** 阅读全文

posted @ 2014-03-20 14:55 Ady Lee 阅读(597) 评论(0) 推荐(0) 编辑

摘要: 在使用OpenSSL进行SSL双向认证时,需要在服务器和客户端配置如下接口函数:[cpp]view plaincopyprint?SSL_CTX_set_verify(SSL_CTX*ctx,intmode,int(*verify_callback)(int,X509_STORE_CTX*));SSL_CTX_load_verify_locations(SSL_CTX*ctx,constchar*CAfile,constchar*CApath);在接口函数SSL_CTX_set_verify中设置第二个参数(mode)为SSL_VERIFY_PEER,该参数标识对通信对方进行认证。如果设置证书 阅读全文

posted @ 2014-03-20 14:05 Ady Lee 阅读(1003) 评论(0) 推荐(0) 编辑

摘要: 证书库个人证书存储区为其中的每个证书维护一个属性CERT_KEY_PROV_INFO_PROP_ID,该属性指定了证书对应的密钥容器的相关信息,包括密钥容器名,CSP名称,CSP类型,密钥用途,以及CSP的其他一些参数(这些参数信息也可以使用CryptSetProvParam函数来设置)。因为个人证书携带私钥信息,所以在导出p12(pfx)个人证书时,也导出了其对应密钥容器的相关信息(使用CryptGetProvParam函数来获取),即上面所提到的。那么,在导入p12(pfx)个人证书时,也会导入密钥容器的相关信息。首先在对应的CSP中生成一个新的密钥容器,并导入密钥对信息;然后导入证书,并 阅读全文

posted @ 2014-03-20 14:04 Ady Lee 阅读(5677) 评论(0) 推荐(1) 编辑

摘要: 使用Crypto库签名和验证签名请参考Crypto库实现PKCS7签名与签名验证,可以使用OpenSSL库验证Crypto签名,OpenSSL验证签名可使用简单的代码描述如下:[cpp]view plaincopyprint?//signature_msg为PKCS7签名串[cpp]view plaincopyprint?intOpenssl_Verify(unsignedchar*signature_msg,unsignedintlength){unsignedcharmessage[1024];intmessage_length=0;constunsignedchar*p_signatur 阅读全文

posted @ 2014-03-20 14:03 Ady Lee 阅读(3766) 评论(0) 推荐(0) 编辑

摘要: 在windows中,可以直接使用微软提供的crypto库实现PKCS7签名与签名验证。签名接口函数为CryptSignMessage,其接口定义为:[cpp]view plaincopyprint?BOOLWINAPICryptSignMessage(__inPCRYPT_SIGN_MESSAGE_PARApSignPara,__inBOOLfDetachedSignature,__inDWORDcToBeSigned,__inconstBYTE*rgpbToBeSigned[],__inDWORDrgcbToBeSigned[],__outBYTE*pbSignedBlob,__in_out 阅读全文

posted @ 2014-03-20 14:02 Ady Lee 阅读(2500) 评论(0) 推荐(0) 编辑

摘要: 今天在使用Outlook express调试CSP程序时,发现数字证书总是加载不上(提示该数字证书已经被破坏),使用断点进去跟踪一下,发现在CSP程序中调用CPVerifySignature函数时返回80090006错误(不是一个合法的签名),因为这里CPVerifySignature函数是windows提供的SPI接口函数,肯定不会有错,推测是不是传进去的签名值发生了错误,然而这个签名值来自哪里呢?应该是来自上层的Crypto应用(即Outlook express程序),推测在证书验证时会调用哪些函数,在使用CPVerifySignature时,传入了签名值,hash对象句柄,和公钥句柄,. 阅读全文

posted @ 2014-03-20 14:01 Ady Lee 阅读(767) 评论(0) 推荐(0) 编辑

摘要: 这段时间要实现一个认证协议,分为客户端和服务器端,客户端使用windows操作系统,服务器端使用linux操作系统,在客户端下(windows),使用windows证书库中的签名证书对消息进行签名(使用windows的crypto库),然后在服务器端(linux)下,使用OpenSSL库对签名值进行验证~~客户端使用函数接口:CertOpenSystemStore — 打开系统证书库CryptUIDlgSelectCertificateFromStore — 从证书库中选择证书,获取证书上下文CertGetCertificateContextProperty — 获取属性CERT_KEY_.. 阅读全文

posted @ 2014-03-20 13:59 Ady Lee 阅读(1164) 评论(0) 推荐(0) 编辑

摘要: 前一段时间对OpenSSL库中的SSL通讯稍微琢磨了一下,在百度文库中找了个示例程序,然后在机器上跑,哇塞,运行成功!那时那个惊喜啊,SSL蛮简单的嘛。前几天,老板要我整一个SSL通讯,要使用windows证书库中的证书进行双向认证,我就想,那不是一小case嘛,于是没怎么放在心上,先休息两天再说。。昨天开完会后,决定开始整。。一打开原来做的SSL工程,我靠,傻眼了,原来示例程序中使用的都是OpenSSL生成的,例如CA证书,Server端证书,Client端证书,以及各自的密钥文件,我想,这咋办呢,还是把windows证书库中的证书先导出来,然后在程序中使用证书文件吧,但又一想,如果是多.. 阅读全文

posted @ 2014-03-20 13:58 Ady Lee 阅读(1957) 评论(0) 推荐(0) 编辑

摘要: 上面四个属性是CertSetCertificateContextProperty或CertGetCertificateContextProperty可以为证书上下文设置的几个属性,下面对它们的关联简单的进行分析(其中的意义我也不太清楚):通过CERT_KEY_CONTEXT_PROP_ID属性,我们可以为证书上下文设置一个CERT_KEY_CONTEXT结构体,在MSDN中,我们可以看到结构体的定义:typedef struct _CERT_KEY_CONTEXT { DWORD cbSize; HCRYPTPROV hCryptProv; DWORD ... 阅读全文

posted @ 2014-03-20 13:57 Ady Lee 阅读(698) 评论(0) 推荐(0) 编辑

摘要: 证书的两种形式:1、带私钥的证书,即p12格式证书(后缀为.pfx)2、不带私钥的证书,有多种格式,通常我们使用的是cer格式证书(后缀为.cer)当我们安装.pfx格式证书时,windows的安装程序会为我们生成一个唯一的密钥容器(密钥容器名为GUID格式),并把证书中的私钥存储在密钥容器中,然后把脱除私钥的证书(为.cer格式证书)存放在证书库中(如果是个人证书,会默认存放在个人证书库,也就是MY系统证书库中),证书库并为证书维护一个CERT_KEY_PROV_INFO_PROP_ID属性,通过此属性可以获取存储私钥的CSP和密钥容器,所以当我们使用证书进行数字签名时,可以找到对应的CSP 阅读全文

posted @ 2014-03-20 13:55 Ady Lee 阅读(684) 评论(0) 推荐(0) 编辑

摘要: 这两个星期真是被OpenSSL给烦透了,几个很简单基本的问题(如果没人告诉你真的很难测出来)把我搞的。。哎,有时候真是不知道自己该不该搞技术,发现自己头脑真是蠢得很。。。直接上正题。第一个问题:前面讲过OpenSSL可以使用windows下的CAPI引擎(我也不太清楚是从哪个版本开始后就开始支持了,网上说是0.9.8i后),但是OpenSSL在windows下默认编译时是不会把它加入内嵌引擎的,所以我们要在编译时设置一些参数。。如果要使用CAPI引擎,我们要在编译源码时使用:>perl Configure VC-WIN32 enable-capieng -DOPENSSL_SSL_CLI 阅读全文

posted @ 2014-03-20 13:22 Ady Lee 阅读(1102) 评论(0) 推荐(0) 编辑