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