使用netsh将SSL证书绑定到端口号失败



我已经按照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,我一直在与之斗争。事实证明,我的证书在受信任的根证书颁发机构存储中,而不是个人证书。这就是对我有效的:

  1. 确保您的证书位于"证书(本地计算机)/个人/证书"中
  2. netsh http add sslcert ipport=0.0.0.0:8732 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid='{00112233-4455-6677-8899-AABBCCDDEEFF}'
  3. 成功添加SSL证书
  4. 使用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的好建议,可在此处查看

上次遇到这个问题时,我发现是因为命令中传递的指纹值区分大小写。该值需要与证书属性中列出的值相同。我转换成大写并试图传递它——它一直失败,直到我将它返回到原始大小写。

相关内容

  • 没有找到相关文章

最新更新