Changeset 3991 for branches/2.2.0.1
- Timestamp:
- 04/12/11 11:01:29 (13 years ago)
- Location:
- branches/2.2.0.1
- Files:
-
- 1 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.0.1/preferences/inc/hook_preferences.inc.php
r2 r3991 16 16 $file['Change your Password'] = $GLOBALS['phpgw']->link('/preferences/changepassword.php'); 17 17 } 18 if (isset($GLOBALS['phpgw_info']['server']['certificado'])) 19 { 20 if ($GLOBALS['phpgw_info']['server']['certificado']) 21 { 22 $file['Register Digital Certificate'] = $GLOBALS['phpgw']->link('/preferences/handlecertificate.php'); 23 } 24 } 18 25 $file['change your settings'] = $GLOBALS['phpgw']->link('/preferences/preferences.php','appname=preferences'); 19 26 -
branches/2.2.0.1/security/classes/funcoes_auxiliares.php
r3563 r3991 151 151 } 152 152 153 153 function troca_espaco_por_mais($pem_data) 154 { 155 $begin = "CERTIFICATE-----"; 156 $end = "-----END"; 157 $aux = substr($pem_data, strpos($pem_data, $begin)+strlen($begin)); 158 $aux = substr($aux, 0, strpos($aux, $end)); 159 $aux = strtr($aux,' ','+'); 160 $aux = '-----BEGIN CERTIFICATE-----'.$aux.'-----END CERTIFICATE-----'; 161 return $aux; 162 } 154 163 function verificaopenssl() 155 164 { -
branches/2.2.0.1/security/vercert.php
r3232 r3991 1 1 <?php 2 function item_para_uid($dados_do_certificado)3 {4 /*5 // Exemplo do Array $dados_do_certificado padrao ICP-BRASIL6 // O conteudo do array pode variar conforme a AC emissora.7 Array8 (9 [SERIALNUMBER] => 200903181623280210 [EMISSOR_CAMINHO_COMPLETO] => Array11 (12 [C] => BR13 [O] => ICP-Brasil14 [OU] => CSPB-115 [CN] => HOMAutoridade Certificadora do SERPRO Final v216 )17 18 [EMISSOR] => HOMAutoridade Certificadora do SERPRO Final v219 [INICIO_VALIDADE] => 2009031820521620 [FIM_VALIDADE] => 2012031720521621 [EXPIRADO] =>22 [SUBJECT] => Array23 (24 [C] => BR25 [O] => ICP-Brasil26 [OU] => Pessoa Fisica A327 [CN] => CESAR VIANNA28 )29 30 [NOME] => CESAR VIANNA31 [AUTHORITYKEYIDENTIFIER] => AE34F397BB05B1AA6CC3FD6C4F0E9129BBB61BE232 [KEYUSAGE] => Array33 (34 [digitalSignature] => 135 [nonRepudiation] => 136 [keyEncipherment] => 137 )38 39 [EXTKEYUSAGE] => Array40 (41 [clientAuth] => 1.3.6.1.5.5.7.3.242 [emailProtection] => 1.3.6.1.5.5.7.3.443 )44 45 [CA] =>46 [CRLDISTRIBUTIONPOINTS] => Array47 (48 [0] => http://ccdhom.serpro.gov.br/lcr/serproacfv2.crl49 [1] => http://ccdhom.serpro.gov.br/lcr/serproacfv3.crl50 [2] => http://ccdhom.serpro.gov.br/lcr/serproacfv4.crl51 )52 53 [2.16.76.1.3.6] => Array54 (55 [CADINSS] => 00000000000056 )57 58 [CADINSS] => 00000000000059 [2.16.76.1.3.5] => Array60 (61 [TITULO] => 00000000000062 [ZONA] => 00063 [SECAO] => 000064 [TITULO_CIDADE_UF] =>65 )66 67 [TITULO] => 00000000000068 [ZONA] => 00069 [SECAO] => 000070 [TITULO_CIDADE_UF] =>71 [2.16.76.1.3.1] => Array72 (73 [NASCIMENTO] => 1908198174 [CPF] => 1234567890275 [NIS] => 1234567890176 [RG] => 00020107515095377 [ORGAOUF] => SSPRS78 )79 80 [NASCIMENTO] => 1908198181 [CPF] => 1234567890282 [NIS] => 1234567890183 [RG] => 00020107515095384 [ORGAOUF] => SSPRS85 [EMAIL] => cesar.vianna@pr.planalto.gov.br86 )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 94 2 $GLOBALS['phpgw_info']['flags'] = array( 95 3 'disable_Template_class' => True, … … 98 6 'noheader' => True 99 7 ); 100 101 if(!$_REQUEST['certificado'])102 {103 echo '2'.chr(0x0D).chr(0x0A).'Certificado não foi apresentado.';104 exit();105 }106 107 8 if(file_exists('../header.inc.php')) 108 109 110 9 { 10 include('../header.inc.php'); 11 } 111 12 else 112 { 113 echo '1'.chr(0x0D).chr(0x0A).'Arquivo header.inc.php não foi localizado.'; 114 exit(); 115 } 116 13 { 14 echo '1'.chr(0x0D).chr(0x0A).lang('Error. header.inc.php not found'); 15 exit(); 16 } 17 if(!$_POST['certificado']) 18 { 19 echo '2'.chr(0x0D).chr(0x0A).lang('Fail to get certificate'); 20 exit(); 21 } 117 22 require_once('classes/CertificadoB.php'); 118 23 require_once('classes/Verifica_Certificado.php'); 119 24 include('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 } 132 133 $cert =str_replace(chr(0x0A).chr(0x0A),chr(0x0A),$_REQUEST['certificado']); 25 $cert =str_replace(chr(0x0A).chr(0x0A),chr(0x0A),$_POST['certificado']); 134 26 $cert = troca_espaco_por_mais($cert); 135 136 27 $c = new certificadoB(); 137 28 $c->certificado($cert); 138 139 29 if (!$c->apresentado) 140 { 141 echo '2'.chr(0x0D).chr(0x0A).'Certificado não foi apresentado.'; 142 exit(); 143 } 144 145 if (!$c->dados['CPF']) 146 { 147 echo '2'.chr(0x0D).chr(0x0A).'Não foi possível obter o CPF do certificado apresentado.'; 148 exit(); 149 } 150 30 { 31 echo '3'.chr(0x0D).chr(0x0A).lang('Fail to get certificate'); 32 exit(); 33 } 151 34 $b = new Verifica_Certificado($c->dados,$cert); 152 153 // Testa se Certificado OK.154 35 if(!$b->status) 155 { 156 $msg = '3'.chr(0x0D).chr(0x0A).$b->msgerro; 157 158 foreach($b->erros_ssl as $linha) 159 { 160 $msg .= "\n" . $linha; 161 } 162 163 echo $msg; 164 exit(); 165 } 166 36 { 37 $msg = '4'.chr(0x0D).chr(0x0A).$b->msgerro; 38 foreach($b->erros_ssl as $linha) 39 { 40 $msg .= "\n" . $linha; 41 } 42 echo $msg; 43 exit(); 44 } 167 45 if ( (!empty($GLOBALS['phpgw_info']['server']['ldap_master_host'])) && 168 169 170 171 172 173 174 46 (!empty($GLOBALS['phpgw_info']['server']['ldap_master_root_dn'])) && 47 (!empty($GLOBALS['phpgw_info']['server']['ldap_master_root_pw'])) ) 48 { 49 $ds = $GLOBALS['phpgw']->common->ldapConnect($GLOBALS['phpgw_info']['server']['ldap_master_host'], 50 $GLOBALS['phpgw_info']['server']['ldap_master_root_dn'], 51 $GLOBALS['phpgw_info']['server']['ldap_master_root_pw']); 52 } 175 53 else 176 { 177 $ds = $GLOBALS['phpgw']->common->ldapConnect(); 178 } 179 54 { 55 $ds = $GLOBALS['phpgw']->common->ldapConnect(); 56 } 180 57 if (!$ds) 181 58 { 182 echo ' 8'.chr(0x0D).chr(0x0A).'Não foi possível obter dados do usuario para login.';59 echo '5'.chr(0x0D).chr(0x0A).lang('Failure when get user data to login'); 183 60 exit(); 184 61 } 185 186 $filtro = 'uid='. item_para_uid($c->dados); 187 $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 196 $atributos[] = "usercertificate"; 197 $atributos[] = "phpgwaccountstatus"; 198 $atributos[] = "cryptpassword"; 199 $atributos[] = "uid"; 200 201 $sr=ldap_search($ds, $GLOBALS['phpgw_info']['server']['ldap_context'],$filtro,$atributos); 202 203 // Pega resultado .... 204 $info = ldap_get_entries($ds, $sr); 205 206 // Tem de achar só uma entrada.....ao menos uma.... 207 if($info["count"]!=1) 62 $cert_atrib_cpf = isset($GLOBALS['phpgw_info']['server']['certificado_atributo_cpf'])&&$GLOBALS['phpgw_info']['server']['certificado_atributo_cpf']!=''?$GLOBALS['phpgw_info']['server']['certificado_atributo_cpf']:"uid"; 63 $filtro = $cert_atrib_cpf .'='. $c->dados['2.16.76.1.3.1']['CPF']; 64 $atributos = array(); 65 $atributos[] = "usercertificate"; 66 $atributos[] = "phpgwaccountstatus"; 67 $atributos[] = "cryptpassword"; 68 $atributos[] = "uid"; 69 $sr=ldap_search($ds, $GLOBALS['phpgw_info']['server']['ldap_context'],$filtro,$atributos); 70 $info = ldap_get_entries($ds, $sr); 71 if($info["count"]!=1) 72 { 73 echo '6'.chr(0x0D).chr(0x0A).lang('Invalid data from users directory'); 74 ldap_close($ds); 75 exit(); 76 } 77 if($info[0]['phpgwaccountstatus'][0]!='A') 208 78 { 209 echo ' 4'.chr(0x0D).chr(0x0A).'Dados inválidos no diretório de usuários';79 echo '7'.chr(0x0D).chr(0x0A).lang('User account is inactive in Expresso'); 210 80 ldap_close($ds); 211 81 exit(); 212 82 } 213 214 // A conta expresso tem de estar ativa....215 if($info[0]['phpgwaccountstatus'][0]!='A')216 {217 echo '5'.chr(0x0D).chr(0x0A).'Conta do usuario nao esta ativa no Expresso.';218 ldap_close($ds);219 exit();220 }221 222 83 if($info[0]["cryptpassword"][0] && $info[0]["usercertificate"][0] && $cert == $info[0]["usercertificate"][0] ) 223 84 { … … 226 87 else 227 88 { 228 if(!$info[0]["usercertificate"][0] || $cert != $info[0]["usercertificate"][0]) 229 { 230 $user_info = array(); 231 $aux1 = $info[0]["dn"]; 232 $user_info['usercertificate'] = $cert; 233 if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao'])) 234 { 235 if(substr($info[0][$GLOBALS['phpgw_info']['server']['atributoexpiracao']][0],-1,1)=="Z") 236 { 237 $user_info[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = '19800101000000Z'; 238 } 239 else 240 { 241 $user_info[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = '0'; 242 } 243 } 244 else 245 { 246 $user_info['phpgwlastpasswdchange'] = '0'; 247 } 248 249 if(!ldap_modify($ds,$aux1,$user_info)) 250 { 251 echo '7'.chr(0x0D).chr(0x0A).'Ocorreu um erro no acolhimento do certificado.',$aux1; 252 } 253 else 254 { 255 echo '6'.chr(0x0D).chr(0x0A).'Seu Certificado foi cadastrado. Sua senha foi expirada. Altere sua senha para concluir o processo.'; 256 } 257 } 258 else 259 { 260 echo '6'.chr(0x0D).chr(0x0A).'Sua senha foi expirada. Altere sua senha para acessar o Expresso usando certificado digital.'; 261 } 89 echo '8'.chr(0x0D).chr(0x0A).lang('The current certificate not registered to login'); 262 90 } 263 91 ldap_close($ds); -
branches/2.2.0.1/setup/manageheader.php
r3304 r3991 596 596 $setup_tpl->set_var('use_https_0',' checked'); 597 597 $setup_tpl->set_var('div_cert',' style="display:none" '); 598 $setup_tpl->set_var('div_atributo_cpf',' style="display:none" '); 598 599 $setup_tpl->set_var('div_criptox',' style="display:none" '); 599 600 … … 614 615 default: 615 616 $setup_tpl->set_var('certificado_0',' checked'); 617 $setup_tpl->set_var('div_atributo_cpf',' style="display:none" '); 616 618 $setup_tpl->set_var('div_cripto',' style="display:none" '); 617 619 $setup_tpl->set_var('div_criptox',' style="display:none" '); … … 623 625 break; 624 626 } 625 627 628 if($GLOBALS['phpgw_info']['server']['certificado_atributo_cpf']) 629 { 630 $setup_tpl->set_var('certificado_atributo_cpf',$GLOBALS['phpgw_info']['server']['certificado_atributo_cpf']); 631 } 632 626 633 switch($GLOBALS['phpgw_info']['server']['captcha']) 627 634 { -
branches/2.2.0.1/setup/templates/default/manageheader.tpl
r3304 r3991 22 22 document.getElementById('cert_0').checked = true; 23 23 } 24 if(xdiv.id == "criptografiax") { 25 document.getElementById("atributo_cpf").style.display='none'; 26 } 24 27 if( xdiv.id == "certificado" || xdiv.id == "criptografia") { 25 28 var xdiv = document.getElementById('criptografia'); 26 29 document.getElementById('cripto_0').checked = true; 30 document.getElementById("atributo_cpf").style.display='none'; 27 31 } 28 32 if(xdiv.id == "certificado" || xdiv.id == "criptografia" ) { … … 41 45 { 42 46 var xdiv = document.getElementById(zdiv); 47 if(zdiv == "criptografiax") { 48 document.getElementById("atributo_cpf").style.display=''; 49 } 43 50 if(xdiv.id == "cripto_options") { 44 51 document.getElementById('maxcerttxt').value = '10'; … … 183 190 <tr><td colspan="2"><b>Usar Certificado Digital (para identificar o usuario no processo de login)?</b></td></tr> 184 191 <tr><td colspan="2"> 185 192 <font color='red'>Obs.: Para habilitar este item o uso do HTTPS deve ter sido habilitado.</font><br> 186 193 <INPUT id="cert_0" type="radio" {certificado_0} name="setting[certificado]" onclick="javascript:ocultar('criptografiax')" value="0" >NÃO Usar Certificado Digital.<BR> 187 194 188 195 <INPUT id="cert_1" type="radio" {certificado_1} name="setting[certificado]" onclick="javascript:exibir('criptografiax')" value="1">Usar Certificado Digital.<BR> 196 <div id="atributo_cpf" {div_atributo_cpf}> 197 <b>Nome do atributo , no ldap, para identificar CPF do proprietario do certificado digital</b><BR> 198 <INPUT type="text" maxlength="50" size="40" name="setting[certificado_atributo_cpf]" id="certificado_atributo_cpf" value="{certificado_atributo_cpf}" ><BR> 199 </div> 189 200 </td></tr> 190 201 </table>
Note: See TracChangeset
for help on using the changeset viewer.