Можно ли проверить подпись только при наличии родительского или корневого сертификата в иерархии?
Отказ от ответственности: я новичок в работе с сертификатами, поэтому, пожалуйста, простите за наивную терминологию.
Рассмотрим следующую ситуацию.
- У нас есть две стороны (назовем их IdP для поставщика удостоверений и SP для поставщика услуг) и некий центральный центр сертификации CA, которому определенно доверяет как IdP, так и SP.
- CA имеет собственный сертификат CertCA, известный как IdP, так и SP (импортированный в хранилище ключей IdP и SP под каким-либо псевдонимом)
- Наш CA выдает один сертификат для IdP (CertIdP) и один для SP (CertSP).
- IdP имеет CertIdP в своем хранилище ключей и знает пароль для него, поэтому IdP может подписывать сообщения с помощью CertIdP.
- То же самое для SP / CertSP
- Теперь предположим, что SP не знает CertIdP, а IdP не знает CertSP. Они знают только CertCA, который использовался для подписи CertIdP и CertSP. (Насколько я понимаю, у нас есть иерархия сертификатов CertIdP -> CertCA ‹- CertSP здесь-)
- IdP хочет отправить подписанное сообщение SP. Он создает сообщение, а затем использует CertIdP для его подписи.
- SP получает сообщение, подписанное IdP с помощью CertIdP. Как отмечалось выше, у SP нет CertIdP, только родительский сертификат CertCA.
У меня вопрос: Может ли поставщик услуг проверки проверить подпись сообщения, подписанного CertIdP, только имея его родительский сертификат CertCA?
Предыстория, зачем она нужна.
Мы внедряем систему единого входа на базе SAML с помощью PicketLink. Мы используем SAML2SignatureValidationHandler PicketLink для проверки подписей. Для этого поставщику услуг (SP) необходимо иметь сертификат IdP в своем хранилище ключей. Когда подписанное утверждение SAML передается SP, этот обработчик использует сертификат IdP для проверки подписи.
Вышеописанный процесс работает хорошо, но у нас есть некоторые организационные проблемы. Этот процесс предполагает, что SP имеет сертификат IdP для проверки. Если что-то изменится, необходимо заменить сертификат IdP на стороне SP. У нас может быть большое количество SP (сотни, а не тысячи), так что это довольно сложно.
Поскольку и CertIdP, и CertSP выпускаются одним и тем же центром (CA), которому определенно доверяют как IdP, так и SP, у нас возникла идея, что мы можем использовать сертификат CA для проверки подписи. Если это сработает, это может устранить необходимость обмена сертификатами между IdP и SP. Сертификат CA также очень "долговечный", поэтому если его нужно обменивать только один раз в вечности (вечность, в нашем случае составляет около 10-20 лет).
Однако я не уверен, возможно ли технически проверить подпись, подписанную с помощью CertIdP, только с родительским CertCA. Является ли это возможным? Или мы здесь совершенно ошиблись?
Если это актуально, мы на платформе Java / JBoss на стороне SP, IdP - это стороннее программное обеспечение.
Обновление:
Это подпись, которую я получаю сейчас от IdP:
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<ds:Reference URI="#_...">
<ds:Transforms>
<ds:Transform
Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
PrefixList="ds saml samlp" />
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<ds:DigestValue>r...=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>X...==</ds:SignatureValue>
</ds:Signature>