Changeset 2394


Ignore:
Timestamp:
03/31/10 13:05:14 (14 years ago)
Author:
rafaelraymundo
Message:

Ticket #1021 - Corrigida rotina de obtenção da url da crl no certificado digital

Location:
branches/2.1/security/classes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2.1/security/classes/CertificadoB.php

    r1636 r2394  
    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        { 
     
    166166                while ($erro = openssl_error_string()); //  Limpa buffer de erros anteriores...... 
    167167                $this->erros_ssl = array(); 
    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; 
     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;  
    170170                if($resultado === false || $resultado == -1) 
    171171                { 
    172                         # Indica ocorrencia de erro ... 
     172                        # Indica ocorrencia de erro ...  
    173173                        $retorno = false; 
    174174                        // Guarda msgs de erro ... 
    175                         while ($erro = openssl_error_string()) 
    176                         { 
     175                        while ($erro = openssl_error_string())  
     176                        {  
    177177                                $this->erros_ssl[] = $erro; 
    178178                        } 
    179                         If(file_exists($vrf_msg_arquivo_temporario)) 
     179                        If(file_exists($vrf_msg_arquivo_temporario))   
    180180                                { 
    181181                                        $this->msg_sem_assinatura =  file_get_contents($vrf_msg_arquivo_temporario); 
     
    190190                        { 
    191191                                # Se nao foi possivel obter o certificado retorna com falso ..... 
    192                                 If(file_exists($vrf_msg_arquivo_temporario)) 
     192                                If(file_exists($vrf_msg_arquivo_temporario))   
    193193                                        { 
    194194                                                $this->msg_sem_assinatura =  file_get_contents($vrf_msg_arquivo_temporario); 
     
    218218                { 
    219219                        while ($erro = openssl_error_string()); //  Limpa buffer de erros anteriores...... 
    220                         # Certificado poderia ter assinado um email?? 
     220                        # Certificado poderia ter assinado um email??  
    221221                        if(!($this->dados['KEYUSAGE']['digitalSignature'])) 
    222222                        { 
    223223                                $this->erros_ssl[] = 'Certificado nao poderia ter sido utilizado para assinar email.'; 
    224                                 while ($erro = openssl_error_string()) 
    225                                         { 
     224                                while ($erro = openssl_error_string())  
     225                                        {  
    226226                                                $this->erros_ssl[] = $erro; 
    227227                                        } 
     
    242242                } 
    243243                deleta_arquivos_temporarios($this->arquivos_para_deletar); 
    244                 $this->arquivos_para_deletar = array(); 
     244                $this->arquivos_para_deletar = array();  
    245245                return $retorno; 
    246         } 
     246        }        
    247247 
    248248        public function extrai_certificado_da_msg_assinada($m) 
     
    294294                                        $retorno = $item; 
    295295                                        break; 
    296                                 } 
     296                                }                
    297297                } 
    298298                deleta_arquivos_temporarios($this->arquivos_para_deletar); 
  • branches/2.1/security/classes/funcoes_auxiliares.php

    r1574 r2394  
    13541354 
    13551355                                case 0xa0: 
     1356                                case 0xa4: 
    13561357                                        // Extensions 
    13571358                                        $len = ord($data[1]); 
     
    16081609        { 
    16091610                $AUX = recupera_dados_oid($certificado_digital_formato_der,'2.5.29.31'); 
     1611                echo '<br/><br/><br/><pre>'; 
     1612                print_r($AUX); 
     1613                echo '</pre><br/><br/>'; 
     1614                exit(); 
     1615                 
     1616                 
    16101617                $i=1; 
    16111618                if(substr($AUX[0][1][0],0,7) == 'boolean') 
     
    16341641                                                foreach($AUX[0][$i][1][1] as $crl) 
    16351642                                                  { 
    1636                                                       if(substr($crl[1][0][1][0][1][0][1],0,4) == 'http') 
     1643                                                      if(substr($crl[1][0][1][0][1][0][1],0,4) == 'http' || substr($crl[1][0][1][0][1][0][1],0,4) == 'ldap') 
    16371644                                                        { 
    16381645                                                                $ret[] = $crl[1][0][1][0][1][0][1]; 
     
    16401647                                                  } 
    16411648                                          } 
    1642                           } 
     1649                        } 
     1650                 
     1651                // Se $ret esta vazio tenta obter crls em outra estrutura(outro layout). 
     1652                if(count($ret) == 0) 
     1653                        { 
     1654                                if(is_array($AUX[0][1][1][1][0][1][0][1][0][1][0])) 
     1655                                        { 
     1656                                                //Pode existir mais de um local para obter a CRL. 
     1657                                                foreach($AUX[0][1][1][1][0][1][0][1][0][1][0]as $crl) 
     1658                                                        { 
     1659                                                                if(substr($crl[1],0,4) == 'http' || substr($crl[1],0,4) == 'ldap') 
     1660                                                                        { 
     1661                                                                                $ret[] = $crl[1]; 
     1662                                                                        } 
     1663                                                        } 
     1664                                          } 
     1665                        } 
     1666                         
    16431667                return array('CRLDISTRIBUTIONPOINTS' => $ret); 
    16441668        }        
Note: See TracChangeset for help on using the changeset viewer.