当证书位于使用 netsh 的自定义位置时,如何将证书注册到端口

Posted

技术标签:

【中文标题】当证书位于使用 netsh 的自定义位置时,如何将证书注册到端口【英文标题】:How to register a certificate to a port when the cert is in a custom location using netsh 【发布时间】:2010-11-17 18:36:58 【问题描述】:

我的证书存储在“证书(本地计算机)”而不是“个人”下的自定义存储中。

通常,如果证书位于个人下,我只需使用 C:>netsh http add sslcert ipport:0.0.0.0: certash= appid= certstorename=MY

如果未指定,则默认情况下已假定 certstorename=MY。

这工作正常,直到我们被要求将证书存储在自定义存储中,而不是现有的个人、受信任的人、受信任的发布者等等等。

如果我们将新存储称为“我的证书存储”,那么新的 netsh 命令会是什么样子? 单词“MY”如何映射到“Personal”商店?有没有可以映射这些的字典?

我检查了 System.Security.Cryptography.X509Certificates 命名空间,并且存在一个名为 StoreName 的枚举,具有以下值:

AddressBook - 其他用户的 X.509 证书存储。 AuthRoot - 第三方证书颁发机构 (CA) 的 X.509 证书存储。 CertificateAuthority - 中间证书颁发机构 (CA) 的 X.509 证书存储。 不允许 - 已撤销证书的 X.509 证书存储。 我的 - 个人证书的 X.509 证书存储。 Root - 受信任的根证书颁发机构 (CA) 的 X.509 证书存储。 TrustedPeople - 用于直接受信任的人员和资源的 X.509 证书存储。 TrustedPublisher - 直接受信任的发布者的 X.509 证书存储。

我在 netsh 命令上尝试了所有这些作为 certstorename,但我总是收到此错误:

SSL 证书添加失败,错误:1312 指定的登录会话不存在。它可能已经被终止了。

【问题讨论】:

我看到了完全相同的问题 【参考方案1】:

您尝试做的似乎是正确的。对于与您的症状完全匹配的问题,您能否在应用修补程序 http://support.microsoft.com/kb/981506 后重试。

【讨论】:

【参考方案2】:

打开您的证书并仔细检查它是否真的包含 PrivateKey。根据您导出/导入它的方式,它可能已被截断为仅公开的数据。

在资源管理器中,只需双击并检查“此证书包含私钥”警告标签是否在第一个选项卡上可见,就在到期日期下方

【讨论】:

【参考方案3】:

一个巨大的缺陷是即使 PrivateKey 没有正确保存,私钥图标仍然会出现在 mmc 中,并且会显示“有一个与此证书关联的私钥”。要确定私钥是否被正确导入,

右键单击 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 并记下文件夹中有多少文件(这是保存私钥的地方)。 导入 pfx 文件/但是您将证书/密钥添加到存储中 再次检查该文件夹的文件数,应该比以前多了1个文件

您可以尝试使用 open-ssl 等工具使用新创建的自签名证书对此进行测试。被困在这个问题上好几个星期了,直到我找到这个 *** 帖子,Inserting Certificate (with privatekey) in Root, LocalMachine certificate store fails in .NET 4

另一个问题是确保证书在本地计算机(不是用户)中,但看起来你已经搞定了那部分。

【讨论】:

【参考方案4】:

当证书安装在我的本地用户存储区而不是 本地计算机 存储区时,我遇到了这个问题。安装在localMachine/my 中清除了它。

【讨论】:

以上是关于当证书位于使用 netsh 的自定义位置时,如何将证书注册到端口的主要内容,如果未能解决你的问题,请参考以下文章

如何将默认蓝色注释用于用户位置而不是我的自定义注释?

当 UICollectionView 位于 iOS 中的自定义 TableViewCell 中时,如何为 UICollectionView 实现委托和数据源方法,目标 C

以编程方式完成时,http add sslcert失败

如何使用情节提要从自定义 uitableviewcell 正确启动弹出框转场

地理定位的自定义消息

如何使用自定义内容定义 UserControl?