A.创建证书:
(1)将创建证书工具makecert.exe放到任意地方。可以把该文档中的makecert.exe工具复制粘贴到任意目录。
(2)doc命令去到makecert.exe的路径,然后输入命令makecert -sr localmachine -ss My -n CN=DeferredTopupServer -sky exchange -pe -r。其中localmachine表示证书放的位置是本地计算机,My表示证书放在个人证书中,DeferredTopupServer这个是证书的名字根据实际需要改动。
3)成功后,可以在控制台本地计算机个人证书中看到新创建的名为DeferredTopupServer的证书。步骤:
在运行中输入“mmc”-->在控制台窗口中单击“文件”菜单下的“添加删除管理单元”-->在添加/管理单元窗口的独立页,单击“添加”-->在添加独立管理单元窗口,选择“证书”,单击“添加”-->在证书管理单元窗口,选择“计算机账户”,“下一步”-->选择“本地计算机”,单击“完成”。
展开本地计算机中个人证书,可以查询DeferredTopupServer证书。
(4)在localmachine的My下创建好两个不同名字的证书(一个是用在web service config中,一个是用在IIS上https binding中)后,复制my中新建的两个证书到“本地计算机”下“受信任的根证书颁发机构”中。
(5)因为是创建的带私钥的证书,所以要将这两个证书对应的私钥文件权限设置为everyone,简单起见就是将MachineKeys文件夹的权限设置为everyone,目录为...CryptoRSAMachineKeys
B 导入证书 (当有.pfx的证书文件时,不需要创建证书,只需要导入或安装到控制台证书的相应位置即可,此处只介绍导入方式)
(1)打开控制台的本地计算机证书,步骤类似创建证书中的步骤(3),将该文档中的.pfx文件复制粘贴到任意的目录下。
(2)右击“个人”-->“所有任务”-->“导入”-->“下一步”-->单击“浏览...”,“下一步”-->输入密码,一定要勾选“标志此秘钥为可导出的。这将允许您在稍后备份或传输秘钥”,“下一步”-->“下一步”“完成”
(3)同样的步骤导入其他证书,使“本地计算机”的“个人”和“受信任的根证书颁发机构”都有两个证书。
(4)将MachineKeys文件夹的权限设置为everyone,目录为...CryptoRSAMachineKeys
C.导出证书:
1 导出.pfx文件:
在控制台中找到想要导出的证书-->右键“证书名字”,“所有任务”,“导出”-->“下一步”-->勾选“是,导出私钥”,“下一步”-->只选择“私人信息交换”,“下一步”-->自己给定一个密码,输入“密码”,“确认密码”,“下一步”-->点击“浏览”指定存放.pfx文件的位置和文件名,“下一步”-->“完成”
2 导出.pem文件:(只要导出web service config中的证书)
(1)在控制台中找到想要导出的证书-->右键“证书名字”,“所有任务”,“导出”-->“下一步”-->勾选“不,不要导出私钥”,“下一步”-->勾选“Base64 编码 x509”,“下一步”-->点击“浏览”指定存放文件的位置和文件名,“下一步”-->“完成”。此时导出的文件是扩展名为.cer的文件
(2)将导出的.cer文件,重命名为.pem的文件即可。
常见问题
1:异常详细信息: System.Security.Cryptography.CryptographicException: 密钥集不存在。
ArgumentException: 证书“CN=MyServerCert”必须具有能够进行密钥交换的私钥。该进程必须具有访问私钥的权限。
该问题可能存在两个情况:
A:帐户没有权限访问证书的私钥文件。解决方案就是找到证书的私钥文件找到,(位置类似Windows xp存放在:C:Documents and SettingsAll UsersApplication DataMicrosoftCryptoRSAMachineKeys
Windows vista存放在:C:ProgramDataMicrosoftCryptoRSAMachineKeys )将权限设置最大
B:根本没有没有该证书的私钥文件, 地址同A.这种情况一般产生是由于Makecert没有在本机上做,证书是从另外的机器导入进来的. 导入的时候由于服务器的原因不能导入私钥到这个服务器上. 解决方案就是在这服务器上直接用makecert产生证书.
查找证书私钥:
FindPrivateKey My LocalMachine -n "CN=www.ecepdi.com" 或
FindPrivateKey My LocalMachine -t "指纹密钥"
WinHttpCertCfg.exe -g -c LOCAL_MACHINEMY -s "证书名" -a Network Service
设置完成后,IIS宿主不是马上就可以访问密钥,所以不要急,可以iisreset命令重启IIS