我有一些其他方提供的.cer文件。我需要使用此.cer文件创建一个saml凭证。
为此,我使用以下命令将.cer文件导入jks文件。 (密码和密码一样。它从提示接受证书。我给了y然后它说证书被添加到密钥库)
keytool -importcert -file xyz.cer -keystore test.jks -alias“testsp”
然后我使用这个jks文件创建凭证,如下所示。
private Credential getCredential() {
KeyStore keystore = readKeystoreFromFile("C:\\Users\\WTC\\Downloads\\icicistage\\test.jks", "password");
Map<String, String> passwordMap = new HashMap<String, String>();
passwordMap.put("testsp", "password");
KeyStoreCredentialResolver resolver = new KeyStoreCredentialResolver(keystore, passwordMap);
Criteria criteria = new EntityIDCriteria("testsp");
CriteriaSet criteriaSet = new CriteriaSet(criteria);
Credential credential = null;
try {
credential = resolver.resolveSingle(criteriaSet);
} catch (SecurityException e) {
e.printStackTrace();
}
return credential;
}
private static KeyStore readKeystoreFromFile(String pathToKeyStore, String keyStorePassword) {
try {
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
InputStream inputStream = new FileInputStream(pathToKeyStore);
keystore.load(inputStream, keyStorePassword.toCharArray());
inputStream.close();
return keystore;
} catch (Exception e) {
throw new RuntimeException("Something went wrong reading keystore", e);
}
}
以下行在try块中给出了以下错误。
credential = resolver.resolveSingle(criteriaSet);
java.lang.UnsupportedOperationException:受信任的证书条目不受密码保护
有人可以指导我解决这个问题吗?
答案 0 :(得分:0)
解决了这个问题。
我们无需在密码映射中提供密码。由于证书仅包含公钥。它不会输入密码。
从代码中删除了以下行,它运行正常。
passwordMap.put("testsp", "password");