Ignore:
Timestamp:
11/13/09 10:18:18 (14 years ago)
Author:
rafaelraymundo
Message:

Ticket #794 - Corrige o vercert/CertificadoB para "setar" a vrs do ldap qdo acessar usercertificate

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/security/classes/CertificadoB.php

    r1574 r1636  
    99  public $dados = array();        # Area para armazenar os dados recuperados do certificado. 
    1010  public $apresentado = false;    # Deve ser testado para verificar se no certificado processado foi localizado o CPF 
    11   public $erros_ssl = array();  
    12   public $cert_assinante = '';   
     11  public $erros_ssl = array(); 
     12  public $cert_assinante = ''; 
    1313  public $msg_sem_assinatura = '';  #conteï¿œdo da mensagem sem assinatura, que retorna da funᅵᅵo verify do openssl 
    1414  public $arquivos_para_deletar = array(); 
    15    
     15 
    1616  public function __construct() 
    1717  { 
     
    3232public function __destruct() 
    3333  { 
    34     #Remover arquivos temporarios.....   
     34    #Remover arquivos temporarios..... 
    3535    deleta_arquivos_temporarios($this->arquivos_para_deletar); 
    3636  } 
    3737 
    38 # Recupera dados de um certificado no formato pem  
     38# Recupera dados de um certificado no formato pem 
    3939  function certificado($certificado_pem) 
    40   {              
    41       if (!$certificado_pem)  
     40  { 
     41      if (!$certificado_pem) 
    4242    { 
    4343        $this->apresentado = False; 
     
    4646   $this->dados = recupera_dados_do_ceritificado_digital($certificado_pem); 
    4747   $this->dados_xml = gera_xml_com_dados_do_certificado($this->dados); 
    48      # Certificado foi processado, as informacoes obtidas estao em $this->dados.  
    49   $this->apresentado = true;   
     48     # Certificado foi processado, as informacoes obtidas estao em $this->dados. 
     49  $this->apresentado = true; 
    5050  } 
    5151 
     
    7171 
    7272                $w = exec('openssl rsautl -in ' . $senha_arquivo_temporario . ' -out ' . $senha_criptografada_arquivo_temporario . ' -inkey ' . $cert_arquivo_temporario . ' -certin -pkcs -keyform PEM -encrypt',$saida); 
    73                  
     73 
    7474                if(!file_exists($senha_criptografada_arquivo_temporario)) 
    7575                { 
     
    7979                } 
    8080 
    81                 # Recupera a senha criptada, binario.....                
     81                # Recupera a senha criptada, binario..... 
    8282                $retorno = file_get_contents($senha_criptografada_arquivo_temporario); 
    8383 
     
    9797                if(!is_array($c))       return false; 
    9898                $aux = count($c); 
    99                 if($aux < 1)    return false;            
     99                if($aux < 1)    return false; 
    100100                if(!is_array($h) )      return false; 
    101101                # Tem de verificar todos os certificados que serao utilizados para criptografar a msg.. 
     
    109109                $enc_arquivo_temporario = gera_nome_arquivo_temporario(&$this->arquivos_para_deletar); 
    110110                //echo $enc_arquivo_temporario.'<br>'; 
    111                  
     111 
    112112                // LIMPA ERROS ... Pode ser um problema para outras aplicacoes que usam openssl(fonte de erros unica). 
    113113                while ($erro = openssl_error_string()); //  Limpa buffer de erros anteriores...... 
     
    118118                { 
    119119                        // Guarda msgs de erro ... 
    120                         while ($erro = openssl_error_string())  
    121                         {  
     120                        while ($erro = openssl_error_string()) 
     121                        { 
    122122                                $this->erros_ssl[] = $erro; 
    123123                        } 
     
    126126                        return false; 
    127127                } 
    128                 # Recupera a msg criptada......          
     128                # Recupera a msg criptada...... 
    129129                $retorno = file_get_contents($enc_arquivo_temporario); 
    130130                deleta_arquivos_temporarios($this->arquivos_para_deletar); 
     
    134134 
    135135 
    136 # Verifica uma msg($m) assinada...  
     136# Verifica uma msg($m) assinada... 
    137137        public function verificar($m) 
    138138        { 
    139139                if($m == '') return false; 
    140                 $m_arquivo_temporario = gera_nome_arquivo_temporario(&$this->arquivos_para_deletar); 
     140                if(!$m_arquivo_temporario = gera_nome_arquivo_temporario(&$this->arquivos_para_deletar)) 
     141                    { 
     142                        $this->erros_ssl[] = 'Não foi possível verificar a assinatura gerada. Contate o administrador'; 
     143                        $this->arquivos_para_deletar = array(); 
     144                        return false; 
     145                    } 
    141146                if(!grava_arquivo($m_arquivo_temporario,$m)) 
    142147                { 
    143                         deleta_arquivos_temporarios($this->arquivos_para_deletar); 
    144                         $this->arquivos_para_deletar = array(); 
    145                         return false; 
    146                 } 
    147                 $vrf_cert_arquivo_temporario = gera_nome_arquivo_temporario(&$this->arquivos_para_deletar); 
    148                 $vrf_msg_arquivo_temporario = gera_nome_arquivo_temporario(&$this->arquivos_para_deletar); 
     148                        $this->erros_ssl[] = 'Não foi possível verificar a assinatura gerada. Contate o administrador'; 
     149                        deleta_arquivos_temporarios($this->arquivos_para_deletar); 
     150                        $this->arquivos_para_deletar = array(); 
     151                        return false; 
     152                } 
     153                if(!$vrf_cert_arquivo_temporario = gera_nome_arquivo_temporario(&$this->arquivos_para_deletar)) 
     154                    { 
     155                        $this->erros_ssl[] = 'Não foi possível verificar a assinatura gerada. Contate o administrador'; 
     156                        $this->arquivos_para_deletar = array(); 
     157                        return false; 
     158                    } 
     159                if(!$vrf_msg_arquivo_temporario = gera_nome_arquivo_temporario(&$this->arquivos_para_deletar)) 
     160                    { 
     161                        $this->erros_ssl[] = 'Não foi possível verificar a assinatura gerada. Contate o administrador'; 
     162                        $this->arquivos_para_deletar = array(); 
     163                        return false; 
     164                    } 
    149165                // LIMPA ERROS ... Pode ser um problema para outras aplicacoes que usam openssl(fonte de erros unica). 
    150166                while ($erro = openssl_error_string()); //  Limpa buffer de erros anteriores...... 
    151167                $this->erros_ssl = array(); 
    152                 $resultado = openssl_pkcs7_verify($m_arquivo_temporario,0, $vrf_cert_arquivo_temporario,array($GLOBALS['CAs']),$GLOBALS['CAs'],$vrf_msg_arquivo_temporario);  
    153                 $retorno = true;  
     168                $resultado = openssl_pkcs7_verify($m_arquivo_temporario,0, $vrf_cert_arquivo_temporario,array($GLOBALS['CAs']),$GLOBALS['CAs'],$vrf_msg_arquivo_temporario); 
     169                $retorno = true; 
    154170                if($resultado === false || $resultado == -1) 
    155171                { 
    156                         # Indica ocorrencia de erro ...  
     172                        # Indica ocorrencia de erro ... 
    157173                        $retorno = false; 
    158174                        // Guarda msgs de erro ... 
    159                         while ($erro = openssl_error_string())  
    160                         {  
     175                        while ($erro = openssl_error_string()) 
     176                        { 
    161177                                $this->erros_ssl[] = $erro; 
    162178                        } 
    163                         If(file_exists($vrf_msg_arquivo_temporario))   
     179                        If(file_exists($vrf_msg_arquivo_temporario)) 
    164180                                { 
    165181                                        $this->msg_sem_assinatura =  file_get_contents($vrf_msg_arquivo_temporario); 
     
    174190                        { 
    175191                                # Se nao foi possivel obter o certificado retorna com falso ..... 
    176                                 If(file_exists($vrf_msg_arquivo_temporario))   
     192                                If(file_exists($vrf_msg_arquivo_temporario)) 
    177193                                        { 
    178194                                                $this->msg_sem_assinatura =  file_get_contents($vrf_msg_arquivo_temporario); 
     
    202218                { 
    203219                        while ($erro = openssl_error_string()); //  Limpa buffer de erros anteriores...... 
    204                         # Certificado poderia ter assinado um email??  
     220                        # Certificado poderia ter assinado um email?? 
    205221                        if(!($this->dados['KEYUSAGE']['digitalSignature'])) 
    206222                        { 
    207223                                $this->erros_ssl[] = 'Certificado nao poderia ter sido utilizado para assinar email.'; 
    208                                 while ($erro = openssl_error_string())  
    209                                         {  
     224                                while ($erro = openssl_error_string()) 
     225                                        { 
    210226                                                $this->erros_ssl[] = $erro; 
    211227                                        } 
     
    226242                } 
    227243                deleta_arquivos_temporarios($this->arquivos_para_deletar); 
    228                 $this->arquivos_para_deletar = array();  
     244                $this->arquivos_para_deletar = array(); 
    229245                return $retorno; 
    230         }        
     246        } 
    231247 
    232248        public function extrai_certificado_da_msg_assinada($m) 
     
    278294                                        $retorno = $item; 
    279295                                        break; 
    280                                 }                
     296                                } 
    281297                } 
    282298                deleta_arquivos_temporarios($this->arquivos_para_deletar); 
Note: See TracChangeset for help on using the changeset viewer.