2013-06-26 3 views
1

Я реализую SAML SP в Java.
Чтобы проверить сертификат ответа SAML,
Я извлекаю элемент X509Certificate из ответа SAML и проверяю его на файл хранилища ключей Java, который я предварительно загрузил сертификат IDP.
Я использую следующий код для проверки сертификата:
Подтвердить путь сертификации

X509Certificate certFromResponse = //extract from SAML response 
KeyStore keyStore = getKS(); 
PKIXParameters params = new PKIXParameters(keyStore); 
params.setRevocationEnabled(false); 
CertPath certPath = 
certificateFactory.generateCertPath(Arrays.asList(certFromResponse)); 
CertPathValidator certPathValidator = CertPathValidator.getInstance(CertPathValidator.getDefaultType()); 
CertPathValidatorResult result = certPathValidator.validate(certPath, params); 

Это прекрасно работает для сертификатов, которые являются корневой CA.
Когда сертификат имеет путь сертификации, проверка не выполняется.
Возможный способ справиться с это вручную загрузить все сертификаты на пути в JKS файл
с различными псевдонимами, а затем извлечь их в список, как это:

List<Certificate> certs = new ArrayList<Certificate>(); 
certs.add(certFromResponse); 
if (keyStore.getCertificate("ALIAS_CA_1") != null) { 
    certs.add(keyStore.getCertificate("ALIAS_CA_1")); 
} 
if (keyStore.getCertificate("ALIAS_CA_2") != null) { 
    certs.add(keyStore.getCertificate("ALIAS_CA_2"); 
} 
... 
CertPath certPath = certificateFactory.generateCertPath(certs); 

Есть ли более простой способ сделать это?
Можно ли извлечь сертификационный путь из самого сертификата?

Спасибо!

ответ

1

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

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