IIS 7错误"指定的登录会话不存在.它可能已经终止." 使用https时

enb*_*081 61 asp.net iis ssl client-certificates

我正在尝试为我的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
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

有什么建议?

Mik*_*e L 67

我遇到了同样的问题,但以不同的方式修复了它.我相信我使用的帐户从我最初尝试设置证书的时间到我返回完成工作的时间发生了变化,从而产生了问题.问题是,我不知道,但我怀疑它与当前用户的某种哈希有关,并且在某些情况下由于用户被修改或重新创建等而不一致,等等.

为了解决这个问题,我从IIS和证书管理单元(对于当前用户和本地计算机)中删除了所有相关证书的引用:

IIS证书

mmc.exe  - >添加/删除管理单元,然后选择证书,然后选择本地计算机或当前用户

接下来,我将*.pfx文件导入MMC中的certs管理单元,并将其放在Local Computer\Personal节点中:

  1. 右键单击"个人"下的"证书"节点(在"本地计算机"下作为根)
  2. 所有任务 - >导入
  3. 通过向导导入*.pfx

从那时起,我就能够返回IIS并在服务器证书中找到它.最后,我去了我的网站,编辑了绑定并选择了正确的证书.它的工作原理是因为用户在整个过程中保持一致.

对于另一个答案中提到的问题,您不应该将其标记为可导出,因为这是一个主要的安全问题.您实际上允许任何能够获得具有类似权限的盒子的人随身携带您的证书并将其导入其他任何地方.显然这不是最优的.

  • 似乎遵循这些步骤(而不是直接导入服务器证书)也会引入中间证书,这似乎很重要。 (3认同)

Rom*_*kov 49

安全警告:复选框的真正含义是,无法读取证书的用户可以读取证书.比如用户运行IIS工作进程.在生产中使用另一个答案.

发生在我身上,并通过确保在导入时检查 "允许导出此证书"来修复:

                                            在此输入图像描述

(感谢这篇文章!)

  • 这不是安全隐患吗? (12认同)
  • 这是一个主要的安全风险.具有管理员权限的任何人都可以导出您的私钥 请改用Mike的答案. (6认同)
  • @romkyns你是对的,但你需要第三方工具才能做到这一点.当密钥可导出时,具有读取权限(可以使用MMC管理)的非管理用户也可以导出私钥.在这种情况下,它将包括IIS工作进程... (3认同)
  • @ aboy021:不,不.您输入的密码将再次用于加密证书,但您可以选择任何密码,并且不需要与用于导入证书的原始密码匹配. (2认同)

enb*_*081 10

这必定是某种IIS错误,但我找到了解决方案.

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.


小智 7

没有人可能会关心这个,但我刚刚遇到了IIS 7网站绑定这个问题.我修复它的方式是去证书颁发机构并找到发出问题的服务器证书.我验证了请求证书的用户帐户.我然后使用该帐户的RDP登录到IIS服务器.我只能使用该帐户重新绑定https协议.不需要出口,重新发行或扩展改变黑客.


小智 7

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


小智 7

根据MSDN 博客文章,当当前用户帐户无权访问文件夹“ C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys”下的私钥文件时,可能会发生这种情况。显然,这可以通过授予用户帐户/用户组对上述文件夹的完全访问权限来解决。

我遇到了同样的问题,只需重新导入 .pfx 文件并选中“允许导出此证书”复选框即可解决该问题。

进口证书

但是,此方法会带来安全风险 - 因为有权访问 IIS 服务器的任何用户都可以使用私钥导出您的证书。

就我而言,只有我可以访问我的 IIS 服务器 - 因此这并不是一个巨大的风险。


小智 6

由于错误地将证书导入当前用户个人证书存储区,我们遇到了同样的问题.将其从当前用户个人存储中删除并将其导入本地计算机个人证书存储解决了该问题.

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

小智 5

在我们的情况下出现此问题的原因是我们已将证书安装在虚拟机中并为其进行了进一步使用的映像.

从先前创建的映像创建另一个VM时,证书会发送该消息.

为避免这种情况,请确保在安装的每个新VM上安装证书.


use*_*250 5

就我而言,这是因为万维发布服务用户没有证书的权限。安装证书后,访问MMC中的证书模块并右键单击有问题的证书。从“所有任务”菜单中选择“管理私钥...”并添加上述用户。在我的例子中这是系统用户。


Ed *_*ves 5

我们发现了另一个原因。如果您使用 PowerShell 编写证书安装脚本并使用该Import-PfxCertificate命令。这将导入证书。但是,导入的证书无法绑定到 IIS 中的网站,并出现与此问题提到的相同错误。您可以使用此命令列出证书并查看原因:

certutil -store My
Run Code Online (Sandbox Code Playgroud)

这列出了您的个人存储中的证书,您将看到此属性:

Provider = Microsoft Software Key Storage Provider
Run Code Online (Sandbox Code Playgroud)

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

certutil -f -p password -importpfx My .\cert.pfx NoExport
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅本文:https://windowsserver.uservoice.com/forums/295065-security-and-assurance/suggestions/18436141-import-pfxcertificate-needs-to-support-legacy-priv