Sample code for 30+ languages & platforms
PHP Extension

Get Public Key from CSR

See more CSR Examples

Demonstrates how to get the public key from a CSR.

Chilkat PHP Extension Downloads

PHP Extension
<?php

include("chilkat.php");

$success = false;

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

$pem = new CkPem();

// No password is required.  Pass an empty password string..
$noPassword = '';
$success = $pem->LoadPemFile('qa_data/csr/csr2.pem',$noPassword);
if ($success != true) {
    print $pem->lastErrorText() . "\n";
    exit;
}

$strBase64 = $pem->getEncodedItem('csr','','base64',0);

$asn = new CkAsn();
$success = $asn->LoadEncoded($strBase64,'base64');
if ($success != true) {
    print $asn->lastErrorText() . "\n";
    exit;
}

// Convert the ASN.1 to XML.
$xml = new CkXml();
$success = $xml->LoadXml($asn->asnToXml());
print $xml->getXml() . "\n";
print '----' . "\n";

$strModulusHex = $xml->getChildContent('bits');
print 'strModulusHex = ' . $strModulusHex . "\n";
print '----' . "\n";

// We need the modulus as base64.
$bd = new CkBinData();
$bd->AppendEncoded($strModulusHex,'hex');
$modulus64 = $bd->getEncoded('base64');
print 'modulus64 = ' . $modulus64 . "\n";
print '----' . "\n";

// Build the XML for the public key.
$xmlPubKey = new CkXml();
$xmlPubKey->put_Tag('RSAPublicKey');
$xmlPubKey->UpdateChildContent('Modulus',$modulus64);
// The RSA exponent will always be decimal 65537 (base64 = AQAB)
$xmlPubKey->UpdateChildContent('Exponent','AQAB');

print 'RSA public key as XML:' . "\n";
print $xmlPubKey->getXml() . "\n";
print '----' . "\n";

// Load the XML into a Chilkat public key object.
$pubkey = new CkPublicKey();
$success = $pubkey->LoadFromString($xmlPubKey->getXml());
if ($success != true) {
    print $pubkey->lastErrorText() . "\n";
    exit;
}

// Show the public key as PEM.
$preferPkcs1 = true;
print $pubkey->getPem($preferPkcs1) . "\n";

?>