SAML加密响应 - 如何获取私钥?

时间:2012-11-23 09:36:21

标签: java

我正在尝试在JBOSS中实现SP发起的Web浏览器SAML SSO配置文件。

我的申请是SP。

我知道我需要为我的服务器创建证书并将其发送到元数据文件中的IDP。

我已使用Microsoft Active Directory证书服务来安装证书。

现在,当我从IDP收到SAML响应时,它已加密:

<saml:EncryptedAssertion> ...
    <ds:X509Certificate> ... 
        <xenc:CipherData> ... 
            <xenc:CipherValue> .. SOME ENCRYPTED VALUE ... </xenc:CipherValue>

现在,我知道为了获得解密的值,我需要这样的东西:

File keyStoreFile = new File(MY_KEY_STORE_FILE);
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(new FileInputStream(keyStoreFile),MY_PASSWORD));

问题是:密钥库文件是什么?我如何获得它以及它应该具有什么格式? 我找到了以下文件夹:

C:\ Users \ MyUser \ AppData \ Roaming \ Microsoft \ SystemCertificates \ My \ Keys
其中包含没有扩展名的系统文件。这是私钥吗?我如何在代码中使用它?

1 个答案:

答案 0 :(得分:1)

这取决于您从AD导出证书的方式。您在systemCertificates目录中找到的文件是您导出的内容吗?这是带有私钥的how to export证书。

这将创建一个PKCS 12或PKCS 8(DER)证书,您应该能够使用KeyStore.getInstance("PKCS12")KeyStore.getInstance("RSA")在Java中加载。加载密钥库后,对于XML加密,您将需要一个KeyInfo对象,如下所示:

PrivateKeyEntry entry = ((PrivateKeyEntry) keyStore.getEntry(certAlias, new KeyStore.PasswordProtection(password)));

KeyInfoFactory keyFactory = KeyInfoFactory.getInstance();

KeyInfo keyInfo = keyFactory.newKeyInfo(Collections.singletonList(keyFactory.newX509Data(Collections.singletonList(entry.getCertificate()))));