我正在使用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证书。但不带签署证书 )
答案 0 :(得分:1)
该消息表明证书可能没有正确的使用标志来进行加密/解密。但是,如果我正确地理解了您,则实际上您并不需要加密。如果是这样,您可以指定您的预期用途为“签名”。
该ServiceCertificates.Add
方法的重载,可以让您指定预期用途,例如
Saml2AuthenticationOptions.SPOptions.ServiceCertificates.Add(
new ServiceCertificate
{
Certificate = LoadCertificateFromWindwosStore(),
Use = CertificateUse.Signing
}
);
以上内容将使您可以使用它来签名出站登录/注销请求,并使用use = signing在元数据中发布。
请注意,这与IDP用来签署响应的证书不同。该配置与IdentityProviders
列表中的其余IDP信息一起配置(理想情况下,使用MetadataLocation
自动获取证书)。