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

DevOps, Manage IIS Website task, netsh add sslcert, fails with error 1312

尝试根据对问题的初步反馈稍微转移注意力。

在 DevOps 发布管道中,使用管理 IIS 网站任务,尝试使用通配符证书添加 https 绑定。证书在本地计算机的证书存储中(使用 mmc 检查 -> 添加管理单元 "Certificates"、select "Computer account" 和 "Local computer"),在文件夹 "Web Hosting\Certificates".我认为这就是它们从 IIS 中添加时的最终位置。

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

SSL Certificate add failed, Error: 1312
A specified logon session does not exist. It may already have been terminated.

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

"netsh" http add sslcert hostnameport=www.mydomain.se:443 certhash=*** appid={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} certstorename=MY

如评论中所述,显然应该为 certstorename 参数分配不同的值。很好

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

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

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

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

  2. 子文件夹 "Certificates"、"Certificate Revocation List" 等并不是真正的子文件夹,而是一种将条目分类的方式。一点也不混乱。

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

  4. 同样,显示为 "Web Hosting" 的证书存储可能在脚本上下文中表示为 "WebHosting" 而没有 space。

  5. IIS 在 "WebHosting" 和 "MY" 中查找证书,但据我了解 "WebHosting" 是首选。

  6. Azure DevOps 发布管道的 "Manage IIS Website" 任务被硬编码为仅在 "MY" 中查找。这已被报告为问题 here, but it was closed with a ref to the GitHub repo for all(?) Microsoft-authored tasks. I failed to find a corresponding issue there so I added one.

  7. 实际解决方案(解决方法)是将证书从 "WebHosting" 复制或移动到 "MY",即在 certmgr 中将其从 "Web Hosting\Certificates" 拖到 "Personal",在这种情况下,一个名为 "Certificates" 的 "subfolder" 神奇地出现了。请注意,当 "Web Hosting" 被 selected 时,证书不可见,您必须 select 调用 "Certificates" 的 "subfolder",但您应该拖动到 "Personal" 而不是首先在那里添加 "Certificates" 子文件夹。真的很连贯不是吗?

阅读 Windows 中的证书的好地方似乎是 here,这实际上在评论中比投反对票和投票结束问题更有帮助。