我用 Java 实现了一个 SAML SP。
我向 SAML 2.0 IDP 发送 AuthnRequest 并获得加密响应。
我的问题是:
如何确保响应确实来自 IDP 而不是来自黑客?
验证签名是不够的,因为这只告诉我发送者有一对匹配的私钥/公钥,但它可以是任何人。
因此,我需要 IDP 提前向我提供我上传到 jks 文件的证书,并将其每次与我从响应的 ds:X509Certificate 元素中提取的证书进行比较。
现在,是否有一种标准方法可以将发件人的证书与存储在我的密钥库中的证书进行比较?
我看到了以下代码:
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);
够了吗?如果验证没有抛出异常,它会验证发件人的身份吗?