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

按照以下链接中的“如何使用SSL证书configuration端口”中的说明进行操作: http : //msdn.microsoft.com/zh-cn/library/ms733791.aspx ,我在命令行(duh)中input了此命令, :

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

还有什么错误,我需要解决这个工作?

在PowerShell中,input如下。 首先进入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> 

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

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

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

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

做到这一点(注意单引号):

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

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

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

看看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 ^ 
  1. 将该命令复制到记事本中
  2. 将其另存为ANSI
  3. closures并重新打开该文件
  4. 删除假? 人物
  5. 从记事本复制到命令提示符并运行该命令

从Certificate \ Details \ Thumbprint中复制证书指纹会预先指定字节值'3f38',当转换为ANSI时显示为'?'。 这个隐藏的价值导致了我的问题。

我把值粘贴到记事本++,select“编码”>“转换为ANSI”,然后我手动删除了前缀'?' 字符。 然后我会有一个干净的指纹值使用。

在我的情况下,问题是我跟随微软的inscructions我从SSL窗口复制拇指指纹。 问题是这样做在散列的开始复制不可打印的字符。

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

用“?”指纹

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

 netsh http add iplisten ipaddress=0.0.0.0 

那么netsh http add sslcert命令开始正常运行。

我跑过这个问题,同时寻找解决问题的办法。 我终于find了一个为我工作的人。

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

所以,而不是

我不得不这样做:

certhash=00000000112233445566778899aabbccddeeff00

希望这可以帮助。

主席先生,你有支持:而不是支持=这是很容易做,因为你跟随与IP:端口

另外,要小心{与<或<,(这也使我在过去。

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

小心,如果你有一个DNS名称作为绑定使用主机名称而不是支持

 netsh http delete sslcert hostnameport=domainame.com:443 

我必须删除Office 365单一login的ADFS代理绑定。

有几件事我做了,我认为它得到相同的工作后“参数是不正确的”。 错误。

1)重新启动机器,并再次做到这一点。 它第一次工作。 2)确保我在c:\并且在重新启动后再次执行命令不起作用

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

3)我通过我的CA的指纹(而不是颁发的服务器证书),并从MMC复制它,它的工作。

发生这种情况后,我再次删除它(netsh http删除sslcert支持= 0.0.0.0 :),并重复使用服务器证书的指纹进程。 这件事情再次奏效。

我不知道,只是尝试通过我做的同样的事情。 也许其中一个会工作。 最后,我怀疑我是在certhash中input了一个虚假的空间或angular色。

这将从PowerShell commadline工作:

 $AppId = [Guid]::NewGuid().Guid $Hash = "209966E2BEDA57E3DB74FD4B1E7266F43EB7B56D" netsh http add sslcert hostname=localhost:8088 certhash=$Hash appid=`{$AppId`} certstorename my 

重要的细节是用反引号(`)转义每个{},而不要忽略certstorename。 否则netsh提出了一个错误87。

这些variables只是为了方便。

“ – ”不是无关紧要的。 如果你的guid看起来不像这样,你会得到不正确的参数错误:{EDE3C891-306C-40fe-BAD4-895B236A1CC8} vs. EDE3C891306C40feBAD4895B236A1CC8 – > WRONG {EDE3C891306C40feBAD4895B236A1CC8} – > WRONG

另外我使用guid的IIS的appid,而不是一个随机的。

我必须通过删除本地主机证书来结束VS和IIS Express之间的关系。 我真的被困住了。 该应用程序不会启动,我似乎无法纠正这种断开连接(这是要带我到这个线程开始)。

我终于可以通过更改非SSL URL(.NET Core应用程序中的launchSettings.json )上的分配端口并禁用项目设置中的“ 启用S​​SL”checkbox并重新启动来解决问题。 然后,我能够添加我新创build的证书与此命令: netsh http add sslcert ipport=0.0.0.0:44392 appid={214124cd-d05b-4309-9af9-9caa44b2b74b} certhash=A0ADC1A1002F288CCFA96261F9F352D28C675A90

另外,请注意, appidvariables不是VS项目AppID的反映(或者至less不是必须的)。 根据Scott Hanselmann的说法,这只是一个随意的GUID:

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

这对我来说并不明显,并且使得处理参数是不太明确的错误的错误。

如果您遇到类似的问题,祝您好运。 我相信你。 如果你感到迷茫和孤独,请平息我。 也许我可以记得一些东西! :d

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

这是一些原因:

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

在个人 – >证书中应该提供2个SSL指纹来与本地主机一起工作。

3 – 应该是'支持='不'支持:'

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

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} 

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

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

 netsh http show sslcert 

如果证书已经注册了类似的IP和端口,则需要将其删除。 我发现它与localhost,127.0.0.1和0.0.0.0的问题。 您只需在您的testing环境中注册0.0.0.0。 使用以下命令删除潜在的损坏的证书:

 netsh http delete sslcert ipport=0.0.0.0:20001 

在这个线程中添加我的解决scheme可能是有用的:

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

netsh http add sslcert hostnameport="10.0.0.120:443"

代替 :

netsh http add sslcert ipport="10.0.0.120:443"

Cya!