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

Windows 7 使用netsh将SSL证书绑定到端口号失败,windows-7,ssl-certificate,wcf-binding,netsh,Windows 7,Ssl Certificate,Wcf Binding,Netsh,我已按照中的说明进行操作。如中所述,当我尝试在Windows 7上使用netsh绑定证书时,失败如下 在窗户里 错误的来源是我直接从signroot.cert的证书文件中获取了指纹,该文件是从创建“受信任的根证书颁发机构”所需的第一个makecert命令创建的,该命令再次用于在第二个makecert命令中真正创建(并安装)自签名受信任证书 第二个makecert命令还将创建的证书安装在“证书(本地计算机)->个人->证书”节点中。必须再次刷新当前打开的MMC才能看到“本地主机”证书,指纹需要从此

我已按照中的说明进行操作。如中所述,当我尝试在Windows 7上使用netsh绑定证书时,失败如下

在窗户里
错误的来源是我直接从signroot.cert的证书文件中获取了指纹,该文件是从创建“受信任的根证书颁发机构”所需的第一个makecert命令创建的,该命令再次用于在第二个makecert命令中真正创建(并安装)自签名受信任证书

第二个makecert命令还将创建的证书安装在“证书(本地计算机)->个人->证书”节点中。必须再次刷新当前打开的MMC才能看到“本地主机”证书,指纹需要从此证书而不是从signroot.cert获取

如果情况仍然不是这样,则可能需要从M$安装此修补程序。


参考:

我注意到你的问题中有以下几点。它可能无法解决原始问题,但此处的语法不正确

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

实际上,这与刷新无关。我在同一个问题上浪费了太多时间。如果重新安装,则不会遇到此问题,但如果尝试以下操作,则会出现问题:

 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值,该命令将正常工作。

为了让我的IIS Express正确执行SSL,我一直在努力解决此问题。事实证明,我的证书位于受信任的根证书颁发机构存储中,而不是个人证书存储中。这就是我的工作原理:

  • 确保您的证书位于“证书(本地计算机)/个人/证书”中
  • netsh http add sslcert ipport=0.0.0:8732 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid='{00112233-4455-6677-8899-AABBCCDDEEFF}'
  • 已成功添加SSL证书
  • 使用MMC并将证书拖到您想要的任何地方

  • 我在端口绑定中找到了导致错误1312的4个可能原因:

    • SSL证书已损坏-您需要从证书存储中删除并重新添加。
    • SSL证书缺少私钥-您需要从证书存储中删除并重新添加完整的公钥/私钥证书,或者将私钥附加到证书。
    • 如果安装在2012R2的SP1之前版本上,则可能需要KB 981506。
    • 您可能已将SSL证书添加到用户存储中,而不是本地计算机证书存储-从用户存储中删除并添加到计算机存储中。
    我们遇到了同样的错误,经过长时间的工作,我们意识到netsh没有浏览所有本地计算机存储以查找由“certhash”参数标识的证书。默认情况下,它只在“个人”存储中搜索证书

    由于我们的证书不在“personal”存储中,而是在“Trusted Root Certification Authority”存储中,因此通过在netsh命令中添加“certstorename”参数解决了问题:

    C:\>netsh http add sslcert ipport=0.0.0.0:8732 certstorename=AuthRoot certhash=...  
    

    对我来说,关键是放弃使用IE进行导入,这是我通常做的事情

    使用mmc.exe,文件->添加/删除管理单元并添加“证书”。管理计算机帐户,然后管理“本地计算机”

    将根证书导入证书(本地计算机)/受信任的根证书颁发机构/证书

    将客户端证书导入到个人/证书中,然后执行netsh http add sslcert。

    “官方”(非自签名)证书(例如来自Thawte)导入到证书存储中:“受信任的根证书颁发机构”。
    如果netsh命令中没有传递参数“certstorename=”,netsh将接受表示“私有”存储的“MY”。
    要绑定官方证书,您必须添加:

    certstorename=Root
    
    到netsh命令


    另一件需要注意的事情是,从MMC控制台证书属性窗口复制/粘贴证书散列,也可能在散列的开始处带来一个有趣的字符。您不会看到它,因为该字符在您的文本编辑器可能使用的UTF-8编码中是不可见的

    Netsh没有帮助,因为它只是不断地失败,“参数不正确”,而没有透露哪个参数;)


    将编码更改为ANSI将显示字符,将其删除,它将像一个符咒一样工作

    感谢您发布此消息-对我来说非常有效。我没有刷新,因此我也在查看第一个证书的指纹。一旦我刷新并获得新指纹,一切都很好,并按预期添加。我最近遇到了此问题。我解决了我的问题如下:注意,{}是powershell中的子命令,这就是引用是必要的原因。没错,我有相同的错误,并用您的第二个建议解决了它,我删除了它,然后导入了包含公钥和私钥的.pfx。这是有问题的,因为您使用powershell,它对大括号的解释不同
     1. Import same certificate again
     2. You create a new certificate and try to bind it which has same parameters, namely the CN value.
    
    C:\>netsh http add sslcert ipport=0.0.0.0:8732 certstorename=AuthRoot certhash=...  
    
    certstorename=Root