如何创建测试签名证书?
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 和证书的更多信息,解决开发时间而非生产时间的问题。但从技术上讲,不需要这样做。
那么需要做什么:
- 下载XCA
- 在XCA中制作一个CA证书(它已经有CA模板所以直接使用它)。可以找到指南 here
- 在 CA 下颁发最终实体证书。可以找到指南 here
- 将 CA 证书(无私钥)导出到文件
- 将 CA 证书导入 LocalMachine 中的受信任根存储(使用 mmc->文件->添加管理单元->证书->计算机帐户)
- 导出带有私钥的终端实体证书(PKCS#12 格式)。
- 将终端实体证书导入 LocalMachine 中的个人存储(使用 mmc->File->add snapin->certificates->computer account)
- 生成 CRL。可以找到指南 here
- 将 CRL 放置在您颁发终端实体证书时放置的位置,或将其放置在 LocalMachine 的受信任根存储中
- 然后
X509Certificate2 signingCert = CertificateUtil.GetCertificate(StoreName.My, StoreLocation.LocalMachine, "CN=busta-rpsts.com ");
就可以了……可能。如果没有,您将不得不修改私钥权限(再次mmc),以便您的帐户可以使用本地计算机个人存储中的私钥。
我正在尝试按照 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 和证书的更多信息,解决开发时间而非生产时间的问题。但从技术上讲,不需要这样做。
那么需要做什么:
- 下载XCA
- 在XCA中制作一个CA证书(它已经有CA模板所以直接使用它)。可以找到指南 here
- 在 CA 下颁发最终实体证书。可以找到指南 here
- 将 CA 证书(无私钥)导出到文件
- 将 CA 证书导入 LocalMachine 中的受信任根存储(使用 mmc->文件->添加管理单元->证书->计算机帐户)
- 导出带有私钥的终端实体证书(PKCS#12 格式)。
- 将终端实体证书导入 LocalMachine 中的个人存储(使用 mmc->File->add snapin->certificates->computer account)
- 生成 CRL。可以找到指南 here
- 将 CRL 放置在您颁发终端实体证书时放置的位置,或将其放置在 LocalMachine 的受信任根存储中
- 然后
X509Certificate2 signingCert = CertificateUtil.GetCertificate(StoreName.My, StoreLocation.LocalMachine, "CN=busta-rpsts.com ");
就可以了……可能。如果没有,您将不得不修改私钥权限(再次mmc),以便您的帐户可以使用本地计算机个人存储中的私钥。