试图根据对问题的初步反馈稍微转移焦点。
在 DevOps 发布管道中,使用"管理 IIS 网站"任务,尝试使用通配符证书添加 https 绑定。证书位于本地计算机的证书存储中(使用 mmc 检查 ->添加管理单元"证书",选择"计算机帐户"和"本地计算机"(,在"Web 托管\证书"文件夹中。我认为这是从 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
的证书?我试图查找和理解有关此的文档,但失败了,可能是由于缺乏有关证书存储和相关术语的基本知识。
好的,所以经过几个小时的挖掘,我找到了答案,如下所示:
-
在 certmgr 中,文件夹实际上不是文件夹,而是证书存储。一点也不混乱。
子文件夹 "证书","证书吊销列表"等并不是真正的子文件夹,而是将条目分类到其类别中的一种方式。一点也不混乱。
显示为"个人"的证书存储在脚本上下文中表示为"MY"。不是很混乱,但这真正记录在哪里?
同样,显示为"Web Hosting"的证书存储可能表示为"WebHosting",在脚本上下文中没有空格。
IIS在"WebHosting"和"MY"中查找证书,但据我了解,"WebHosting"是首选。
Azure DevOps 发布管道的"管理 IIS 网站"任务被硬编码为仅在"MY"中查找。这在这里被报告为一个问题,但它被关闭了,并引用了 GitHub 存储库的所有(?Microsoft创作的任务。我在那里找不到相应的问题,所以我添加了一个。
实际的解决方案(解决方法(是将证书从"WebHosting"复制或移动到"MY",即在 certmgr 中将其从"Web Hosting\Certificate"拖到"个人",在这种情况下,一个名为"证书"的"子文件夹"神奇地出现。请注意,选择"虚拟主机"时证书不可见,您必须选择名为"证书"的"子文件夹",但您应该拖动到"个人"而不先添加"证书"子文件夹。真的非常一致,不是吗?
阅读Windows中证书的好地方似乎在这里,这实际上在评论中比投反对票和投票结束问题更有帮助。