我已经按照SSL中的说明使用自托管WCF服务。当我试图使用netsh在Windows 7上绑定证书时,如"如何:使用SSL证书配置端口"中所述。,它的失败如下。
在Windows PowerShell中
PS C:> netsh http add sslcert ipport=0.0.0.0:8732 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}
Bad numeric constant: 224.
At line:1 char:104
+ netsh http add sslcert ipport=0.0.0.0:8732 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={001 <<<< 12233-4455-6677-8899-AABBCCDDEEFF}
+ CategoryInfo : ParserError: (224:String) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : BadNumericConstant
在命令提示中
C:>netsh http add sslcert ipport=0.0.0.0:8732 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}
SSL Certificate add failed, Error: 1312
A specified logon session does not exist. It may already have been terminated.
为了让我的IIS Express能够正确地执行SSL,我一直在与之斗争。事实证明,我的证书在受信任的根证书颁发机构存储中,而不是个人证书。这就是对我有效的:
- 确保您的证书位于"证书(本地计算机)/个人/证书"中
netsh http add sslcert ipport=0.0.0.0:8732 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid='{00112233-4455-6677-8899-AABBCCDDEEFF}'
- 成功添加SSL证书
- 使用MMC并将证书拖动到您想要的任何位置
我发现端口绑定中出现错误1312的4个可能原因:
- SSL证书已损坏-您需要从证书存储中删除并重新添加。
- SSL证书缺少私钥-您需要从证书存储中删除并重新添加完整的公共/私人证书,或者将私钥附加到证书上。
- 如果安装在2012R2的SP1之前的版本上,则可能需要KB 981506。
- 您可能已将SSL证书添加到用户存储中,而不是本地机器证书存储中——从用户存储中删除并添加到机器存储中。
错误的来源是我直接从signroot.cert的证书文件中获取了ThumbPrint,该文件是根据创建"受信任的根证书颁发机构"所需的第一个makecert命令创建的,该命令再次用于在第二个makecert命令中真正创建(和安装)self-sigend可信证书。
第二个makecert命令还将创建的证书安装在"certificates(Local Computer)->Personal(本地计算机)->certificates(证书)"节点中。必须再次刷新当前打开的MMC以查看"localhost"证书,并且需要从该证书中获取ThumbPrint,而不是从signroot.cert中获取。
如果仍然不是这样,可能需要从M$安装此修补程序。http://support.microsoft.com/kb/981506
参考:http://social.technet.microsoft.com/Forums/en/winservergen/thread/68452008-a89b-40ba-9927-472efcfafc99
我们遇到了同样的错误,经过长时间的工作,我们意识到netsh并没有浏览所有本地机器存储来查找由"certhash"参数标识的证书。默认情况下,它只在"个人"存储中搜索证书。
由于我们的证书不在"个人"存储区,而是在"受信任的根证书颁发机构"存储区中,因此通过在netsh命令中添加"certstorename"参数来解决问题:
C:>netsh http add sslcert ipport=0.0.0.0:8732 certstorename=AuthRoot certhash=...
另一件需要注意的事情是,从MMC控制台证书属性窗口复制/粘贴证书哈希,也可能在哈希的开头带来一个有趣的字符。你不会看到它,因为这个字符在你的文本编辑器可能使用的UTF-8编码中是不可见的!
Netsh没有帮助,因为它只是不断地以"参数不正确"失败,而没有透露哪个参数;)
将编码更改为ANSI会显示字符,删除它,它将像一个魅力一样工作
我在您的问题中注意到了以下内容。它可能无法解决最初的问题,但这里的语法不正确。
PS C:> netsh http add sslcert ipport=0.0.0.0:8732 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}
Bad numeric constant: 224.
At line:1 char:104
+ netsh http add sslcert ipport=0.0.0.0:8732 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={001 <<<< 12233-4455-6677-8899-AABBCCDDEEFF}
+ CategoryInfo : ParserError: (224:String) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : BadNumericConstant
请改用此(在单引号"{}"中使用appid):
netsh http add sslcert ipport=0.0.0.0:8732 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid='{00112233-4455-6677-8899-AABBCCDDEEFF}'
对我来说,关键是放弃使用IE进行导入,这是我通常要做的。
使用mmc.exe,文件->添加/删除管理单元并添加"证书"。管理计算机帐户,然后管理"本地计算机"。
将根证书导入证书(本地计算机)/受信任的根证书颁发机构/证书。
将客户端证书导入Personal/Certificates,然后执行netsh http add sslcert。
实际上它与刷新无关。我在同一个问题上浪费了太多时间。如果你做了一个新的安装,你不会遇到这个问题,但如果你尝试,问题会发生
1. Import same certificate again
2. You create a new certificate and try to bind it which has same parameters, namely the CN value.
若要解决此问题,请从证书存储和IIS服务器缓存中正确删除此证书,或者(仅用于开发目的)创建一个新证书,但使用不同的CN值,该命令将起作用。
"官方"(而非自签名)证书(例如来自Thawte)将导入证书存储:"受信任的根证书颁发机构"。
如果在netsh命令中没有传递参数"certstorename=",netsh将取代表"Private"存储的"MY"
要绑定官方证书,您必须添加:
certstorename=Root
到netsh命令。
完整信息
在单独的堆栈溢出线程中提供了许多解决错误1312的好建议,可在此处查看
上次遇到这个问题时,我发现是因为命令中传递的指纹值区分大小写。该值需要与证书属性中列出的值相同。我转换成大写并试图传递它——它一直失败,直到我将它返回到原始大小写。