提供的证书对于加密/解密无效

时间:2018-10-17 21:16:08

标签: identityserver3 kentor-authservices sustainsys-saml2

我正在使用IdentityServer3进行身份验证。 IdentityServer3正在使用通过this article使用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

此仅签名证书与identyserver3正常运行

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

  

提供的证书对于加密/解密无效。也许有   在Windows中对其私钥的权限不足   证书存储或证书本身可能不正确   目的。如果只想使用它进行签名,请设置Use属性   进行签名(CertificateUse.Signing)。

当我调试库代码时,实际的例外是Bad Key。如#412

中所述

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

(请注意,如果我根据@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证书。但不带签署证书 )

1 个答案:

答案 0 :(得分:1)

该消息表明证书可能没有正确的使用标志来进行加密/解密。但是,如果我正确地理解了您,则实际上您并不需要加密。如果是这样,您可以指定您的预期用途为“签名”。

ServiceCertificates.Add方法的重载,可以让您指定预期用途,例如

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

以上内容将使您可以使用它来签名出站登录/注销请求,并使用use = signing在元数据中发布。

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