Sample code for 30+ languages & platforms
PHP

Get Certificates within XML Signature

See more XML Digital Signatures Examples

Demonstrates how to get the certificates contained within an XML signature.

Chilkat PHP Downloads

Chilkat2 PHP
<?php

use Chilkat2\Cert;
use Chilkat2\StringArray;
use Chilkat2\StringBuilder;
use Chilkat2\XmlDSig;

$success = false;

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

$sbXml = new StringBuilder();

// Load XML containing one or more signatures.
try {
    $sbXml->LoadFile('qa_data/xml_dsig_valid_samples/multipleSigners/sp.pdf.XAdES.xml', 'utf-8');
} catch (\Chilkat2\Exception $e) {
    echo "Failed to load the XML file..\n";
    exit;
}

$dsig = new XmlDSig();

// First load the XML containing the signatures to be verified.
// Note that this particular Signature already contains the RSA public key that will be used
// for verification.
try {
    $dsig->LoadSignatureSb($sbXml);
} catch (\Chilkat2\Exception $e) {
    echo $e->getMessage(), "\n";
    exit;
}

// For each signature, verify and also get the certificate(s) contained within each Signature.
$i = 0;
$saCerts = new StringArray();
$cert = new Cert();

echo 'numSignatures = ', $dsig->NumSignatures, "\n";

while ($i < $dsig->NumSignatures) {
    // Select the Nth signature by setting the Selector property.
    $dsig->Selector = $i;

    $bVerifyReferenceDigests = true;
    try {
        $dsig->VerifySignature($bVerifyReferenceDigests);
        $bVerified = true;
    } catch (\Chilkat2\Exception $e) {
        $bVerified = false;
    }
    echo 'Signature ', $i + 1, ' verified = ', ($bVerified ? 'true' : 'false'), "\n";

    // Get the certificates embedded in this signature.
    $saCerts->Clear();
    try {
        $dsig->GetCerts($saCerts);
        $success = true;
    } catch (\Chilkat2\Exception $e) {
        $success = false;
    }
    if ($success) {
        $j = 0;
        while ($j < $saCerts->Count) {
            try {
                $cert->LoadFromBase64($saCerts->GetString($j));
                $success = true;
            } catch (\Chilkat2\Exception $e) {
                $success = false;
            }
            if ($success) {
                echo '    ', $cert->SubjectDN, "\n";
            }

            $j = $j + 1;
        }
    }

    $i = $i + 1;
}