2017-01-25 5 views
0

Я шифрую некоторые утверждения SAML с открытым ключом, полученным от поставщика (для использования в рамках рабочего процесса, инициированного IDP).Keystore для шифрования с открытым ключом

Можно добавить, что открытый ключ в хранилище ключей вместо того, чтобы создать учетные данные, например, так:

CertificateFactory cf = CertificateFactory.getInstance("X.509") 
Certificate cert = cf.generateCertificate(certFileStream) 

BasicX509Credential credential = new BasicX509Credential() 
credential.setUsageType(UsageType.ENCRYPTION) 
credential.setEntityCertificate((java.security.cert.X509Certificate) cert) 
credential.setPrivateKey(null) 

Причина Я заинтересован в том, что я также должен подписать SAML, используя мой собственный закрытый ключ - я разрешаю учетные данные из своего хранилища ключей. Так что было бы более прямо, чтобы держать их всех в одном месте.

+0

Вы можете сохранить сертификат в хранилище и извлечь его перед созданием учетных данных – pedrofb

+0

Любые идеи о том, как вы могли бы сделать это? – user2719546

ответ

0

Вы можете сохранить сертификат в хранилище ключей и извлечь его перед генерированием учетных данных. Этот код должен работать

Создание хранилища ключей с сертификатом

KeyStore keyStore = KeyStore.getInstance("JKS"); 
keyStore.load(null); 
KeyStore.setCertificateEntry(alias, cert); 
FileOutputStream out = new FileOutputStream("keystore.jks"); 
keyStore.store(out, ksPassword); 
out.close(); 

сертификат Загрузить из хранилища ключей

KeyStore keyStore = KeyStore.getInstance("JKS"); 
keyStore.load( new FileInputStream("keystore.jks"),ksPassword); 
Certificate cert = keystore.getCertificate(alias); 
0

Это выглядит как ваш, используя OpenSAML. Чтобы прочитать учетные данные из Keystore в OpenSAML, вы так же используете KeyStoreCredentialResolver.

keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
FileInputStream inputStream = new FileInputStream("/path/to/my/JKS"); 
keystore.load(inputStream, "MyKeystorePassword".toCharArray()); 
inputStream.close(); 

Map<String, String> passwordMap = new HashMap<String, String>(); 
passwordMap.put("MyEntryID"), "MyEntryPassword"); 
KeyStoreCredentialResolver resolver = new KeyStoreCredentialResolver(keystore, passwordMap); 

Criteria criteria = new EntityIDCriteria("MyEntryID"); 
CriteriaSet criteriaSet = new CriteriaSet(criteria); 

X509Credential credential = (X509Credential)resolver.resolveSingle(criteriaSet); 

Подробнее об использовании распознаватель в OpenSAML на this post на мой мой блог

Смежные вопросы