SAML 2.0 - 如何验证发件人的证书?(SAML 2.0 - How to verify t

2019-08-16 15:53发布

我用Java实现一个SAML SP。
我发送AuthnRequest到SAML 2.0 IDP和得到一个加密的响应。
我的问题是:
如何确保响应确实来自IDP,而不是从一个黑客?
这是不够的验证签名,因为这只是告诉我,发件人有一个匹配对私有/公共密钥的,但它可能是任何人。
所以,我需要的IDP提供我事先我上传到JKS文件中的证书,每一次把它比作证书我从DS中提取:响应的X509证书元素。
现在,有与存储在我的密钥库中的一个比较发送者的证书的标准呢?
我看到下面的代码:

 KeyStore keyStore = getKS();
 PKIXParameters params = new PKIXParameters(keyStore);
 params.setRevocationEnabled(false);
 CertPath certPath = certificateFactory.generateCertPath(Arrays.asList(certFromResponse));
 CertPathValidator certPathValidator = CertPathValidator.getInstance(CertPathValidator.getDefaultType());
 CertPathValidatorResult result = certPathValidator.validate(certPath, params);

难道还不够吗? 如果验证不抛出异常会验证发送者的身份?

Answer 1:

这是我已经解决了签名的验证与OpenSAML方式

http://blog.samlsecurity.com/2012/11/verifying-signatures-with-opensaml.html

我还写了一本书, 指南OpenSAML ,在这里我使用OpenSAML详细加密和签名,更解释。

什么是与OpenSAML验证方法重要的是,他们只验证签名的加密有效性(该内容没有发生变化)。 但是,它没有验证发件人是你信任的人。

签名验证实例化与发件人来验证,发送者的公钥的公钥。 这通常是交换是身份联合的使用设置SAML元数据



文章来源: SAML 2.0 - How to verify the sender certificate?