问题标签 [x509certificate2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
581 浏览

wcf - WCF - 来自智能卡的 x509 证书 - “无法验证签名”

我有一个在 IIS6 上运行的 WCF 服务,该服务使用“带有消息凭据的传输”安全设置配置了 WSHTTPBinding(传输客户端凭据设置为“无”,消息设置为“证书”。这是由通过使用 VS 2010 中的服务自动生成的代码创建的 .NET 客户端。

在我的开发环境中,我创建了一个证书作为服务证书和 IIS SSL 证书,由于我很懒,我导出了证书以用于我的客户端应用程序。在该配置中一切正常,但这不是目标环境。这个想法是让用户使用他们的智能卡来访问这项服务。服务器将不在同一个域中,并且目前不允许使用 LDAP。

问题是现在我在测试实验室中得到了这个并设置了一个环境,其中 SSL 证书由与用户证书相同的 CA 颁发,并且我创建了一个自定义 x509 证书验证器和服务凭据,但在初始调用之后对我的验证者来说,在移交之间发生了一些事情,并在服务跟踪日志上踢出一个错误,说“验证消息安全性错误”,内部异常是“无法验证签名”。由于 is 通过我的自定义验证器并且我收到了消息记录,因此在 SOAP 端一切看起来都很好,而我正在通过另一端获取证书。我已确保我尝试使用的每个证书都在“受信任的用户”存储中,甚至尝试导出证书并将它们放入本地计算机“个人”

感觉不太明白web.config文件中服务证书和客户端证书的使用。有人可以帮我吗?

0 投票
0 回答
565 浏览

c# - 按应用程序策略 OID 查找证书

我在我的个人证书存储中安装了两个 x509Certificates,并希望通过应用程序策略检索证书。

我使用以下代码来实现这一点:

当两个安装的 X509Certificates 具有不同的扩展密钥用法值时,上述方法在提供有效 OID 时成功检索正确的证书。但是,如果一个证书没有设置其扩展密钥使用属性,则查询也会返回它以及正确的证书。我想防止退回具有以下内容的证书:

  1. 不正确的扩展密钥用法值集。
  2. 未设置扩展密钥使用值。

任何帮助都将不胜感激。

0 投票
2 回答
1977 浏览

c# - C# 不信任已安装的证书

我在IIS中使用我自己创建的SSL证书设置了一个FTP服务器(使用Makecert.exePvk2Pfx)。我将PFX文件归因于我的 FTP 服务器。

我有一个连接到 FTP 服务器的 C# 脚本,并且总是收到以下错误消息:

System.Security.Authentication.AuthenticationException:根据验证程序,远程证书无效。

我在本地计算机和用户的“受信任的根证书颁发机构”中安装了证书。

由于它没有进行身份验证,因此我通过商店的 C# 进行了查看:

但是我的证书没有列出。当我打开MMC 控制台时,我看到了我的证书。

0 投票
1 回答
1101 浏览

wcf - 当我有证书身份时,如何在代码中创建端点地址?

我的 WCF 客户端配置中有这个:

我不想使用 App.Config 文件,所以我试图在代码中重新创建它,但是我无法这样做。我尝试将此字符串从 base 64 转换并将其作为 X509Certificate2 类的原始数据传递,如果这样做,我会收到 CryptographicException:“找不到请求的对象”。

我认为这可能是因为格式是 DER,但我不确定是否是这种情况,如果是,我不知道如何将其转换为 DER 格式。

有谁知道我如何用代码加载它?

0 投票
1 回答
1392 浏览

.net - 创建可导出的自签名证书

我正在尝试在 Windows 机器上创建一个自签名证书。我希望证书是可导出的(甚至是私钥)。但是,我在完成这项任务时遇到了一些困难。

我发现了一些指向 WIN32 调用的网站。当我在 Windows XP 上运行代码时,证书存储在个人证书中,可以很好地导出。当我在 Windows 7 64 位上运行此代码时,我得到的证书没有错误,但证书不可导出。然后我不能将它用于我分配证书的网站。

请注意,Certificate 类是一个内部类,它只包含我正在使用的不同静态方法和 WIN32 定义。这是 NativeMethods 类定义(显示了我正在使用的 WIN32 API 调用):

我是在 32 位还是 64 位机器上重要吗?在这一点上,我不知道该怎么做。我从以下链接获得此代码:在 C# 中创建自签名证书

0 投票
1 回答
422 浏览

c# - 我应该将 x509 证书的哪一部分存储在数据库中以查找用户?

我有一个针对自定义用户存储使用 Forms Auth 的 Web 应用程序。我们想扩展我们的用户实体,以便我们可以配置一个客户端证书来代替用户名/密码。

我已成功将 IIS 配置为接受客户端证书,并且可以在安全模块的AuthorizeRequest事件中检查客户端证书并对其进行验证。最后一步是能够将提供的客户端证书与用户相关联。出于测试目的,我目前正在我的用户表中记录证书的主题名称,并以这种方式查找用户。

当然,这对于生产来说是不够的。我应该从客户端证书中将什么存储在我的用户表中,以便我可以查找并登录用户?

0 投票
1 回答
1524 浏览

c# - X509 自定义扩展 - 你如何设置它们?

尽管进行了广泛的搜索,但我找不到任何CustomExtensions在 X509 (v3) 证书上设置自定义扩展(属性)的示例。

如果我想生成一个新证书(基于机器上已经安装的现有 CA 证书),我该如何添加自定义扩展?我希望在证书中携带一些额外的自定义信息以供以后检查。这可以通过编程方式或使用 makecert 来完成吗?还是只能通过编写生成证书时调用的自定义策略模块来设置这些扩展?这甚至可以通过使用.Net 框架中的常规X509Certificate或类来实现吗?X509Certificate2

我找到了检查自定义扩展的代码,但没有设置它。

0 投票
1 回答
2847 浏览

c# - OpenSSL 和 C# 之间的不同 S/MIME 签名

我正在尝试在我的 .Net 程序中使用 OpenSSL 代码。这是代码:

我尝试使用 .Net OpenSSL,但我完全不知道如何使用它,也找不到合适的文档。我决定使用 .Net 来执行相同的签名过程,代码如下:

但是 C# 和 OpenSSL 之间的结果并不相同。有人可以帮我吗?

提前致谢!

0 投票
1 回答
1458 浏览

x509certificate2 - 使用 X509Certificate Pfx 进行客户端证书身份验证会在 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 中创建太多临时文件

我们正在使用带有 HttpWebRequest 的 ClientCertificate 身份验证。对于客户端证书身份验证,我们从 Pfx 文件创建 X509Certificate 并附加到传出的 HttpWebRequest。

我们看到的是,在创建请求后,我们看到了文件夹中的许多临时文件:C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys

随着我们提出更多请求,我们看到在 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 文件夹中创建的临时文件数量不断增加。

我们从 pfx 文件创建证书,然后设置密钥容器。使用 CryptoKeySecurity 和 CryptKeyAccessRule 授予显式访问权限。私有方法 SetKeyContainerSecurity 采用 CspKeyContainerInfo 和 CryptoSecurity。然后它使用 CryptAcquirecontext 和 CryptSetProvParam 来设置密钥容器的安全性。

我们面临的问题是在磁盘中创建大量临时文件的位置:C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys。

确保删除这些临时文件的正确方法是什么。

0 投票
1 回答
1082 浏览

x509certificate2 - 即使授予 MMC 权限,STS 密钥集也不存在

我的应用程序即时创建虚拟目录以及在这些虚拟目录中运行的启用 STS 的 Web 应用程序的应用程序池。应用程序池在 ApplicationPoolIdentity 帐户 (IIS APPPOOL\MyAppPool) 下运行。而且我一直在尝试找出以编程方式授予对已安装证书的访问权限的方法。

我的第一种方法是使用批处理文件执行 WinHttpCertCfg。但是,此方法仅适用于已“激活”的应用程序池帐户。通过“激活”,我的意思是我至少浏览过一次新应用程序。直到发生这种情况 - WinHttpCertCfg 总是返回消息“句柄无效”。

我尝试的下一个方法是基于从这里获得的解决方案。此解决方案的工作原理是,当我在 MMC 中浏览证书并选择“管理证书密钥”时,会列出应用程序池帐户。即使我运行 WinHttpCertCfg 来列出具有访问权限的帐户 - 也会列出新的应用程序池。

但毕竟......当我浏览 Web 应用程序时,我仍然得到“keyset 不存在”。

我现在的重点是修复第二种方法。这是我对原始代码的修改