66

按照此链接中有关“如何:使用 SSL 证书配置端口”的说明:http: //msdn.microsoft.com/en-us/library/ms733791.aspx,我在命令行上输入了此命令(duh) :

> netsh http add sslcert ipport:10.141.146.227:7001 certhash=5d48e604007b867ae8a69260a4ad318d2c05d8ff appid={EDE3C891-306C-40fe-BAD4-895B236A1CC8}
The parameter is incorrect.

我的certhash指纹取自证书(本地计算机)>个人>证书文件夹中的证书。

appidGUID 已生成。

我还需要解决什么问题才能使其正常工作?

4

20 回答 20

93

在 PowerShell 中只需键入如下。首先进入 netsh http 模式,然后添加 sslcert。它对我有用。

>netsh

netsh>http

netsh http>add sslcert ipport=0.0.0.0:13286 appid='{a5455c78-6489-4e13-b395-47fbdee0e7e6}' certhash=<thumprint without space>
于 2011-01-10T06:51:14.183 回答
46

此问题的另一个可能原因是从证书管理器页面复制隐藏字符。如果您从证书中的详细信息窗口复制指纹,请在开始时检查隐藏字符(使用箭头键!)。这就是“参数不正确”错误消息的原因。

于 2013-10-07T21:53:40.393 回答
37

ps1 文件中的 PowerShell 命令行和 PowerShell 脚本会认为 curley-braces {...} 是 PowerShell 指令。所以引用他们。否则,如您所见,PowerShell 会感到困惑。

所以而不是这个(你发现失败):

netsh http add sslcert ipport:10.141.146.227:7001 certhash=5d48e604007b867ae8a69260a4ad318d2c05d8ff appid= {EDE3C891-306C-40fe-BAD4-895B236A1CC8} 

这样做(注意单引号):

netsh http add sslcert ipport:10.141.146.227:7001 certhash=5d48e604007b867ae8a69260a4ad318d2c05d8ff appid= '{EDE3C891-306C-40fe-BAD4-895B236A1CC8}'

以下是有关带花括号的 PowerShell 语法的一些信息:

http://danv74.wordpress.com/2012/07/12/powershell-and-the-hidden-art-of-curly-braces-and-other-braces/

于 2014-03-08T17:22:45.290 回答
15

查看 netsh 命令的语法,我看到了这个例子:

add sslcert ipport=1.1.1.1:443 certhash=0102030405060708090A0B0C0D0E0F1011121314 appid={00112233-4455-6677-8899-AABBCCDDEEFF}

从表面上看,你的问题是你正在做

ipport:10.141.146.227:7001
      ^

ipport=10.141.146.227:7001
      ^
于 2009-05-05T21:12:58.647 回答
11

从 Certificate\Details\Thumbprint 复制证书指纹会在指纹值前面加上字节“3f38”,当转换为 ANSI 时,会显示为“?”。这个隐藏的价值给我带来了问题。

我将值粘贴到记事本++中,选择“编码”>“转换为 ANSI”,然后我手动删除了前面的“?” 人物。然后,我将使用一个干净的指纹值。

于 2016-09-16T07:59:55.443 回答
10
  1. 将命令复制到记事本中
  2. 保存为 ANSI
  3. 关闭并重新打开文件
  4. 去除假货?人物
  5. 从记事本复制到命令提示符并运行命令
于 2015-10-04T05:14:31.767 回答
10

我多次遇到这个问题,每次都有不同的原因,所以我决定写下对我有用的原因和确切的命令。

以下是一些原因:

1- 从 Windows 对话框复制和粘贴证书指纹会在您的哈希中添加一个隐藏字符。它在文本编辑器中不可见,但您需要删除该字符才能使其工作。

2- SSL 指纹应该在 Personal -> Certificates 中可用,以便与 localhost 一起使用。

3-应该是 'ipport=' 而不是 'ipport:'

4- SSL 证书应该有一个私钥。如果您使用的是证书管理控制台,请确保它在证书视图上有一个小钥匙图标。

5- GUID 应以完整格式定义:{a10b0420-a21f-45de-a1f8-818b5001145a},并且在 powershell 中应有一个引号:'{a10b0420-a21f-45de-a1f8-818b5001145a}' 因此,PowerShell 格式不同从命令行。

6- SSL 证书应该有完整的字符,所有填充 '0' 并且没有任何空格。您可以复制指纹(小心删除特殊隐藏字符)并删除空格,或者如果证书已注册到另一个地址,则使用“netsh http show sslcert”获取值。

什么对我有用:

这是在 powershell 中对我有用的确切命令:

netsh http add sslcert ipport=0.0.0.0:20001 certhash=5304c034548b27c72b5e9c14f0c7bdd13e52d760 appid='{a10b0420-a21f-45de-a1f8-818b5001145a}'

这是命令行语句:

netsh
http add sslcert ipport=0.0.0.0:20001 certhash=5304c034548b27c72b5e9c14f0c7bdd13e52d760 appid={a10b0420-a21f-45de-a1f8-818b5001145a}

更多命令可帮助您避免相关问题:

使用以下命令查看当前注册的证书。您可以从那里找到并重用 certhash 或您的 appid:

netsh http show sslcert

如果证书已经注册了类似的 ip 和 port,则需要将其删除。我发现它会导致 localhost、127.0.0.1 和 0.0.0.0 出现问题。您只需要在测试环境中注册 0.0.0.0。使用以下命令删除可能损坏的证书:

netsh http delete sslcert ipport=0.0.0.0:20001
于 2017-07-13T17:17:45.863 回答
5

当我刚开始使用 http.sys 时,我也遇到了这个错误。我跑了之后:

netsh http add iplisten ipaddress=0.0.0.0

然后netsh http add sslcert命令开始正常运行。

于 2009-07-16T15:51:00.727 回答
5

就我而言,问题是我按照微软的指令从 SSL 窗口复制了指纹。问题是这样做会在哈希的开头复制不可打印的字符。

尝试将指纹粘贴到记事本中,然后按主页并按删除两次(直到指纹中的第一个字符被删除)并重新添加字符。如果您复制指纹并将其粘贴到 cmd 中,您可以看到字符:

指纹与

于 2013-11-21T16:36:57.710 回答
3

我在寻找问题的解决方案时遇到了这个问题。我终于找到了一个适合我的。

我的certhash参数不完全是 20 个字节长。我必须在前面用零填充它才能让它工作。

所以,而不是

certhash=112233445566778899aabbccddeeff00,我必须这样做:

certhash=00000000112233445566778899aabbccddeeff00.

希望这可以帮助。

于 2011-04-24T18:54:29.073 回答
3

certhash 参数使用序列号而不是指纹会因为字符数量的不同而导致此错误。用 0 填充会将错误更改为 SSL Certificate add failed, Error: 1312

于 2015-05-12T21:26:25.413 回答
2

先生,你有 ipport: 而不是 ipport= 这很容易做到,因为你遵循 ip:port

另外,请注意 { 与 < 或 (,这也让我过去。

于 2014-11-05T21:05:54.560 回答
2

请注意,如果您将 DNS 名称用作绑定,请使用hostnameport而不是ipport

netsh http delete sslcert hostnameport=domainame.com:443

我不得不删除 Office 365 单点登录的 ADFS 代理绑定。

于 2016-06-03T13:14:32.510 回答
1

我做了一些事情,我认为在得到相同的“参数不正确”后它可以工作。错误。

1)重新启动机器并再次执行。它第一次起作用。2)确保我在c:\并在重新启动后再次输入命令不起作用

我无法解释原因,但我认为可能两次,还有其他问题。因为这是第三次发生在我身上,

3)我检查了我的 CA(不是颁发的服务器证书)的指纹并从 MMC 再次复制它并且它工作。

发生这种情况后,我再次将其删除(netsh http delete sslcert ipport=0.0.0.0:) 并使用服务器证书的指纹重复该过程。这该死的东西又起作用了。

我不知道,只是尝试经历我做过的同样的事情。也许其中之一会起作用。最后,我怀疑我在 certhash 中输入了虚假的空格或字符。

于 2009-05-05T20:31:33.143 回答
1

这实际上是 cmd vs Powershell 的语法问题。将命令更改为

netsh http add sslcert ipport=0.0.0.0:8085 certhash=4da5af739d6745de4e38fea9574cdaa79032ea14 appid="{7BBE87B9-D98F-41D7-B726-FC5E1300ED28}" 

将在两个终端上工作。

于 2021-11-17T17:36:06.927 回答
1

这将在 PowerShell 命令行中起作用:

$AppId = [Guid]::NewGuid().Guid
$Hash = "209966E2BEDA57E3DB74FD4B1E7266F43EB7B56D"

netsh http add sslcert hostname=localhost:8088 certhash=$Hash appid=`{$AppId`} certstorename my

重要的细节是使用反引号 (`) 转义每个 {},并且不要省略 certstorename。否则 netsh 会引发错误 87。

变量只是为了方便。

于 2017-06-18T14:12:36.493 回答
0

“-”不是无关紧要的。如果您的 guid 看起来不完全像这样,您将收到不正确的参数错误:{EDE3C891-306C-40fe-BAD4-895B236A1CC8} 与 EDE3C891306C40feBAD4895B236A1CC8 -> 错误 {EDE3C891306C40feBAD4895B236A1CC8} -> 错误

我也将 guid 用于 IIS 的 appid,而不是随机的。

于 2013-09-20T09:28:39.133 回答
0

我有隐藏的问题,只显示在 powershell 中,而不是命令提示符。

我从证书中复制了指纹并删除了记事本++中的所有空格,但它前面仍然有一个隐藏字符

看起来像这样 .. certhash=dca41243... 实际上是 .. certhash="special char"dca41243...

于 2021-04-08T14:07:36.837 回答
0

在此线程中添加我的分辨率可能很有用:

我试图添加一个带有 hostnameport 参数的 ippport,所以我得到了这个参数错误。

netsh http add sslcert hostnameport="10.0.0.120:443"

代替 :

netsh http add sslcert ipport="10.0.0.120:443"

啊!

于 2017-11-16T09:36:01.583 回答
0

我一定是通过删除本地主机证书来破坏 VS 和 IIS Express 之间的关系。我真的被困住了。该应用程序无法启动,而且我似乎无能为力来纠正这种断开连接(这是想把我带到这个线程开始)。

通过更改非 SSL URL(launchSettings.json在 .NET Core 应用程序中)上的分配端口并在项目设置中禁用Enable SSL复选框并重新开始,我终于能够解决这个问题。然后我可以使用以下命令添加我新创建的证书:netsh http add sslcert ipport=0.0.0.0:44392 appid={214124cd-d05b-4309-9af9-9caa44b2b74b} certhash=A0ADC1A1002F288CCFA96261F9F352D28C675A90.

另外,请注意,该appid变量不是您的 VS 项目 AppID 的反映(或者至少不必如此)。根据Scott Hanselmann的说法,这只是一个任意的 GUID :

AppId 并不重要,它只是一个 GUID。这告诉 HTTP.SYS 我们正在使用该证书。

这对我来说并不明显,并且处理参数不正确的错误更加模糊。

如果您遇到类似的问题,祝您好运。我相信你。如果您感到迷路和孤独,请联系我。也许到那时我能记住一些事情!:D

于 2017-07-05T20:54:44.527 回答