使用"netsh http add sslcert"出现“参数不正确”的错误

71

按照如何使用SSL证书配置端口中的说明,我在命令行中输入了以下命令(当然):

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

输出:

The parameter is incorrect.

从证书的 计算机本地(Certificates (Local Computer))个人(Personal)证书(Certificates folder)文件夹中获取了我的certhash指纹。

生成了appid GUID。

还有什么其他错误需要我解决才能使其正常工作?


3
在PowerShell中正确调用外部程序的有用信息在这里...http://edgylogic.com/blog/powershell-and-external-commands-done-right/ - andyb
2
我意识到这一切都是因为我的顺序问题!你必须在certhash之前放置appid。就是这么愚蠢。 - Alexandru
9
对我来说,从Windows证书管理器中复制和粘贴的cert hash前面有一些奇怪的字符-确保它只是字母数字且没有奇怪的前导字符。 - Jacek Gorgoń
1
@JacekGorgoń 是的,我也是。可能是零宽空格 - Uwe Keim
在我的情况下,我收到了“参数不正确”的错误,因为我将certhashappid值包含在单引号中(')。删除单引号后,一切顺利进行。 - Uwe Keim
显示剩余2条评论
21个回答

3

这对我很有用:

我的certhash参数不足20个字节。 我必须在前面填充零以使其正常工作。

所以,我不是这样写的:

certhash=112233445566778899aabbccddeeff00,而是这样做:

certhash=00000000112233445566778899aabbccddeeff00


3
使用序列号代替Thumbprint作为certhash参数会导致错误,因为字符数量不同。用0进行填充将会改变错误为:

SSL证书添加失败,错误:1312


这个回答解决了问题吗(不是反问)?也许可以扩展一下你的回答,以使其更清晰明了?(但请勿添加“编辑:”,“更新:”或类似内容——回答应该看起来像是今天写的)。 - Peter Mortensen

2
您的文本需要翻译为:

您使用了ipport:而不是ipport=,这很容易发生,因为您在后面跟着ip:port

此外,请注意{<(之间的区别。这也曾经让我困扰过。


1

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

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

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

重要的细节是使用反引号(`)转义每个{ },不要省略certstorename。否则,netsh会报错87。
变量仅用于方便起见。

谢谢!在我的测试中,ipport= 可以正常工作,但 hostnameport= 不能。添加 certstore=my 解决了 hostnameport= 的问题。奇怪! :-) - Nicholas Blumhardt
你是不是想说 $AppId 而不是 $Guid - Michael Blake

1
这实际上是 cmd 与 PowerShell 的语法问题。将命令更改为:
netsh http add sslcert ipport=0.0.0.0:8085 certhash=4da5af739d6745de4e38fea9574cdaa79032ea14 appid="{7BBE87B9-D98F-41D7-B726-FC5E1300ED28}"

将在两个终端中均可使用。


1

在遇到相同的“参数不正确”错误后,我做了一些事情,认为这些事情让它起作用了。

  1. 我重新启动了机器并再次尝试。第一次就成功了。

  2. 我确保我在C:\中,并在重新启动后再次发出命令

    我无法解释为什么,但我认为可能两次都有其他问题。因为当这种情况第三次发生在我身上时:

  3. 我通过我的CA(而不是已发行的服务器证书)的拇指印再次复制它,并从MMC中再次复制它,然后它就可以工作了。

在此之后,我再次将其删除(netsh http delete sslcert ipport=0.0.0.0:),并使用服务器证书的拇指印重复该过程。可恶的东西又起作用了。

我不知道。只需尝试执行与我相同的操作。也许其中一个会起作用。最后,我怀疑我在certhash中输入了虚假的空格或字符。


0

我一定是在删除localhost证书时搞砸了Visual StudioIIS 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变量不反映您的Visual Studio项目AppID(或者至少不必如此)。根据Scott Hanselmann的说法,这只是一个任意的GUID:

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

这对我来说并不明显,使得处理“参数不正确”错误变得更加难以理解。

0

"-" 不是无关紧要的。

如果您的 GUID 不完全像这样,您将收到错误的参数错误:

{EDE3C891-306C-40fe-BAD4-895B236A1CC8}

EDE3C891306C40feBAD4895B236A1CC8 -> 错误
{EDE3C891306C40feBAD4895B236A1CC8} -> 错误

此外,我正在使用 GUID 作为 IIS 的 appid,而不是随机的一个。


0

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

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

它看起来像这样:

.. certhash = dca41243 ...

实际上是

.. certhash =“特殊字符”dca41243 ...


0
我试图使用hostnameport参数添加IP地址和端口,结果出现了参数错误。 netsh http add sslcert hostnameport="10.0.0.120:443" 应该改为: netsh http add sslcert ipport="10.0.0.120:443"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接