如何创建测试签名证书?

How can I create a test signing certificate?

我正在尝试按照 these instructions 使用 WIF 创建 SAML2 令牌。

说明说

To supply signing credentials to the SecurityTokenDescriptor, you must first get a reference to the signing certificate as an X509Certificate2 instance. From this you can create a SecurityKeyIdentifier and produce a SigningCredentials instance

提供以下代码:

X509Certificate2 signingCert = CertificateUtil.GetCertificate(StoreName.My, StoreLocation.LocalMachine, "CN=busta-rpsts.com ");
SecurityKeyIdentifier ski = new SecurityKeyIdentifier(new SecurityKeyIdentifierClause[] { new     X509SecurityToken(signingCert).CreateKeyIdentifierClause<X509SubjectKeyIdentifierClause>() });
X509SigningCredentials signingCreds = new X509SigningCredentials(signingCert, ski);
descriptor.SigningCredentials = signingCreds;

我尝试使用 makecert 制作测试证书,其中包含主题密钥标识符,但是当我 运行 通过上述代码制作的任何证书时,我得到以下 System.NotSupportedException:

'X509SecurityToken' does not support 'X509SubjectKeyIdentifierClause' creation.

调用此行时出现这种情况:

new X509SecurityToken(signingCert).CreateKeyIdentifierClause<X509SubjectKeyIdentifierClause>()

现在我知道说明说的是...

Note: Certificates created with makecert.exe do not include a subject key identifier and thus cannot be used in this manner. You should produce certificates with Windows Server or purchase a certificate from Verisign or an equivalent provider.

...但是我使用了参数 -eku 2.5.29.14,我希望它能解决问题,我认为这张图片表明我已经完成了对吗?

任何人都可以指导我如何创建测试证书来使此代码正常工作,或者为我指明正确的方向吗?我也不确定 "You should produce certificates with Windows Server." 是什么意思 是否意味着 creating a CSR?

提前致谢:)

恕我直言,最好模拟真实世界的场景,因此创建一个 CA 来颁发用于生成 SAML 令牌的证书。您将了解有关 PKI 和证书的更多信息,解决开发时间而非生产时间的问题。但从技术上讲,不需要这样做。

那么需要做什么:

  1. 下载XCA
  2. 在XCA中制作一个CA证书(它已经有CA模板所以直接使用它)。可以找到指南 here
  3. 在 CA 下颁发最终实体证书。可以找到指南 here
  4. 将 CA 证书(无私钥)导出到文件
  5. 将 CA 证书导入 LocalMachine 中的受信任根存储(使用 mmc->文件->添加管理单元->证书->计算机帐户)
  6. 导出带有私钥的终端实体证书(PKCS#12 格式)。
  7. 将终端实体证书导入 LocalMachine 中的个人存储(使用 mmc->File->add snapin->certificates->computer account)
  8. 生成 CRL。可以找到指南 here
  9. 将 CRL 放置在您颁发终端实体证书时放置的位置,或将其放置在 LocalMachine 的受信任根存储中
  10. 然后 X509Certificate2 signingCert = CertificateUtil.GetCertificate(StoreName.My, StoreLocation.LocalMachine, "CN=busta-rpsts.com "); 就可以了……可能。如果没有,您将不得不修改私钥权限(再次mmc),以便您的帐户可以使用本地计算机个人存储中的私钥。