Ignore:
Timestamp:
04/12/11 09:27:42 (13 years ago)
Author:
rafaelraymundo
Message:

Ticket #1738 - Corrige falha no login com certificado digital.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2/security/vercert.php

    r3232 r3984  
    11<?php 
    2 function item_para_uid($dados_do_certificado) 
    3         { 
    4 /* 
    5 // Exemplo do Array $dados_do_certificado padrao ICP-BRASIL 
    6 // O conteudo do array pode variar conforme a AC emissora. 
    7 Array 
    8 ( 
    9     [SERIALNUMBER] => 2009031816232802 
    10     [EMISSOR_CAMINHO_COMPLETO] => Array 
    11         ( 
    12             [C] => BR 
    13             [O] => ICP-Brasil 
    14             [OU] => CSPB-1 
    15             [CN] => HOMAutoridade Certificadora do SERPRO Final v2 
    16         ) 
    17  
    18     [EMISSOR] => HOMAutoridade Certificadora do SERPRO Final v2 
    19     [INICIO_VALIDADE] => 20090318205216 
    20     [FIM_VALIDADE] => 20120317205216 
    21     [EXPIRADO] => 
    22     [SUBJECT] => Array 
    23         ( 
    24             [C] => BR 
    25             [O] => ICP-Brasil 
    26             [OU] => Pessoa Fisica A3 
    27             [CN] => CESAR VIANNA 
    28         ) 
    29  
    30     [NOME] => CESAR VIANNA 
    31     [AUTHORITYKEYIDENTIFIER] => AE34F397BB05B1AA6CC3FD6C4F0E9129BBB61BE2 
    32     [KEYUSAGE] => Array 
    33         ( 
    34             [digitalSignature] => 1 
    35             [nonRepudiation] => 1 
    36             [keyEncipherment] => 1 
    37         ) 
    38  
    39     [EXTKEYUSAGE] => Array 
    40         ( 
    41             [clientAuth] => 1.3.6.1.5.5.7.3.2 
    42             [emailProtection] => 1.3.6.1.5.5.7.3.4 
    43         ) 
    44  
    45     [CA] => 
    46     [CRLDISTRIBUTIONPOINTS] => Array 
    47         ( 
    48             [0] => http://ccdhom.serpro.gov.br/lcr/serproacfv2.crl 
    49             [1] => http://ccdhom.serpro.gov.br/lcr/serproacfv3.crl 
    50             [2] => http://ccdhom.serpro.gov.br/lcr/serproacfv4.crl 
    51         ) 
    52  
    53     [2.16.76.1.3.6] => Array 
    54         ( 
    55             [CADINSS] => 000000000000 
    56         ) 
    57  
    58     [CADINSS] => 000000000000 
    59     [2.16.76.1.3.5] => Array 
    60         ( 
    61             [TITULO] => 000000000000 
    62             [ZONA] => 000 
    63             [SECAO] => 0000 
    64             [TITULO_CIDADE_UF] => 
    65         ) 
    66  
    67     [TITULO] => 000000000000 
    68     [ZONA] => 000 
    69     [SECAO] => 0000 
    70     [TITULO_CIDADE_UF] => 
    71     [2.16.76.1.3.1] => Array 
    72         ( 
    73             [NASCIMENTO] => 19081981 
    74             [CPF] => 12345678902 
    75             [NIS] => 12345678901 
    76             [RG] => 000201075150953 
    77             [ORGAOUF] => SSPRS 
    78         ) 
    79  
    80     [NASCIMENTO] => 19081981 
    81     [CPF] =>  12345678902 
    82     [NIS] => 12345678901 
    83     [RG] => 000201075150953 
    84     [ORGAOUF] => SSPRS 
    85     [EMAIL] => cesar.vianna@pr.planalto.gov.br 
    86 ) 
    87 */ 
    88  
    89                 // Retorna o CPF para usar como uid. 
    90                 return $dados_do_certificado['2.16.76.1.3.1']['CPF']; 
    91         } 
    92  
    93  
    942$GLOBALS['phpgw_info']['flags'] = array( 
    953                'disable_Template_class' => True, 
     
    11826require_once('classes/Verifica_Certificado.php'); 
    11927include('classes/Verifica_Certificado_conf.php'); 
    120  
    121   # Transforma o certificado do formato PEM para o formato DER ... 
    122   function troca_espaco_por_mais($pem_data) 
    123   { 
    124     $begin = "CERTIFICATE-----"; 
    125     $end   = "-----END"; 
    126     $aux = substr($pem_data, strpos($pem_data, $begin)+strlen($begin)); 
    127     $aux = substr($aux, 0, strpos($aux, $end)); 
    128     $aux = strtr($aux,' ','+'); 
    129     $aux = '-----BEGIN CERTIFICATE-----'.$aux.'-----END CERTIFICATE-----'; 
    130     return $aux; 
    131   } 
    13228 
    13329$cert =str_replace(chr(0x0A).chr(0x0A),chr(0x0A),$_REQUEST['certificado']); 
     
    18480     } 
    18581      
    186     $filtro = 'uid='. item_para_uid($c->dados); 
     82    $filtro = 'uid='. $c->dados['2.16.76.1.3.1']['CPF']; 
    18783    $atributos = array(); 
    188     //$atributos[] = 'phpgwaccountexpires'; 
    189     $atributos[] = 'phpgwlastpasswdchange'; 
    190  
    191     if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao'])) 
    192                 { 
    193                     $atributos[] = $GLOBALS['phpgw_info']['server']['atributoexpiracao']; 
    194                 } 
    195  
     84    if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao']) && $GLOBALS['phpgw_info']['server']['atributoexpiracao']) 
     85        { 
     86            $atributos[] = $GLOBALS['phpgw_info']['server']['atributoexpiracao']; 
     87        } 
     88    else 
     89        { 
     90            $atributos[] = 'phpgwlastpasswdchange'; 
     91        } 
    19692     $atributos[] = "usercertificate"; 
    19793     $atributos[] = "phpgwaccountstatus"; 
     
    231127                        $aux1 = $info[0]["dn"]; 
    232128                        $user_info['usercertificate'] = $cert; 
    233                         if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao'])) 
     129                        if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao']) && $GLOBALS['phpgw_info']['server']['atributoexpiracao']) 
    234130                                { 
    235131                                        if(substr($info[0][$GLOBALS['phpgw_info']['server']['atributoexpiracao']][0],-1,1)=="Z") 
Note: See TracChangeset for help on using the changeset viewer.