• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

PHP openssl_pkcs7_verify函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了PHP中openssl_pkcs7_verify函数的典型用法代码示例。如果您正苦于以下问题:PHP openssl_pkcs7_verify函数的具体用法?PHP openssl_pkcs7_verify怎么用?PHP openssl_pkcs7_verify使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了openssl_pkcs7_verify函数的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的PHP代码示例。

示例1: verifyIntegrity

 /**
  * Verify a integrity of a signed message
  *
  * @return array
  */
 public static function verifyIntegrity($msg, $path)
 {
     $return = array();
     if (!empty($msg)) {
         // creates temporary files
         $temporary_files = array();
         $msgTempFile = self::generateTempFilename($temporary_files, $path);
         if (!self::writeTo($msgTempFile, $msg)) {
             $return['success'] = false;
             $return['msgs'] = array("Coudn't write temporary files!");
         }
         // do verification
         $result = openssl_pkcs7_verify($msgTempFile, PKCS7_NOVERIFY);
         if ($result === -1 || !$result) {
             // error
             $return['success'] = false;
             $return['msgs'] = self::getOpensslErrors();
         } else {
             $return['success'] = true;
             $return['msgs'] = array("Verification Successful");
         }
         self::removeTempFiles($temporary_files);
         return $return;
     } else {
         return array('success' => false, 'msgs' => array("Empty message"));
     }
 }
开发者ID:rodrigofns,项目名称:ExpressoLivre3,代码行数:32,代码来源:Smime.php


示例2: smime_validate

function smime_validate($message, $cacerts, &$signer_pem)
{
    $signer_pem = NULL;
    $decoded = json_decode($message, true);
    if (!is_null($decoded)) {
        /* Decoding succeeded, so not smime encoded. */
        /* smime_debug("smime_validate: no smime detected."); */
        return $message;
    } else {
        smime_debug("smime_validate: smime detected.");
    }
    $msg_file = writeDataToTempFile($message, "smime-msg-");
    $flags = 0;
    $signer_cert_file = tempnam(sys_get_temp_dir(), "smime-signer-");
    /* This is ugly, but it is what it is. There is no way to get the
       contents of the signed mssage without extracerts specified. And
       there is no way to pass a NULL to extacerts, or to have
       extracerts be an empty file. Sooo, put the first CA into that
       file. Ugly. */
    $extracerts_contents = file_get_contents($cacerts[0]);
    $extracerts_file = writeDataToTempFile($extracerts_contents, "smime-extra-");
    $content_file = tempnam(sys_get_temp_dir(), "smime-content-");
    $result = openssl_pkcs7_verify($msg_file, $flags, $signer_cert_file, $cacerts, $extracerts_file, $content_file);
    /* Note the triple equals, requiring the *same type*. Two equal
       signs will match the boolean TRUE result, causing programmer
       confusion. */
    if ($result === -1) {
        /* An error occurred. */
        error_log("An error occurred trying to verify the message.");
        /* Print out as many errors as openssl can offer. */
        while ($msg = openssl_error_string()) {
            error_log("openssl_error: {$msg}");
        }
        $message = NULL;
    } else {
        if ($result) {
            smime_debug("smime_validate: successful verification.");
            $message = file_get_contents($content_file);
            $signer_pem = file_get_contents($signer_cert_file);
        } else {
            /* Verification failed. */
            error_log("The message failed to verify.");
            $message = NULL;
        }
    }
    unlink($msg_file);
    unlink($signer_cert_file);
    unlink($extracerts_file);
    unlink($content_file);
    return $message;
}
开发者ID:ahelsing,项目名称:geni-portal,代码行数:51,代码来源:smime.php


示例3: test_openssl_pkcs7_sign

function test_openssl_pkcs7_sign()
{
    $privkey = openssl_pkey_new();
    VERIFY($privkey != null);
    $csr = openssl_csr_new(null, $privkey);
    VERIFY($csr != null);
    $scert = openssl_csr_sign($csr, null, $privkey, 365);
    $pubkey = openssl_csr_get_public_key($csr);
    VERIFY($pubkey != null);
    $data = "some secret data";
    $infile = tempnam('/tmp', 'invmtestopenssl');
    $outfile = tempnam('/tmp', 'outvmtestopenssl');
    unlink($infile);
    unlink($outfile);
    file_put_contents($infile, $data);
    VERIFY(openssl_pkcs7_sign($infile, $outfile, $scert, $privkey, array("To" => "[email protected]", "From" => "[email protected]")));
    $tmp = tempnam('/tmp', 'x509vmtestopenssl');
    unlink($tmp);
    VS(file_get_contents($tmp), false);
    VERIFY(openssl_x509_export_to_file($scert, $tmp));
    VS(openssl_pkcs7_verify($outfile, 0, $infile, (array) $tmp), true);
    unlink($infile);
    unlink($outfile);
    unlink($tmp);
}
开发者ID:ezoic,项目名称:hhvm,代码行数:25,代码来源:ext_openssl.php


示例4: handleSMIMEVerification

 /**
  * Takes a message with an S/MIME signature and verifies it if possible
  * 
  * @param array &$info       The array of information about a message
  * @param array $structure
  * @param array $smime_pair  An associative array containing an S/MIME certificate file
  * @return boolean  If the message was verified
  */
 private static function handleSMIMEVerification(&$info, $structure, $smime_pair)
 {
     $certificates_file = tempnam('', '__fMailbox_');
     $ciphertext_file = tempnam('', '__fMailbox_');
     file_put_contents($ciphertext_file, $info['raw_message']);
     $result = openssl_pkcs7_verify($ciphertext_file, PKCS7_NOINTERN | PKCS7_NOVERIFY, $certificates_file, array(), $smime_pair['certificate']->getPath());
     unlink($ciphertext_file);
     unlink($certificates_file);
     if (!$result || $result === -1) {
         return FALSE;
     }
     $info['verified'] = TRUE;
     return TRUE;
 }
开发者ID:philip,项目名称:flourish,代码行数:22,代码来源:fMailbox.php


示例5: assertValidVerify

 protected function assertValidVerify($expected, Swift_ByteStream_TemporaryFileByteStream $messageStream)
 {
     $actual = $messageStream->getContent();
     // File is UNIX encoded so convert them to correct line ending
     $expected = str_replace("\n", "\r\n", $expected);
     $actual = trim(self::getBodyOfMessage($actual));
     if (!$this->assertRegExp('%^' . $expected . '$\\s*%m', $actual)) {
         return false;
     }
     $opensslOutput = new Swift_ByteStream_TemporaryFileByteStream();
     $verify = openssl_pkcs7_verify($messageStream->getPath(), null, $opensslOutput->getPath(), array($this->samplesDir . 'smime/ca.crt'));
     if (false === $verify) {
         $this->fail('Verification of the message failed.');
         return false;
     } elseif (-1 === $verify) {
         $this->fail(sprintf('Verification of the message failed. Internal error "%s".', openssl_error_string()));
         return false;
     }
     return true;
 }
开发者ID:HaliteChallenge,项目名称:Halite,代码行数:20,代码来源:SMimeSignerTest.php


示例6: verify

 function verify($struct, $message)
 {
     // use common temp dir
     $temp_dir = $this->rc->config->get('temp_dir');
     $msg_file = tempnam($temp_dir, 'rcmMsg');
     $cert_file = tempnam($temp_dir, 'rcmCert');
     $fh = fopen($msg_file, "w");
     if ($struct->mime_id) {
         $message->get_part_body($struct->mime_id, false, 0, $fh);
     } else {
         $this->rc->storage->get_raw_body($message->uid, $fh);
     }
     fclose($fh);
     // @TODO: use stored certificates
     // try with certificate verification
     $sig = openssl_pkcs7_verify($msg_file, 0, $cert_file);
     $validity = true;
     if ($sig !== true) {
         // try without certificate verification
         $sig = openssl_pkcs7_verify($msg_file, PKCS7_NOVERIFY, $cert_file);
         $validity = enigma_error::UNVERIFIED;
     }
     if ($sig === true) {
         $sig = $this->parse_sig_cert($cert_file, $validity);
     } else {
         $errorstr = $this->get_openssl_error();
         $sig = new enigma_error(enigma_error::INTERNAL, $errorstr);
     }
     // remove temp files
     @unlink($msg_file);
     @unlink($cert_file);
     return $sig;
 }
开发者ID:JotapePinheiro,项目名称:roundcubemail,代码行数:33,代码来源:enigma_driver_phpssl.php


示例7: verify

 /**
  * Verify a integrity of a signed message
  *
  * @return array
  */
 public static function verify($rawHeaders, $rawBody, $fromEmail, $smime)
 {
     $return = array();
     $path = Tinebase_Core::getTempDir();
     $translate = Tinebase_Translation::getTranslation('Expressomail');
     $ret_type = False;
     if (!empty($rawHeaders) && !empty($rawBody)) {
         $msg = $rawHeaders . $rawBody;
         $ret_type = null;
         if ($smime == Expressomail_Smime::TYPE_ENVELOPED_DATA_VALUE || $smime == Expressomail_Smime::TYPE_SIGNED_DATA_VALUE) {
             $ret_type = self::verify_p7m($rawBody);
             // Encrypted Message ??
             if ($ret_type == 'cipher') {
                 $return['success'] = false;
                 $return['msgs'] = array("Encrypted Message.");
                 $return['ret_type'] = $ret_type;
                 // return raw msg to others process.
                 $return['content'] = $msg;
                 return $return;
             }
         }
         $config = Tinebase_Config::getInstance()->get('modssl');
         // creates temporary files
         $temporary_files = array();
         $msgTempFile = self::generateTempFilename($temporary_files, $path);
         if (!self::writeTo($msgTempFile, $msg)) {
             $return['success'] = false;
             $return['msgs'] = array("Coudn't write temporary files!");
         }
         $certificateTempFile = self::generateTempFilename($temporary_files, $path);
         $contentTempFile = self::generateTempFilename($temporary_files, $path);
         // do verification
         $result = openssl_pkcs7_verify($msgTempFile, 0, $certificateTempFile, array($config->casfile), $config->casfile, $contentTempFile);
         if (is_file($certificateTempFile)) {
             $aux_certificate = file_get_contents($certificateTempFile);
         } else {
             $aux_certificate = '';
         }
         if ($aux_certificate != '') {
             // E-mail validation is unskipable, we always verify chain and crls
             $certificate = Custom_Auth_ModSsl_Certificate_Factory::buildCertificate($aux_certificate, TRUE);
         } else {
             // try get certificate from message (other way) ....
             $certificate = self::pullCertificateFromMessage($msgTempFile);
         }
         if ($result === -1 || !$result) {
             // error on openssl_pkcs7_verify() call
             $return['success'] = false;
             $return['msgs'] = self::getOpensslErrors();
             if ($certificate) {
                 $return['certificate'] = $certificate->toArray();
             }
         } else {
             $mailMismatch = $fromEmail !== $certificate->getEmail();
             if ($certificate->isValid()) {
                 if (!$mailMismatch) {
                     $return['success'] = true;
                     $return['msgs'] = array('Message Verification Successful');
                 }
                 // If certificate is valid store it in database
                 $controller = Addressbook_Controller_Certificate::getInstance();
                 try {
                     $controller->create(new Addressbook_Model_Certificate($certificate));
                 } catch (Tinebase_Exception_Duplicate $e) {
                     // Fail silently if certificate already exists
                 }
             } else {
                 $return['success'] = false;
                 $return['msgs'] = $certificate->getStatusErrors();
                 if ($mailMismatch) {
                     $return['msgs'][] = $translate->_('Sender\'s email is different from Digital Certificate\'s email');
                 }
             }
             $return['certificate'] = $certificate->toArray();
         }
         if (is_file($contentTempFile)) {
             // get original msg
             $return['content'] = file_get_contents($contentTempFile);
         }
         if ($ret_type) {
             $return['ret_type'] = $ret_type;
         }
         self::removeTempFiles($temporary_files);
         return $return;
     } else {
         return array('success' => false, 'msgs' => array("Empty message"));
     }
 }
开发者ID:ingoratsdorf,项目名称:Tine-2.0-Open-Source-Groupware-and-CRM,代码行数:93,代码来源:Smime.php


示例8: _load_signed_file

 /**
  * @fn string _load_signed_file(string $filename)
  * @brief A function which loads the data from SMIME siggned file.
  *
  * This function loads the data from SMIME (PKCS7) signed file, verify file sign for validity of
  * SmartPPC6 system.
  *
  * @param $filename a string which contains name of the SMIME signed file.
  * @return a string which contains contents of SMIME signed file if sign is valid and sign was made
  *         with valid SmartPPC6 cerificate or FALSE on failures.
  */
 function _load_signed_file($filename)
 {
     if (!file_exists($filename)) {
         return false;
     }
     // check CA certificate for validity of smartppc6
     $x509 = $this->_load_CA();
     if ($x509 === false) {
         return false;
     }
     openssl_x509_free($x509);
     // check signer certificate for validity of smartppc6
     $x509 = $this->_load_cert();
     if ($x509 === false) {
         return false;
     }
     openssl_x509_free($x509);
     $signer_cert_out = tempnam('/tmp', 'smartppc6');
     $content_out = tempnam('/tmp', 'smartppc6');
     $result_content = false;
     $phpversion = phpversion();
     if (version_compare($phpversion, "5.1.0", "<")) {
         $cmd = sprintf('openssl smime -signer %s -verify -in %s -nointern -nochain -CAfile %s -certfile %s -out %s 2> /dev/null', escapeshellcmd($signer_cert_out), escapeshellcmd($filename), escapeshellcmd(SSL_CA_FILE), escapeshellcmd(SSL_CERT_FILE), escapeshellcmd($content_out));
         system($cmd, $retval);
         if ($retval == 0) {
             $result = true;
         }
     } else {
         $result = openssl_pkcs7_verify($filename, PKCS7_NOVERIFY, $signer_cert_out, array(SSL_CA_FILE), SSL_CERT_FILE, $content_out);
     }
     if ($result === true) {
         $result_content = file_get_contents($content_out);
     }
     if (file_exists($signer_cert_out)) {
         unlink($signer_cert_out);
     }
     if (file_exists($content_out)) {
         unlink($content_out);
     }
     return $result_content;
 }
开发者ID:sabril-2t,项目名称:Open-Ad-Server,代码行数:52,代码来源:MY_Loader.php


示例9: verifyx509

 public function verifyx509($fin, $fout, $c = array(), $p = null, $o = null, $f = PKCS7_TEXT)
 {
     openssl_pkcs7_verify($fin, $f, $fout, $c, $p, $o);
     return $fout;
 }
开发者ID:jas-,项目名称:jQuery.pidCrypt,代码行数:5,代码来源:class.openssl.php


示例10: verify

 /**
  * @param string $mime
  * @param $chain
  *
  * @return bool
  */
 public function verify(string $mime, $chain) : bool
 {
     $inputFileName = new TempFile('smime_signed_');
     $inputFileName->setContent($mime);
     $status = openssl_pkcs7_verify($inputFileName, $this->getFlags(), '/dev/null', [], $chain);
     if (!is_bool($status)) {
         throw new RuntimeException(OpenSSL::getLastError());
     }
     return $status;
 }
开发者ID:blar,项目名称:openssl,代码行数:16,代码来源:Pkcs7.php


示例11: __checkSignatureAndGetSigner

 /**
  * __checkSignatureAndGetSigner - Checks the signature and extracts the signer certificate and it's serialnumber
  * #params     string    Base64 encoded signature
  * #params     string    verification of the message that should have been signed
  * #params     string    location of Certificate Authority file that should be used during verificaton
  * @return     boolean   
  */
 private function __checkSignatureAndGetSigner($signature, $message, $cafile)
 {
     assert('is_string($signature)');
     assert('is_string($message)');
     assert('is_string($cafile)');
     /* Check for provided file existence */
     if (!file_exists($cafile)) {
         trigger_error('mobileid::__checkSignatureAndGetSigner: file not found ' . $cafile, E_USER_WARNING);
     }
     /* Define temporary files */
     $tmpfile = tempnam(sys_get_temp_dir(), '_mid_');
     $file_sig = $tmpfile . '.sig';
     $file_sig_cert = $tmpfile . '.crt';
     $file_sig_msg = $tmpfile . '.msg';
     /* Chunk spliting the signature */
     $signature = chunk_split($signature, 64, "\n");
     /* This because the openssl_pkcs7_verify() function needs some mime headers to make it work */
     $signature = "MIME-Version: 1.0\nContent-Disposition: attachment;\n        filename=\"dummy.p7m\"\nContent-Type: application/x-pkcs7-mime;\n        name=\"dummy.p7m\"\nContent-Transfer-Encoding: base64\n\n" . $signature;
     /* Write the signature into temp files */
     file_put_contents($file_sig, $signature);
     /* Signature checks must explicitly succeed */
     $ok = false;
     /* Get the signer certificate */
     $status = openssl_pkcs7_verify($file_sig, PKCS7_NOVERIFY, $file_sig_cert);
     if ($status == true && file_exists($file_sig_cert)) {
         /* Get the signer certificate and details */
         $this->mid_certificate = file_get_contents($file_sig_cert);
         $certificate = openssl_x509_parse($this->mid_certificate);
         $this->mid_serialnumber = $certificate['subject']['serialNumber'];
         /* Verify message has been signed */
         $data = '';
         $status = openssl_pkcs7_verify($file_sig, PKCS7_NOVERIFY, $file_sig_cert, array($cafile), $file_sig_cert, $file_sig_msg);
         if (file_exists($file_sig_msg)) {
             $data = file_get_contents($file_sig_msg);
             if ($data === $message) {
                 $ok = true;
             }
         } else {
             trigger_error('mobileid::__checkSignatureAndGetSigner: signed message ' . openssl_error_string(), E_USER_NOTICE);
         }
         /* Verify signer issued by trusted CA */
         $status = openssl_x509_checkpurpose($this->mid_certificate, X509_PURPOSE_SSL_CLIENT, array($cafile));
         if ($status != true) {
             $ok = false;
             trigger_error('mobileid::__checkSignatureAndGetSigner: certificate check ' . openssl_error_string(), E_USER_NOTICE);
         }
     } else {
         trigger_error('mobileid::__checkSignatureAndGetSigner: signer certificate ' . openssl_error_string(), E_USER_NOTICE);
     }
     /* Cleanup of temporary files */
     if (file_exists($tmpfile)) {
         unlink($tmpfile);
     }
     if (file_exists($file_sig)) {
         unlink($file_sig);
     }
     if (file_exists($file_sig_cert)) {
         unlink($file_sig_cert);
     }
     if (file_exists($file_sig_msg)) {
         unlink($file_sig_msg);
     }
     /* Signature checks failed? */
     if (!$ok) {
         $this->statuscode = '503';
         $this->statusmessage = 'INVALID_SIGNATURE';
     }
     return $ok;
 }
开发者ID:mehulsbhatt,项目名称:mobileid,代码行数:76,代码来源:mobileid.php


示例12: actionVerify

 public function actionVerify($params)
 {
     $response['success'] = true;
     $params['email'] = strtolower($params['email']);
     //if file was already stored somewhere after decryption
     if (!empty($params['cert_id'])) {
         $cert = \GO\Smime\Model\PublicCertificate::model()->findByPk($params['cert_id']);
         $certData = $cert->cert;
     } else {
         //			if (!empty($params['filepath'])) {
         //				$srcFile = new \GO\Base\Fs\File(\GO::config()->tmpdir.$params['filepath']);
         if (!empty($params['account_id'])) {
             $account = \GO\Email\Model\Account::model()->findByPk($params['account_id']);
             $imapMessage = \GO\Email\Model\ImapMessage::model()->findByUid($account, $params['mailbox'], $params['uid']);
             $srcFile = \GO\Base\Fs\File::tempFile();
             if (!$imapMessage->saveToFile($srcFile->path())) {
                 throw new \Exception("Could not fetch message from IMAP server");
             }
             $this->_decryptFile($srcFile, $account);
         }
         //			throw new \Exception($srcFile->path());
         $pubCertFile = \GO\Base\Fs\File::tempFile();
         //Command line:
         //openssl smime -verify -in msg.txt
         $valid = openssl_pkcs7_verify($srcFile->path(), null, $pubCertFile->path(), $this->_getRootCertificates());
         //Adding the PKCS7_NOVERIFY flag was used for testing some messages that could not be verified by openssl but did in Mozilla thunderbird.
         //Error msg: error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error
         //
         //			$valid = openssl_pkcs7_verify($srcFile->path(), PKCS7_NOVERIFY, $pubCertFile->path(), $this->_getRootCertificates());
         //			throw new \Exception($srcFile->path());
         $srcFile->delete();
         if ($valid) {
             if ($pubCertFile->exists()) {
                 $certData = $pubCertFile->getContents();
                 $arr = openssl_x509_parse($certData);
                 $senderEmailStr = !empty($arr['extensions']['subjectAltName']) ? $arr['extensions']['subjectAltName'] : $arr['subject']['emailAddress'];
                 $senderEmails = explode(',', $senderEmailStr);
                 $emails = array();
                 foreach ($senderEmails as $emailRaw) {
                     $email = strtolower(\GO\Base\Util\String::get_email_from_string($emailRaw));
                     if ($email) {
                         $emails[] = $email;
                     }
                 }
                 $pubCertFile->delete();
                 $this->_savePublicCertificate($certData, $emails);
             } else {
                 throw new \Exception('Certificate appears to be valid but could not get certificate from signature. SSL Error: ' . openssl_error_string());
             }
             if (empty($certData)) {
                 throw new \Exception('Certificate appears to be valid but could not get certificate from signature.');
             }
         }
     }
     if (!isset($arr) && isset($certData)) {
         $arr = openssl_x509_parse($certData);
         $senderEmailStr = !empty($arr['extensions']['subjectAltName']) ? $arr['extensions']['subjectAltName'] : $arr['subject']['emailAddress'];
         $emails = array();
         foreach ($senderEmails as $emailRaw) {
             $email = strtolower(\GO\Base\Util\String::get_email_from_string($emailRaw));
             if ($email) {
                 $emails[] = $email;
             }
         }
     } else {
         if (empty($emails)) {
             $emails = array('unknown');
         }
     }
     $response['html'] = '';
     $response['cls'] = '';
     $response['text'] = '';
     if (isset($params['account_id'])) {
         if (!$valid) {
             $response['cls'] = 'smi-invalid';
             $response['text'] = \GO::t('invalidCert', 'smime');
             $response['html'] .= '<h1 class="smi-invalid">' . \GO::t('invalidCert', 'smime') . '</h1>';
             $response['html'] .= '<p>';
             while ($msg = openssl_error_string()) {
                 $response['html'] .= $msg . "<br />\n";
             }
             $response['html'] .= '</p>';
         } else {
             if (!in_array($params['email'], $emails)) {
                 $response['cls'] = 'smi-certemailmismatch';
                 $response['text'] = \GO::t('certEmailMismatch', 'smime');
                 $response['html'] .= $response['short_html'] = '<h1 class="smi-certemailmismatch">' . \GO::t('certEmailMismatch', 'smime') . '</h1>';
             } else {
                 $response['cls'] = 'smi-valid';
                 $response['text'] = \GO::t('validCert', 'smime');
                 $response['html'] .= $response['short_html'] = '<h1 class="smi-valid">' . \GO::t('validCert', 'smime') . '</h1>';
             }
         }
     }
     if (!isset($params['account_id']) || $valid) {
         $response['html'] .= '<table>';
         $response['html'] .= '<tr><td width="100">' . \GO::t('name') . ':</td><td>' . $arr['name'] . '</td></tr>';
         $response['html'] .= '<tr><td width="100">' . \GO::t('email', 'smime') . ':</td><td>' . implode(', ', $emails) . '</td></tr>';
         $response['html'] .= '<tr><td>' . \GO::t('hash', 'smime') . ':</td><td>' . $arr['hash'] . '</td></tr>';
         $response['html'] .= '<tr><td>' . \GO::t('serial_number', 'smime') . ':</td><td>' . $arr['serialNumber'] . '</td></tr>';
//.........这里部分代码省略.........
开发者ID:ajaboa,项目名称:crmpuan,代码行数:101,代码来源:CertificateController.php


示例13: toOutputArray

 public static function toOutputArray(array &$response, \GO\Email\Model\ImapMessage $imapMessage)
 {
     if ($imapMessage->content_type == 'application/x-pkcs7-mime') {
         $imapMessage->content_type = 'application/pkcs7-mime';
     }
     if ($imapMessage->content_type == 'application/pkcs7-mime' && isset($imapMessage->content_type_attributes['smime-type']) && $imapMessage->content_type_attributes['smime-type'] == 'signed-data') {
         //signed data but not in clear text. Outlook has this option.
         $outfile = \GO\Base\Fs\File::tempFile();
         $imapMessage->getImapConnection()->save_to_file($imapMessage->uid, $outfile->path());
         $verifyOutfile = \GO\Base\Fs\File::tempFile();
         //			$cmd = '/usr/bin/openssl smime -verify -in ' . $outfile->path() . ' -out ' . $verifyOutfile->path();
         //			exec($cmd);
         //
         //PHP can't output the verified data without the signature without
         //suppling the extracerts option. We generated a dummy certificate for
         //this.
         openssl_pkcs7_verify($outfile->path(), null, "/dev/null", array(), GO::config()->root_path . "modules/smime/dummycert.pem", $verifyOutfile->path());
         $message = \GO\Email\Model\SavedMessage::model()->createFromMimeData($verifyOutfile->getContents());
         //remove temp files
         $outfile->delete();
         $verifyOutfile->delete();
         $newResponse = $message->toOutputArray(true);
         unset($newResponse['to']);
         unset($newResponse['cc']);
         foreach ($newResponse as $key => $value) {
             if (!empty($value) || $key == 'attachments') {
                 $response[$key] = $value;
             }
         }
         //			$response['path'] = $outfile->stripTempPath();
         return;
     }
     if ($imapMessage->content_type == 'application/pkcs7-mime') {
         $encrypted = !isset($imapMessage->content_type_attributes['smime-type']) || $imapMessage->content_type_attributes['smime-type'] != 'signed-data';
         if ($encrypted) {
             GO::debug("Message is encrypted");
             $cert = Model\Certificate::model()->findByPk($imapMessage->account->id);
             if (!$cert || empty($cert->cert)) {
                 GO::debug('SMIME: No private key at all found for this account');
                 $response['htmlbody'] = GO::t('noPrivateKeyForDecrypt', 'smime');
                 return false;
             }
             if (isset($_REQUEST['password'])) {
                 GO::session()->values['smime']['passwords'][$imapMessage->account->id] = $_REQUEST['password'];
             }
             if (!isset(GO::session()->values['smime']['passwords'][$imapMessage->account->id])) {
                 $response['askPassword'] = true;
                 GO::debug("Need to ask for password");
                 return false;
             }
         }
         $attachments = $imapMessage->getAttachments();
         $att = array_shift($attachments);
         //			array (
         //      'type' => 'application',
         //      'subtype' => 'pkcs7-mime',
         //      'smime-type' => 'enveloped-data',
         //      'name' => 'smime.p7m',
         //      'id' => false,
         //      'encoding' => 'base64',
         //      'size' => '2302',
         //      'md5' => false,
         //      'disposition' => false,
         //      'language' => false,
         //      'location' => false,
         //      'charset' => false,
         //      'lines' => false,
         //      'number' => 1,
         //      'extension' => 'p7m',
         //      'human_size' => '2,2 KB',
         //      'tmp_file' => false,
         //    )
         $infile = \GO\Base\Fs\File::tempFile();
         $outfile = \GO\Base\Fs\File::tempFile();
         //$outfilerel = $reldir . 'unencrypted.txt';
         if ($encrypted) {
             GO::debug('Message is encrypted');
             //				$imapMessage->getImapConnection()->save_to_file($imapMessage->uid, $infile->path(), 'TEXT', 'base64');
             //				throw new \Exception($infile->path());
             if (!$imapMessage->saveToFile($infile->path())) {
                 throw new \Exception("Could not save IMAP message to file for decryption");
             }
             $password = GO::session()->values['smime']['passwords'][$imapMessage->account->id];
             openssl_pkcs12_read($cert->cert, $certs, $password);
             if (empty($certs)) {
                 //password invalid
                 $response['askPassword'] = true;
                 GO::debug("Invalid password");
                 return false;
             }
             $return = openssl_pkcs7_decrypt($infile->path(), $outfile->path(), $certs['cert'], array($certs['pkey'], $password));
             $infile->delete();
             if (!$return || !$outfile->exists() || !$outfile->size()) {
                 $response['htmlbody'] = GO::t('decryptionFailed', 'smime') . '<br />';
                 while ($str = openssl_error_string()) {
                     $response['htmlbody'] .= '<br />' . $str;
                 }
                 GO::debug("Decryption failed");
                 return false;
             } else {
//.........这里部分代码省略.........
开发者ID:ajaboa,项目名称:crmpuan,代码行数:101,代码来源:EventHandlers.php


示例14: verify

 /**
  * Verify a signature using via S/MIME.
  *
  * @param string $text  The multipart/signed data to be verified.
  * @param mixed $certs  Either a single or array of root certificates.
  *
  * @return stdClass  Object with the following elements:
  * <pre>
  * cert - (string) The certificate of the signer stored in the message (in
  *        PEM format).
  * email - (string) The email of the signing person.
  * msg - (string) Status string.
  * verify - (boolean) True if certificate was verified.
  * </pre>
  * @throws Horde_Crypt_Exception
  */
 public function verify($text, $certs)
 {
     /* Check for availability of OpenSSL PHP extension. */
     $this->checkForOpenSSL();
     /* Create temp files for input/output. */
     $input = $this->_createTempFile('horde-smime');
     $output = $this->_createTempFile('horde-smime');
     /* Write text to file */
     file_put_contents($input, $text);
     unset($text);
     $root_certs = array();
     if (!is_array($certs)) {
         $certs = array($certs);
     }
     foreach ($certs as $file) {
         if (file_exists($file)) {
             $root_certs[] = $file;
         }
     }
     $ob = new stdClass();
     if (!empty($root_certs) && openssl_pkcs7_verify($input, 0, $output, $root_certs) === true) {
         /* Message verified */
         $ob->msg = Horde_Crypt_Translation::t("Message verified successfully.");
         $ob->verify = true;
     } else {
         /* Try again without verfying the signer's cert */
         $result = openssl_pkcs7_verify($input, PKCS7_NOVERIFY, $output);
         if ($result === -1) {
             throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("Verification failed - an unknown error has occurred."));
         } elseif ($result === false) {
             throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("Verification failed - this message may have been tampered with."));
         }
         $ob->msg = Horde_Crypt_Translation::t("Message verified successfully but the signer's certificate could not be verified.");
         $ob->verify = false;
     }
     $ob->cert = file_get_contents($output);
     $ob->email = $this->getEmailFromKey($ob->cert);
     return $ob;
 }
开发者ID:jubinpatel,项目名称:horde,代码行数:55,代码来源:Smime.php



注:本文中的openssl_pkcs7_verify函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
PHP openssl_pkey_export函数代码示例发布时间:2022-05-15
下一篇:
PHP openssl_pkcs7_sign函数代码示例发布时间:2022-05-15
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap