$DeviceCAOrigPublicKey = $DeviceCAOrig->getPublicKey($iPhoneDeviceCAOrig);
$DeviceCAOrigDN = $DeviceCAOrig->getDN(true);
$DeviceCAOrigIssuerDN = $DeviceCAOrig->getIssuerDN(true);
$DeviceCAOrigExtensions = $DeviceCAOrig->getExtensions();
$iPhoneDeviceCANew_x509 = new File_X509();
//$iPhoneDeviceCANew_x509->setPublicKey ( $DeviceCAOrigPublicKey );
//$iPhoneDeviceCANew_x509->setDN ( $DeviceCAOrigDN );
$iPhoneDeviceCANew_x509->setStartDate('-1 day');
$iPhoneDeviceCANew_x509->setEndDate('+ 10 year');
//$iPhoneDeviceCANew_x509->setIssuerDN ( $DeviceCAOrigIssuerDN );
$extensions = array();
$i = 0;
if (is_array($DeviceCAOrigExtensions)) {
    foreach ($DeviceCAOrigExtensions as $extension) {
        $extensions[] = $extension;
        $value = $DeviceCAOrig->getExtension($extension);
        $iPhoneDeviceCANew_x509->setExtension($extension, $value);
        //print $extension . "\n" . print_r($value);
    }
}
$crt = $iPhoneDeviceCANew_x509->loadX509($iPhoneDeviceCANew_x509->saveX509($iPhoneDeviceCANew_x509->sign($CA_Certificate, $DeviceCAOrig)));
$Certificate = $iPhoneDeviceCANew_x509->saveX509($crt);
// Cert Reproduce idea.
/*
 * Create a Very close Public Key to Apple's One.
 * Create a Self-Signed Root CA Certificate also Identical to apple's one.
 * Set the Apple's Root CA Public Key to Our's.
 * Set Apple's Signature to Our Produced Root CA Certificate.
 * "print crt to see Signature" modify it on the fly and then go go go save it.
 * Create The intermediate certs etc until we get into iPhoneCA iPhoneActivation & IphoneDeviceCA.
 * now we are free to produce our device certificates and test with them.