2

我正在尝试在 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
其中包含没有扩展名的系统文件。这是私钥吗?如何在代码中使用它?

4

1 回答 1

1

这取决于您如何从 AD 导出证书。您在 systemCertificates 目录中找到的文件是您导出的吗?这是使用私钥导出证书的方法。

这将创建一个 PKCS 12 或 PKCS 8 (DER) 证书,您应该能够使用KeyStore.getInstance("PKCS12")或加载到 Java 中KeyStore.getInstance("RSA")。一旦您加载了密钥库,对于 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()))));
于 2012-11-23T13:19:33.970 回答