当使用https时,IIS 7出现错误“指定的登录会话不存在。可能已经终止。”

98

我试图为我的asp.net网站创建客户端证书认证。

为了创建客户端证书,我需要首先创建一个证书颁发机构:

makecert.exe -r -n “CN=My Personal CA” -pe -sv MyPersonalCA.pvk -a sha1 -len 2048 -b 01/01/2013 -e 01/01/2023 -cy authority MyPersonalCA.cer

然后,我需要将其导入到IIS 7中,但由于它只接受 .pfx 格式,所以我需要先转换一下格式。

pvk2pfx.exe -pvk MyPersonalCA.pvk -spc MyPersonalCA.cer -pfx MyPersonalCA.pfx

在导入 MyPersonalCA.pfx 后,我尝试为我的网站添加 https 网站绑定,并选择上述 SSL 证书,但我收到以下错误:

在此输入图片描述

有什么建议吗?


我有一些问题。 - Adnane ARHARBI
24个回答

94
我遇到了同样的问题,但是采用了不同的解决方法。我相信我最初尝试设置证书的帐户与完成工作时使用的帐户不同,因此导致了这个问题。具体问题是什么我不确定,但我怀疑它与当前用户的某种哈希有关,在某些情况下不一致,比如用户被修改或重新创建等。
为了解决这个问题,我从IIS和证书管理器(对于当前用户和本地计算机)中删除了与该证书相关的所有引用: IIS certificates mmc.exe --> add/remove snap-ins, choose certificates then local computer or current user 接下来,我将*.pfx文件导入到MMC的证书管理器中,并将其放置在本地计算机\个人节点中:
  1. 右键单击“本地计算机”下的“个人”节点下的“证书”节点
  2. 选择“所有任务”->“导入”
  3. 按照向导导入* .pfx文件
从那时起,我就能够返回到IIS并在服务器证书中找到它了。最后,我进入我的站点,编辑绑定并选择正确的证书。它之所以有效,是因为用户在整个过程中保持一致。
至于另一个答案提到的问题,你不应该把它标记为可导出,因为那是一个严重的安全问题。你实际上允许任何能够获取相似权限的人将你的证书带走并在其他地方导入它。显然这是不理想的。

1
在我的情况下,问题是我将一个 *.cer 文件导入了证书存储中。请确保将一个 *.pfx 文件导入证书存储中。 - MarioVW
3
似乎按照这些步骤操作(而不是直接导入到服务器证书中)会同时带入中间证书,这似乎很重要。 - Katstevens
我只能说感谢 @Mike L -- 这真的是唯一对我有效的方法。 - pim
我使用了这个解决方案。然而,GoDaddy只给了我们一个新证书的*.crt文件,所以要使用openssl从先前的证书中提取私钥,然后从此(和.crt)创建一个.pfx*并导入它。 - Jonathan Williams
1
添加另一个可能的解决方案。对我来说,这是因为我在IIS中导入了证书,而不是从Windows证书管理器中导入。 - ryanulit
检查权限并确保“SYSTEM”对文件具有完全控制权。可以通过证书存储MMC(计算机)来完成此操作 --> 选择证书 --> 右键单击选择管理密钥并添加用户。我还尝试添加了IIS应用程序池用户和服务账户。但是添加“system”用户解决了问题。 - undefined

80

安全警告:勾选该复选框的真正含义是证书可以被不应该读取它的用户读取,例如运行IIS工作进程的用户。在生产环境中,请改用其他答案

我也遇到了这个问题,并通过确保导入证书时勾选“允许导出此证书”来解决

                                           enter image description here

(感谢这篇文章!)


13
这不是安全风险吗? - lanoxx
@lanoxx,您仍需要密码才能导出证书,因此它并不完全没有安全性。 - aboy021
2
@aboy021:不需要。您输入的密码将用于再次加密证书,但您可以选择任何密码,无需与导入证书时使用的原始密码匹配。 - lanoxx
7
这是一个重大的安全风险。任何拥有管理权限的人都可以导出您的私钥。请使用Mike L的答案。 - Steven De Kock
3
@romkyns 您是正确的,但您需要第三方工具才能这样做。当密钥可导出时,具有读取权限的非管理员用户(可以使用MMC进行管理)也可以导出私钥。在这种情况下,它将包括IIS工作进程... - Steven De Kock
显示剩余3条评论

11

这一定是某种IIS的bug,但我找到了解决方法。

1- 从IIS中导出 MyPersonalCA.pfx

2- 将其转换为.pem格式:

openssl pkcs12 -in MyPersonalCA.pfx -out MyPersonalCA.pem -nodes

3- 再将其转换回.pfx格式:

openssl pkcs12 -export -in MyPersonalCA.pem -inkey MyPersonalCA.pem -out MyPersonalCA.pfx

4- 将其导入回IIS即可。


10
我们遇到了同样的问题,原因是将证书错误地导入到了“当前用户个人”证书存储中。将其从“当前用户个人”存储中删除,并导入到“本地计算机个人”证书存储中解决了这个问题。

2
我认为这通常是正确的答案,因为这是一个非常容易犯的错误。如果您使用Certmgr.msc启动证书管理器,则会获得个人存储而不是计算机存储。这意味着登录方式不同。相反,您必须使用mmc,然后添加允许您选择计算机存储的快照。 - OnceUponATimeInTheWest

7
根据MSDN博客文章,当当前用户帐户没有访问位于“C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys”文件夹下的私钥文件的权限时,就会出现此问题。显然,授予用户帐户/用户组上述文件夹的完全访问权限可以解决此问题。
我遇到了同样的问题,并成功地通过重新导入带有选中允许导出此证书复选框的.pfx文件来解决它。 < p >我的情况下,只有我能够访问我的IIS服务器-因此这不是一个巨大的风险。

然而,这种方法存在安全风险-因为任何可以访问您的IIS服务器的用户都将能够导出带有私钥的证书。

Import Certificate


7

不要从IIS导入证书,而是从MMC中导入。然后在IIS中进行绑定。


我的问题是IIS没有导入完整的证书链(即父证书),而只有子证书。 - ErikusMaximus
这个答案对我来说是最简单的解决方案,虽然我仍然不确定出了什么问题。 - Etienne
这就是解决我的问题的答案。 - Steve

7

可能没有人再关心这个问题了,但是我刚刚面临了我的IIS 7网站绑定的问题。 我解决的方法是去证书颁发机构并找到颁发给出现问题的服务器的证书。 我验证了请求证书的用户帐户。 然后使用该帐户通过RDP登录到IIS服务器。 只有使用该帐户才能重新绑定https协议。 不需要导出、重新发行或更改扩展。


5
在我们的情况下,出现了这个问题,因为我们在虚拟机中安装了证书并制作了一个镜像以供进一步使用。
当从先前创建的映像创建另一个虚拟机时,证书会发送消息。
为避免这种情况,请确保在每个新安装的虚拟机上安装证书。

5
我们发现了另一个原因。如果您正在使用PowerShell编写证书安装脚本并使用Import-PfxCertificate命令,则会导入证书。然而,导入的证书不能与IIS中的网站绑定,出现与此问题相同的错误。您可以使用以下命令列出证书并查看原因:
certutil -store My

这个列表显示了您个人存储中的证书,您会看到以下属性:

Provider = Microsoft Software Key Storage Provider

这个存储提供程序是较新的CNG提供程序,不受IIS或.NET支持。您无法访问密钥。因此,您应该使用certutil.exe在脚本中安装证书。使用证书管理器MMC插件或IIS导入也可以,但对于脚本编写,请按照以下方式使用certutil:

certutil -f -p password -importpfx My .\cert.pfx NoExport

更多信息请参见此文章:https://windowsserver.uservoice.com/forums/295065-security-and-assurance/suggestions/18436141-import-pfxcertificate-needs-to-support-legacy-priv


1
谢谢!这比我用PowerShell做的简单了1000倍! - Humberto Garza

4

在我的情况下,这是因为World Wide Publishing Service用户没有证书的权限。在安装证书后,在MMC中访问证书模块并右键单击存在问题的证书。从“所有任务”菜单中选择“管理私钥...”,然后添加上述用户。在我的情况下,这个用户是SYSTEM用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接