azure-devops - 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
?我试图查找和理解有关此的文档,但失败了,可能是由于缺乏有关证书存储和相关术语的基本知识。
解决方案
好的,经过几个小时的挖掘,我找到了答案,如下:
在 certmgr 中,文件夹实际上不是文件夹,而是证书存储。一点也不混乱。
子文件夹“Certificates”、“Certificate Revocation List”等并不是真正的子文件夹,而是一种将条目分类到其类别中的方式。一点也不混乱。
显示为“个人”的证书存储在脚本上下文中表示为“我的”。并没有真正令人困惑,但这真正记录在哪里?
类似地,显示为“Web Hosting”的证书存储在脚本上下文中可能表示为“WebHosting”,没有空格。
IIS 在“WebHosting”和“MY”中查找证书,但据我了解,“WebHosting”是首选。
Azure DevOps 发布管道的“管理 IIS 网站”任务被硬编码为仅在“MY”中查看。这已被报告为一个问题here,但它已关闭并引用了 GitHub 存储库的所有(?)Microsoft 编写的任务。我没有在那里找到相应的问题,所以我添加了一个.
实际的解决方案(解决方法)是将证书从“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,这实际上在评论中比投反对票和投票结束问题更有帮助。
推荐阅读
- javascript - Typescript 触发事件中的测验无法正常工作
- emacs - 如何配置带有 lambda 的钩子?(保存参数以在 lambdas 中使用)
- sql - 如何查询 SYS 模式表中的列?
- javascript - Angular 7“期望'样式'是一个字符串数组”
- node.js - 导出模块中的访问函数
- python - 如何将图像序列输入卷积层并在之后应用 conv-lstm 单元?
- c# - 如何从我的 asp:Button 的 OnCommand 中的另一个文件调用方法?ASP.NET C#
- ruby-on-rails - 设置 simple_form 关联项输入或标签类
- prolog - 如何将大写输入转换为小写?
- python - 递归 collections.defaultdict 初始化