diff --git a/lib/SimpleSAML/Bindings/Shib13/Artifact.php b/lib/SimpleSAML/Bindings/Shib13/Artifact.php
index 851bdd194f45648cbe4f11903188d0d33445c7ae..63241b16dcb83b0b8b57e85ae2ea6b04effe4d9b 100644
--- a/lib/SimpleSAML/Bindings/Shib13/Artifact.php
+++ b/lib/SimpleSAML/Bindings/Shib13/Artifact.php
@@ -125,12 +125,16 @@ class SimpleSAML_Bindings_Shib13_Artifact {
 		$url = $idpMetadata->getDefaultEndpoint('ArtifactResolutionService', array('urn:oasis:names:tc:SAML:1.0:bindings:SOAP-binding'));
 		$url = $url['Location'];
 
-		$certData = SimpleSAML_Utilities::loadPublicKey($idpMetadata, TRUE);
-		if (!array_key_exists('PEM', $certData)) {
-			throw new SimpleSAML_Error_Exception('Missing one of certData or certificate in metadata for '
-				. var_export($idpMetadata->getString('entityid'), TRUE));
+		$peerPublicKeys = $idpMetadata->getPublicKeys('signing', TRUE);
+		$certData = '';
+		foreach ($peerPublicKeys as $key) {
+			if ($key['type'] !== 'X509Certificate') {
+				continue;
+			}
+			$certData .= "-----BEGIN CERTIFICATE-----\n" .
+				chunk_split($key['X509Certificate'], 64) .
+				"-----END CERTIFICATE-----\n";
 		}
-		$certData = $certData['PEM'];
 
 		$file = SimpleSAML_Utilities::getTempDir() . '/' . sha1($certData) . '.crt';
 		if (!file_exists($file)) {