Windows密钥容器和证书的关系

其实CSP主要是对容器里的密钥对操作的,和证书关系不大。

容器里的密钥对有两种类型:一种是AT_KEYEXCHANGE,表示加密的密钥对,一种是AT_SIGNATURE表示签名的密钥对。

由于美国的出口限制,在MS的CSP中加密的密钥对可以取的密钥最大长度通常会比签名的密钥对短。

通常加密的密钥对只会用于加密,签名的密钥对只会用于签名,由于某些原因(例如产生证书请求),加密的密钥对也可以用于签名。

我把AT_KEYEXCHANGE和AT_SIGNATURE看作是容器里的两个位置。在智能卡CSP中可以把证书写入容器中,和加密的密钥对对应的证书写到AT_KEYEXCHANGE位置中,和签名的密钥对对应的证书写到AT_SIGNATURE位置中。这里判断依据是证书的公钥和密钥对的公钥相同,而不是证书中的密钥用法扩展。

使用Crypto API可以根据证书库里的证书的CERT_KEY_PROV_INFO_PROP_ID找到相对应得容器里的密钥对。CRYPT_KEY_PROV_INFO中的dwKeySpec就是指容器里的密钥对类型。如果在CSP实现的层次根据证书的密钥用法扩展来限制是否能够加密和签名,要先读出证书,这个操作比较慢,估计实现者比较少采用。

事实上,明华EKey的CSP的AT_KEYEXCHANGE和AT_SIGNATURE类型的密钥对都是既可以加密也可以签名的(CryptDecrypt和CryptSignHash是没问题的,没怎么测过CryptImportKey,不知道是不是签名的密钥对能不能成功导入会话密钥)。我没有和你的版本一样的xcsp_eclib.dll,我使用了一个稍微旧一点的版本的来测试。我测试了CryptDecryptMessage函数,发现如果是签名密钥对不管我证书的密钥用法扩展如何设置则解密总是会失败(用MS的CSP也一样)。而使用加密密钥对则可以成功。虽然OUTLOOK可能不是使用CryptDecryptMessage来解密CMS的EnvelopedData的,但是我相信最终都会调用CSP的CryptImportKey解出对称密钥,再解密的。CryptDecryptMessage传给CryptImportKey的是一个Simple-Key BLOBs。我的测试发现EKey好像总是使用加密的密钥对来解密。这可能是这个Simple-Key BLOBs的结构有问题导致解密失败或者EKey的CSP的CryptImportKey有BUG导致解密失败。

看来,如果要使得证书既能加密也能签名,必须首先保证使用的是加密密钥对。产生加密密钥对可以在产生证书请求的时候使用Xenroll来设置,至于使用PKCS#12文件导入的方式要取决于使用的软件是根据什么来判断应该创建什么类型的密钥对。

时间: 2024-10-09 10:13:35

Windows密钥容器和证书的关系的相关文章

加密webconfig中的连接字符串,利用RSA非对称加密,利用windows保存密钥容器

简单的解决方法: WebConfig 加解密,未能使用提供程序“RsaProtectedConfigurationProvider”进行解密.提供程序返回错误消息为: 打不开 RSA 密钥容器.问题:未添加用于访问 RSA 密钥容器命令:aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY/NETWORK SERVICE"注意事项:XP下:aspnet_regiis -pa "NetF

windows2003安装证书服务:csp配置不正确、您没有此密钥容器的写访问权限

1.填写CA名称后在生成密钥时提示:csp配置不正确或安装不完整.      原因:可能的原因为CS服务(Crysptographic Service)没有启动 . ps:该服务依赖RPC服务,但RPC服务会有两个,一个是RPC,另一个是RPC(Locator),我的是第二个没有启动.启动后,安装继续. 2.生成密钥时提示:您没有此密钥容器的写访问权限      原因:C:\Documents and Settings\All Users\Application Data\Microsoft\C

配置错误:未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。提供程序返回错误信息为: 打不开 RSA 密钥容器。

http://www.cnblogs.com/jiaruistone/articles/1441634.html 我们如果想对web.config的数据库连接字符串进行加密的话,那么这里提供了两个方法. 方法一.     使用“DataProtectionConfigurationProvider”形式加密,创建test.aspx文件,代码如下: 需要添加引用 using System.Web.Configuration; using System.IO; //加密 protected void

备份Windows密钥,重装后免费激活系统教程

最重要的一点:在你重装系统之前,一定要先备份Windows密钥,不然重装系统后就查询不了原来的密钥,从而无法免费激活. 1.查询系统密钥(注册表中查询) 打开 "运行"(快捷键 win + R) 打开 注册表编辑器 依次定位到文件夹  HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows  NT/CurrentVersion/SoftwareProtectionPlatform,在右侧打开文件 BackupProductKeyDefault    

docker容器与镜像的关系

1.容器和镜像的关系 2.docker commit和docker import的区别 docker import会生成一个全新的镜像,而docker commit则是“继承自服镜像”,保留了父镜像的相关信息 原文地址:https://www.cnblogs.com/ycg-blog/p/12109237.html

关于密钥和数字证书

前些天逛技术网,偶尔看到一篇国外关于密钥的通俗易懂的详解文章,当时对具体的细节还是有点模糊搞不清楚,so昨天恶补了一下,今天简单整理一下自己的收获,以备以后回顾. 1.鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2.鲍勃把公钥送给他的朋友们—-帕蒂.道格.苏珊—-每人一把. 3.苏珊给鲍勃写信,写完后用鲍勃的公钥加密,达到保密的效果. 4.鲍勃收信后,用私钥解密,看到信件内容. 5.鲍勃给苏珊回信,写完后用Hash函数,生成信件的摘要(digest). 6.然后,鲍勃使用私钥,对这个摘要加密,生

windows下OpenSSL加密证书安装步骤与使用方法

OpenSSL加密证书一般用于签名认证,含私钥和公钥.在Linux系统中,OpenSSL一般是已经安装好了,可以直接使用.而在Windows系统中,是需要安装使用的. 最近在使用支付平台时,用到了OpenSSL,鉴于此分享给大家,步骤如下: 安装OpenSSL 1.前往官方指定下载地址http://slproweb.com/products/Win32OpenSSL.html下载所需版本 2.一般安装路径在C盘根目录,也可自行选择 3.安装过程中会出现生成证书所存放的路径,可默认到bin,也可自

windows安装生成苹果证书

访问:http://slproweb.com/products/Win32OpenSSL.html .并下载Win32 OpenSSL v1.0.2c Light版本(注意:版本可能会升级),如果您运行OpenSSL有问题,还需要下载Visual C++ 2008 Redistributables安装. 1. Windows系统下申请苹果证书 安装好OpenSSL后,进入Windows的命令行(WIN+R,进入运行)生成certSigningRequest文件.开始输入各个命令. //OpenS

windows 2016 容器管理

1. docker-compose 安装        python   2.7 pip pip   install docker-compose 常见问题:       解决方法: pip    install  pypiwin32 2.  docker-compose.yaml docker-compose.yaml 文件如下: version: '2.1' services: db: image: microsoft/mssql-server-windows-developer envir