DevOps,管理 IIS 网站任务,netsh 添加 sslcert,失败并显示错误 1312

Kje*_*lbe 2 ssl-certificate netsh iis-10 azure-devops azure-pipelines-release-pipeline

试图根据对问题的初步反馈稍微转移焦点。

在 DevOps 发布管道中,使用管理 IIS 网站任务,尝试使用通配符证书添加 https 绑定。证书位于本地计算机的证书存储区(使用 mmc 检查 -> 添加管理单元“证书”,选择“计算机帐户”和“本地计算机”),在文件夹“Web Hosting\Certificates”中。我认为这是从 IIS 中添加时它们最终的位置。

但是当运行管道时,它失败了,日志中有这个条目:

SSL Certificate add failed, Error: 1312
A specified logon session does not exist. It may already have been terminated.
Run Code Online (Sandbox Code Playgroud)

任务发出的实际命令行是(我匿名的):

"netsh" http add sslcert hostnameport=www.mydomain.se:443 certhash=*** appid={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} certstorename=MY
Run Code Online (Sandbox Code Playgroud)

正如评论中所指出的,certstorename显然应该为参数分配一个不同的值。美好的。

但是任务属性页面没有提供此参数的设置,那么我该如何更改它呢?我应该把它改成什么?

如果无法在任务中更改它,我应该将证书移到哪里以使任务能够找到它的值certstorename=MY?我试图找到并理解有关此的文档,但失败了,可能是由于缺乏关于证书存储的基本知识和相关术语。

Kje*_*lbe 6

好的,经过几个小时的挖掘,我找到了答案,如下:

  1. 在 certmgr 中,文件夹实际上不是文件夹,而是证书存储区。一点都不迷惑。

  2. 子文件夹“Certificates”、“Certificate Revocation List”等并不是真正的子文件夹,而是将条目分类到它们的类别中的一种方式。也完全不会混淆。

  3. 显示为“个人”的证书存储在脚本上下文中表示为“MY”。不是很混乱,但这真的记录在哪里?

  4. 类似地,显示为“Web Hosting”的证书存储可能表示为“WebHosting”,在脚本上下文中没有空格。

  5. IIS 在“WebHosting”和“MY”中查找证书,但据我所知“WebHosting”是首选。

  6. Azure DevOps 发布管道的“管理 IIS 网站”任务被硬编码为仅在“我的”中查看。这已在此处报告为一个问题,但它已关闭,并引用了所有(?)Microsoft 编写的任务的 GitHub 存储库。我没有在那里找到相应的问题,所以我添加了一个

  7. 实际的解决方案(解决方法)是将证书从“WebHosting”复制或移动到“MY”,即在 certmgr 中将它从“Web Hosting\Certificates”拖到“Personal”,在这种情况下,一个名为“Certificates”的“子文件夹”神奇地出现。Note that the cert is not visible when "Web Hosting" is selected, you have to select the "subfolder" called "Certificates", but you should drag to "Personal" without adding a "Certificates" subfolder there first. 真的很一致,不是吗?

一个阅读 Windows 中证书的好地方似乎在这里,实际上这在评论中比否决投票和投票结束问题更有帮助。