首页 > 解决方案 > DevOps,管理 IIS 网站任务,netsh 添加 sslcert,失败并出现错误 1312

问题描述

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

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

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

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

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

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

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

标签: azure-devopsssl-certificateazure-pipelines-release-pipelineiis-10netsh

解决方案


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

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

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

  3. 显示为“个人”的证书存储在脚本上下文中表示为“我的”。并没有真正令人困惑,但这真正记录在哪里?

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

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

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

  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 中的证书的好地方似乎是here,这实际上在评论中比投反对票和投票结束问题更有帮助。


推荐阅读