2

我正在使用 IdentityServer3 进行身份验证。IdentityServer3 正在使用根据本文使用 makecert ar 创建的签名证书(用于签署令牌的证书)。

makecert -r -pe -n "CN=SigningOnlyCert" -b 01/01/2015 -e 01/01/2020 -sky signature -a sha256 -len 2048 -ss my -sr LocalMachine

此仅签名证书与 identityserver3 一起工作正常

现在我正在尝试使用SustainSys库添加 SAML2 外部提供程序。我将 SPOptions 配置为加载相同的仅签名证书。但是它会 Saml2AuthenticationOptions.SPOptions.ServiceCertificates.Add(LoadCertificateFromWindwosStore()) 抛出错误

提供的证书对加密/解密无效。Windows 证书存储中对其私钥的权限可能不足,或者证书本身可能没有正确的用途。如果您只想将其用于签名,请将 Use 属性设置为 Signing (CertificateUse.Signing)。

当我调试库代码时,实际的异常是Bad Key. 如#412中所述

现在确定为什么这个证书不能与 SustainSys 一起使用,当它与 IdentityServer3 一起使用时?

(请注意,如果我按照@brockallen 文章创建新的 SSL 证书,

makecert -r -pe -n "CN=SSLCert" -b 01/01/2015 -e 01/01/2020 -sky exchange -a sha256 -len 2048 -ss my -sr localMachine

然后 SustainSys 库使用 SSL 证书。但不是带有signonly证书)

4

1 回答 1

0

该消息表明证书可能没有正确的加密/解密使用标志。但是,如果我对您的理解正确,您实际上并不想要加密。如果是这样,您可以指定您的预期用途是签名。

该方法有一个重载,ServiceCertificates.Add可让您指定预期用途,例如

Saml2AuthenticationOptions.SPOptions.ServiceCertificates.Add(
  new ServiceCertificate
  {
    Certificate = LoadCertificateFromWindwosStore(),
    Use = CertificateUse.Signing
  }
);

以上将允许您使用它来签署出站登录/注销请求,并将在您的元数据中使用 use=signing 发布。

请注意,这与用于签署响应的 IDP 证书不同。这与列表中的其余 IDP 信息一起配置IdentityProviders(理想情况下,MetadataLocation用于自动检索证书)。

于 2018-10-17T22:38:39.317 回答