我一直在处理此问题,并且正在使用自托管的WCF服务。我刚刚取得了突破:
我在Machine Store的人员文件夹中有一个证书。它过期了,我的经理又发出了一个新的。新的错误对于我来说失败了。我尝试了Google的很多东西,但最后使用完全不同的解决方案解决了该问题。
我安装了两个证书-过期的证书和较新的证书。然后,我使用此命令来获取它们的列表:
certutil -store My
我得到以下输出(信息为假,未列出其他证书):
================ Certificate 1 ================
Serial Number: 6d
Issuer: E=operations@voicetrust.com, CN=VoiceTrust Server CA, OU=VoiceTrust Oper
ations, O=VoiceTrust
NotBefore: 03-Jan-2013 3:33 PM
NotAfter: 03-Mar-2013 3:33 PM
Subject: E=hgulzar@voicetrust.com, CN=hornet.voicetrust.com, OU=Software Develop
ment, O=VoiceTrust eServices MENA FZ LLC, L=Dubai, C=AE
Non-root Certificate
Cert Hash(sha1): 98 5f a0 d3 11 6a 4b 64 3b db 0a a4 11 66 fc 08 28 74 7e 53
Key Container = {E5BC0912-7808-4B89-B457-31946DE5990E}
Unique container name: dfedfcc149408fb990a3bacd6d31126b_3277b2c9-9894-46d0-9b6
4-30f0d6589239
Provider = Microsoft Enhanced Cryptographic Provider v1.0
Private key is NOT exportable
Encryption test passed
================ Certificate 2 ================
Serial Number: 6d
Issuer: E=operations@voicetrust.com, CN=VoiceTrust Server CA, OU=VoiceTrust Oper
ations, O=VoiceTrust
NotBefore: 03-Nov-2013 3:33 PM
NotAfter: 03-Dec-2013 3:33 PM
Subject: E=hgulzar@voicetrust.com, CN=hornet.voicetrust.com, OU=Software Develop
ment, O=VoiceTrust eServices MENA FZ LLC, L=Dubai, C=AE
Non-root Certificate
Cert Hash(sha1): 30 5f a0 d3 11 6a 4b 64 3b db 0a a4 11 66 fc 08 28 74 7e 53
Key Container = {E5BC0912-7808-4B89-B457-31946DE5960E}
*Unique container name:* 55edfcc149408fb990a3bacd6d31126b_3277b2c9-9894-46d0-9b6
4-30f0d6589239
Provider = Microsoft Enhanced Cryptographic Provider v1.0
Private key is NOT exportable
Encryption test passed
现在,一切似乎都很好,但是如果我尝试将证书1绑定到端口,则证书1已过期并且可以工作,而证书2失败,错误1312。
使我感到困惑的关键区别是“唯一容器名称”属性。它应该代表硬盘中的物理密钥文件。%ProgramData%\Microsoft\Crypto\RSA\MachineKeys\
对于证书1,该文件在那里,但是对于证书2,没有这样的文件。搜索后,我在文件夹的子文件夹中找到了针对证书2的%AppData%\Microsoft\Crypto\
文件。那是用户特定的键,而不是计算机级别的键。证书被导入到计算机存储区,但它始终保留用户存储区的容器密钥,这是令人惊讶的。
我删除了AppData文件夹下的'55edfcc149408fb990a3bacd6d31126b_3277b2c9-9894-46d0-9b64-30f0d6589239'文件,并在商店中为我的证书2运行了修复命令:
certutil -repairstore My 2
这次,“唯一”容器名称反映了“%ProgramData%\ Microsoft \ Crypto \”下适当文件夹中的文件,并且一切开始正常工作。
希望这对某人有帮助。