示例#1
0
 static function staticGet509XInfo($certs, $isPEMFormat = TRUE)
 {
     if ($isPEMFormat) {
         $beginCertificate = '-----BEGIN CERTIFICATE-----';
         $endCertificate = '-----END CERTIFICATE-----';
         $data = '';
         $certlist = array();
         $arCert = explode("\n", $certs);
         $inData = FALSE;
         $i = 0;
         foreach ($arCert as $curData) {
             if (!$inData) {
                 if (strncmp($curData, $beginCertificate, 27) === 0) {
                     $inData = true;
                 }
             } else {
                 if (strncmp($curData, $endCertificate, 25) === 0) {
                     $inData = false;
                     $certlist[$i]['Certificate'] = $data;
                     $data = '';
                     $i++;
                     continue;
                 }
                 $data .= trim($curData) . PHP_EOL;
             }
             if (strncmp($curData, 'issuer=', 7) == 0) {
                 $issuerData = str_replace('issuer=', '', trim($curData));
                 $issuerTmp = explode('/', $issuerData);
                 $issuer = '';
                 krsort($issuerTmp);
                 foreach ($issuerTmp as $issuerValue) {
                     if (!empty($issuerValue)) {
                         $issuer .= $issuerValue . ',';
                     }
                 }
                 $issuerLen = strlen($issuer);
                 $issuer = substr($issuer, 0, $issuerLen - 1);
                 $certlist[$i]['z_IssuerName'] = $issuer;
             }
             if (strncmp($curData, 'subject=', 7) == 0) {
                 $issuerData = str_replace('subject=', '', trim($curData));
                 $issuerTmp = explode('/', $issuerData);
                 $issuer = '';
                 krsort($issuerTmp);
                 foreach ($issuerTmp as $issuerValue) {
                     if (!empty($issuerValue)) {
                         $issuer .= $issuerValue . ',';
                     }
                 }
                 $issuerLen = strlen($issuer);
                 $issuer = substr($issuer, 0, $issuerLen - 1);
                 $certlist[$i]['SubjectName'] = $issuer;
             }
         }
         foreach ($certlist as $key => $certificateData) {
             if (empty($certificateData['Certificate'])) {
                 unset($certlist[$key]);
                 continue;
             }
             $certicate = $beginCertificate . PHP_EOL . $certificateData['Certificate'] . $endCertificate;
             $objX509 = new X509();
             $cert = $objX509->loadX509($certicate);
             $certlist[$key]['z_SerialNumber'] = $cert['tbsCertificate']['serialNumber']->toString();
             ksort($certlist[$key]);
             $certlist[$key]['IssuerName'] = $certlist[$key]['z_IssuerName'];
             $certlist[$key]['SerialNumber'] = $certlist[$key]['z_SerialNumber'];
             unset($certlist[$key]['z_IssuerName']);
             unset($certlist[$key]['z_SerialNumber']);
         }
         return $certlist;
     } else {
         return array($certs);
     }
 }