Changeset 2394 for branches/2.1/security
- Timestamp:
- 03/31/10 13:05:14 (15 years ago)
- Location:
- branches/2.1/security/classes
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.1/security/classes/CertificadoB.php
r1636 r2394 9 9 public $dados = array(); # Area para armazenar os dados recuperados do certificado. 10 10 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 = ''; 13 13 public $msg_sem_assinatura = ''; #conteï¿œdo da mensagem sem assinatura, que retorna da funᅵᅵo verify do openssl 14 14 public $arquivos_para_deletar = array(); 15 15 16 16 public function __construct() 17 17 { … … 32 32 public function __destruct() 33 33 { 34 #Remover arquivos temporarios..... 34 #Remover arquivos temporarios..... 35 35 deleta_arquivos_temporarios($this->arquivos_para_deletar); 36 36 } 37 37 38 # Recupera dados de um certificado no formato pem 38 # Recupera dados de um certificado no formato pem 39 39 function certificado($certificado_pem) 40 { 41 if (!$certificado_pem) 40 { 41 if (!$certificado_pem) 42 42 { 43 43 $this->apresentado = False; … … 46 46 $this->dados = recupera_dados_do_ceritificado_digital($certificado_pem); 47 47 $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; 50 50 } 51 51 … … 71 71 72 72 $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 74 74 if(!file_exists($senha_criptografada_arquivo_temporario)) 75 75 { … … 79 79 } 80 80 81 # Recupera a senha criptada, binario..... 81 # Recupera a senha criptada, binario..... 82 82 $retorno = file_get_contents($senha_criptografada_arquivo_temporario); 83 83 … … 97 97 if(!is_array($c)) return false; 98 98 $aux = count($c); 99 if($aux < 1) return false; 99 if($aux < 1) return false; 100 100 if(!is_array($h) ) return false; 101 101 # Tem de verificar todos os certificados que serao utilizados para criptografar a msg.. … … 109 109 $enc_arquivo_temporario = gera_nome_arquivo_temporario(&$this->arquivos_para_deletar); 110 110 //echo $enc_arquivo_temporario.'<br>'; 111 111 112 112 // LIMPA ERROS ... Pode ser um problema para outras aplicacoes que usam openssl(fonte de erros unica). 113 113 while ($erro = openssl_error_string()); // Limpa buffer de erros anteriores...... … … 118 118 { 119 119 // Guarda msgs de erro ... 120 while ($erro = openssl_error_string()) 121 { 120 while ($erro = openssl_error_string()) 121 { 122 122 $this->erros_ssl[] = $erro; 123 123 } … … 126 126 return false; 127 127 } 128 # Recupera a msg criptada...... 128 # Recupera a msg criptada...... 129 129 $retorno = file_get_contents($enc_arquivo_temporario); 130 130 deleta_arquivos_temporarios($this->arquivos_para_deletar); … … 134 134 135 135 136 # Verifica uma msg($m) assinada... 136 # Verifica uma msg($m) assinada... 137 137 public function verificar($m) 138 138 { … … 166 166 while ($erro = openssl_error_string()); // Limpa buffer de erros anteriores...... 167 167 $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; 170 170 if($resultado === false || $resultado == -1) 171 171 { 172 # Indica ocorrencia de erro ... 172 # Indica ocorrencia de erro ... 173 173 $retorno = false; 174 174 // Guarda msgs de erro ... 175 while ($erro = openssl_error_string()) 176 { 175 while ($erro = openssl_error_string()) 176 { 177 177 $this->erros_ssl[] = $erro; 178 178 } 179 If(file_exists($vrf_msg_arquivo_temporario)) 179 If(file_exists($vrf_msg_arquivo_temporario)) 180 180 { 181 181 $this->msg_sem_assinatura = file_get_contents($vrf_msg_arquivo_temporario); … … 190 190 { 191 191 # 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)) 193 193 { 194 194 $this->msg_sem_assinatura = file_get_contents($vrf_msg_arquivo_temporario); … … 218 218 { 219 219 while ($erro = openssl_error_string()); // Limpa buffer de erros anteriores...... 220 # Certificado poderia ter assinado um email?? 220 # Certificado poderia ter assinado um email?? 221 221 if(!($this->dados['KEYUSAGE']['digitalSignature'])) 222 222 { 223 223 $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 { 226 226 $this->erros_ssl[] = $erro; 227 227 } … … 242 242 } 243 243 deleta_arquivos_temporarios($this->arquivos_para_deletar); 244 $this->arquivos_para_deletar = array(); 244 $this->arquivos_para_deletar = array(); 245 245 return $retorno; 246 } 246 } 247 247 248 248 public function extrai_certificado_da_msg_assinada($m) … … 294 294 $retorno = $item; 295 295 break; 296 } 296 } 297 297 } 298 298 deleta_arquivos_temporarios($this->arquivos_para_deletar); -
branches/2.1/security/classes/funcoes_auxiliares.php
r1574 r2394 1354 1354 1355 1355 case 0xa0: 1356 case 0xa4: 1356 1357 // Extensions 1357 1358 $len = ord($data[1]); … … 1608 1609 { 1609 1610 $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 1610 1617 $i=1; 1611 1618 if(substr($AUX[0][1][0],0,7) == 'boolean') … … 1634 1641 foreach($AUX[0][$i][1][1] as $crl) 1635 1642 { 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') 1637 1644 { 1638 1645 $ret[] = $crl[1][0][1][0][1][0][1]; … … 1640 1647 } 1641 1648 } 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 1643 1667 return array('CRLDISTRIBUTIONPOINTS' => $ret); 1644 1668 }
Note: See TracChangeset
for help on using the changeset viewer.