我用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);
难道还不够吗? 如果验证不抛出异常会验证发送者的身份?