“参数不正确。”使用netsh http添加sslcert时出错

时间:2009-04-22 21:05:24

标签: ssl-certificate netsh

按照以下链接中的“如何:使用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指纹来自证书(本地计算机)>个人>证书文件夹中的证书。

生成了appid GUID。

我还需要解决哪些问题才能让它发挥作用?

19 个答案:

答案 0 :(得分:68)

在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>

答案 1 :(得分:39)

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

答案 2 :(得分:23)

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}'

以下是有关使用curley braces的PowerShell语法的一些信息:

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

答案 3 :(得分:13)

查看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
      ^

答案 4 :(得分:11)

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

我将值粘贴到记事本++中,选择“编码”&gt; '转换为ANSI',然后我手动删除了前缀'?'字符。然后,我将使用 clean 指纹值。

答案 5 :(得分:10)

  1. 将命令复制到记事本
  2. 将其另存为ANSI
  3. 关闭并重新打开文件
  4. 删除虚假?字符
  5. 从记事本复制到命令提示符并运行命令

答案 6 :(得分:5)

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

netsh http add iplisten ipaddress=0.0.0.0

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

答案 7 :(得分:4)

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

以下是一些原因:

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

2个SSL指纹应该在Personal中可用 - &gt;证书与localhost一起使用。

3 - 它应该是'ipport ='而非'ipport:'

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

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

6- SSL Cert应该有完整的字符,所有填充'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和端口,则需要将其删除。我发现它导致localhost,127.0.0.1和0.0.0.0出现问题。您需要在测试环境中仅注册0.0.0.0。使用以下命令删除可能已损坏的证书:

netsh http delete sslcert ipport=0.0.0.0:20001

答案 8 :(得分:4)

在我的情况下,问题是我遵循微软的问题,我从SSL窗口复制了指纹。问题在于这样做会在哈希开头复制不可打印的字符。

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

,则可以看到char

thumbprint with "?"

答案 9 :(得分:3)

使用序列号而不是指纹作为certhash参数将导致此错误,因为字符数不同。使用0填充会将错误更改为SSL证书添加失败,错误:1312

答案 10 :(得分:2)

先生,你有支持:而不是ipport =这很容易做,因为你跟着它用ip:port

另外,请注意{vs.&lt;或者(这也让我过去了。

答案 11 :(得分:2)

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

netsh http delete sslcert hostnameport=domainame.com:443

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

答案 12 :(得分:2)

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

我的certhash参数长度不足20个字节。我不得不在前面用零填充它以使其工作。

所以,而不是

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

certhash=00000000112233445566778899aabbccddeeff00

希望这有帮助。

答案 13 :(得分:1)

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

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

我无法解释为什么,但我想也许两次,还有其他错误。因为第三次发生在我身上,

3)我查看了我的CA(不是已发布的服务器证书)的指纹,然后从MMC再次复制它并且它有效。

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

我不知道,只是尝试经历我做的同样的事情。也许其中一个会起作用。最后,我怀疑我在certhash中进入虚假空间或角色。

答案 14 :(得分:1)

这可以在PowerShell commadline中使用:

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

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

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

变量只是为了方便起见。

答案 15 :(得分:0)

“ - ”并非无关紧要。 如果您的guid看起来不完全像这样,您将得到不正确的参数错误: {EDE3C891-306C-40FE-BAD4-895B236A1CC8} 与 EDE3C891306C40feBAD4895B236A1CC8 - &gt;错误 {EDE3C891306C40feBAD4895B236A1CC8} - &gt; WRONG

我也使用guid作为IIS的appid,而不是随机的。

答案 16 :(得分:0)

我必须通过删除localhost证书来破坏VS和IIS Express之间的关系。我真的被卡住了。该应用程序无法启动,我无能为力似乎纠正了这种断开(这需要我开始使用此线程)。

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

另外,请注意appid变量不是VS项目AppID的反映(或者至少不是必须的)。根据{{​​3}},它只是一个任意的GUID:

  

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

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

如果您遇到类似问题,祝您好运。我相信你。如果你感到迷茫和孤独,请打我。也许到那时我还能记住一些东西! :d

答案 17 :(得分:0)

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

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

netsh http add sslcert hostnameport="10.0.0.120:443"

而不是:

netsh http add sslcert ipport="10.0.0.120:443"

Cya!

答案 18 :(得分:0)

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

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

看起来像这样 .. certhash=dca41243... 实际上是 .. certhash="特殊字符"dca41243...