Skip to content

Commit 5cf8f96

Browse files
author
Boy Baukema
committed
Allow for multiple signing keys in metadata documents if entity has CertData2 and/or CertData3 defined. Fixed #27.
1 parent d748737 commit 5cf8f96

File tree

3 files changed

+32
-38
lines changed

3 files changed

+32
-38
lines changed

library/EngineBlock/Corto/Adapter.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -413,10 +413,8 @@ protected function _configureProxyServer(EngineBlock_Corto_ProxyServer $proxySer
413413
$remoteEntities[$idpEntityId] = array();
414414
}
415415
$remoteEntities[$idpEntityId]['EntityID'] = $idpEntityId;
416-
$remoteEntities[$idpEntityId]['certificates'] = array(
417-
'public' => $application->getConfiguration()->encryption->key->public,
418-
'private' => $application->getConfiguration()->encryption->key->private,
419-
);
416+
$remoteEntities[$idpEntityId]['certificates']['public'] = $application->getConfiguration()->encryption->key->public;
417+
$remoteEntities[$idpEntityId]['certificates']['private'] = $application->getConfiguration()->encryption->key->private;
420418
$remoteEntities[$idpEntityId]['NameIDFormats'] = array(
421419
EngineBlock_Urn::SAML2_0_NAMEID_FORMAT_PERSISTENT,
422420
EngineBlock_Urn::SAML2_0_NAMEID_FORMAT_TRANSIENT,

library/EngineBlock/Corto/Mapper/Metadata/Entity/SsoDescriptor/Certificates.php

Lines changed: 26 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,42 +20,37 @@ public function mapTo(array $rootElement)
2020
if (empty($publicCertificate)) {
2121
return $rootElement;
2222
}
23-
$rootElement['md:KeyDescriptor'] = array(
24-
array(
25-
EngineBlock_Corto_XmlToArray::ATTRIBUTE_PFX . 'xmlns:ds' => 'http://www.w3.org/2000/09/xmldsig#',
26-
EngineBlock_Corto_XmlToArray::ATTRIBUTE_PFX . 'use' => 'signing',
27-
'ds:KeyInfo' => array(
28-
'ds:X509Data' => array(
29-
'ds:X509Certificate' => array(
30-
EngineBlock_Corto_XmlToArray::VALUE_PFX => $this->_mapPem($publicCertificate),
31-
),
32-
),
33-
),
34-
),
35-
/**
36-
* https://jira.surfconext.nl/jira/browse/BACKLOG-874
37-
*
38-
* Encryption key is no longer provided to prevent the idp returning an encrypted response
3923

40-
array(
41-
EngineBlock_Corto_XmlToArray::ATTRIBUTE_PFX . 'xmlns:ds' => 'http://www.w3.org/2000/09/xmldsig#',
42-
EngineBlock_Corto_XmlToArray::ATTRIBUTE_PFX . 'use' => 'encryption',
43-
'ds:KeyInfo' => array(
44-
'ds:X509Data' => array(
45-
'ds:X509Certificate' => array(
46-
EngineBlock_Corto_XmlToArray::VALUE_PFX => $this->_mapPem($publicCertificate),
47-
),
48-
),
49-
),
50-
'md:EncryptionMethod' => array(
51-
array(
52-
EngineBlock_Corto_XmlToArray::ATTRIBUTE_PFX . 'Algorithm' => 'http://www.w3.org/2001/04/xmlenc#rsa-1_5',
24+
$rootElement['md:KeyDescriptor'] = array($this->getSigningKeyMetadataForCert($publicCertificate));
25+
26+
if (isset($this->_entity['certificates']['public-fallback'])) {
27+
$rootElement['md:KeyDescriptor'][] = $this->getSigningKeyMetadataForCert(
28+
$this->_entity['certificates']['public-fallback']
29+
);
30+
}
31+
32+
if (isset($this->_entity['certificates']['public-fallback2'])) {
33+
$rootElement['md:KeyDescriptor'][] = $this->getSigningKeyMetadataForCert(
34+
$this->_entity['certificates']['public-fallback2']
35+
);
36+
}
37+
38+
return $rootElement;
39+
}
40+
41+
protected function getSigningKeyMetadataForCert($publicCertificate)
42+
{
43+
return array(
44+
EngineBlock_Corto_XmlToArray::ATTRIBUTE_PFX . 'xmlns:ds' => 'http://www.w3.org/2000/09/xmldsig#',
45+
EngineBlock_Corto_XmlToArray::ATTRIBUTE_PFX . 'use' => 'signing',
46+
'ds:KeyInfo' => array(
47+
'ds:X509Data' => array(
48+
'ds:X509Certificate' => array(
49+
EngineBlock_Corto_XmlToArray::VALUE_PFX => $this->_mapPem($publicCertificate),
5350
),
5451
),
5552
),
56-
*/
5753
);
58-
return $rootElement;
5954
}
6055

6156
protected function _mapPem($pemKey)

library/EngineBlock/Corto/ServiceRegistry/Adapter.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,9 +312,10 @@ protected static function convertServiceRegistryEntityToCortoEntity($serviceRegi
312312
}
313313

314314
// In general
315+
$cortoEntity['certificates'] = array();
315316
if (isset($serviceRegistryEntity['certData']) && $serviceRegistryEntity['certData']) {
316-
$cortoEntity['certificates'] = array(
317-
'public' => EngineBlock_X509Certificate::getPublicPemCertFromCertData($serviceRegistryEntity['certData']),
317+
$cortoEntity['certificates']['public'] = EngineBlock_X509Certificate::getPublicPemCertFromCertData(
318+
$serviceRegistryEntity['certData']
318319
);
319320
if (isset($serviceRegistryEntity['certData2']) && $serviceRegistryEntity['certData2']) {
320321
$cortoEntity['certificates']['public-fallback'] = EngineBlock_X509Certificate::getPublicPemCertFromCertData(
@@ -436,4 +437,4 @@ protected static function _multiLang(&$cortoEntity, $serviceRegistryEntity, $map
436437
}
437438
}
438439
}
439-
}
440+
}

0 commit comments

Comments
 (0)