Commit 1e3c778b by SIAP

Es el que se utiliza para generar las firmas digitales que utilizan el personal…

Es el que se utiliza para generar las firmas digitales que utilizan el personal de salud dentro de los establecimiento del MINSAL.
parents
[Dolphin]
Timestamp=2019,6,13,8,18,34
Version=3
[Settings]
HiddenFilesShown=true
#Archivo de respaldo
*~
#Archivo de conexion
IncludeFiles/conexion.php
#Carpera para generar firma digital
Files/*
#Proyecto Netbeans
nbproject/*
<?php session_start();
include("IncludeFiles/conexion.php");
include("ActualizarClase.php");
conectar();
$puntero = new Datos;
$IdEmpleado=$_SESSION["EmpleadoCodigo"];
$NombreEmpleado=$puntero->NombreEmpleado($IdEmpleado);
$IdSubServicio=$_SESSION["SubServicioId"];
?>
<html>
<head>
<title>Actualizacion de Password</title>
<link rel="stylesheet" type="text/css" href="../integracion/Citas/Webstyle/Themes/Cobalt/Style.css">
<script language="javascript" src="ActualizarPassword.js"></script>
<body class="MailboxPageBody">
<div align="center" >
<br>
<br>
<br>
<br>
<table width="437" border="0" class="CobaltFormTABLE">
<tr><td colspan="2" align="center" nowrap class="CobaltFieldCaptionTD">
<strong>Actualizar Constrase&ntilde;a</strong>
</td></tr>
<tr>
<td nowrap class="CobaltFieldCaptionTD"><strong>Codigo:</strong></td>
<td class="CobaltDataTD"><?php echo $IdEmpleado;?></td>
</tr>
<tr>
<td nowrap class="CobaltFieldCaptionTD"><strong>Nombre:</strong></td>
<td class="CobaltDataTD"><?php echo $NombreEmpleado;?></td>
<input type="hidden" id="idempleado" value="<?php echo $IdEmpleado; ?>">
<input type="hidden" id="subespecialidad" value="<?php echo $IdSubServicio; ?>">
</tr>
<tr>
<td width="176" nowrap class="CobaltFieldCaptionTD"><strong>Nueva Constrase&ntilde;a:</strong></td>
<td width="249"><input type="password" id="contra" name="contra" size="45" class="CobaltInput" >
<input type="hidden" id="IdEstablecimiento" name="IdEstablecimiento" value="<?php echo $_SESSION["IdEstablecimiento"];?>"/>
</td>
</tr>
<tr>
<td colspan="2" align="center" nowrap class="CobaltFieldCaptionTD"></td>
</tr>
<tr>
<td colspan="2" align="right" nowrap class="MailboxFooterTD">
<input type="button" id="buscar" name="buscar" value="Actualizar" onClick="verificacion();">
<input type="button" id="cancelar" name="cancelar" value="Cancelar" onClick="Cancelar();"/>
</td>
</tr>
<tr >
<td colspan="2" align="right"><div id='Respuesta' align="center">&nbsp;</div></td>
</tr>
</table>
</div>
</body>
</html>
<?php desconectar();?>
<?php
class Datos {
function NombreEmpleado($IdEmpleado) {
$query = "select NombreEmpleado from mnt_empleado WHERE IdEmpleado='$IdEmpleado'";
$resp = pg_fetch_array(pg_query($query));
return $resp[0];
}
}
class Cambios {
function ActualizarPassword($IdPersonal, $Password) {
$query = "update fos_user_user set password=md5('$Password') WHERE iduser='$IdPersonal'";
pg_query($query);
}
function ObtenerSHA1($IdEmpleado, $IdEstablecimiento) {
$codigo_ = sha1(md5($IdEmpleado));
$query = "select * from fos_user_user_sha1 WHERE idusuariosha1='$codigo_' and idempleado='$IdEmpleado' and idestablecimiento=" . $IdEstablecimiento;
$resp = pg_query($query);
return($resp);
}
function IngresarSHA1($IdEmpleado, $IdEstablecimiento) {
$codigo_ = sha1(md5($IdEmpleado));
$query = "insert into fos_user_user_sha1(idusuariosha1,idempleado,idestablecimiento)values('$codigo_','$IdEmpleado','$IdEstablecimiento')";
pg_query($query);
}
function ActualizaHash($hash, $IdEmpleado, $IdEstablecimiento) {
$query = "update mnt_empleado set FirmaDigital='" . $hash . "' WHERE IdEmpleado='" . $IdEmpleado . "' and IdEstablecimiento=" . $IdEstablecimiento;
pg_query($query);
}
function obtenerContador($IdEmpleado, $IdEstablecimiento) {
$query = "select Contador from fos_user_user_sha1 WHERE IdEmpleado='$IdEmpleado' and IdEstablecimiento=" . $IdEstablecimiento;
if ($resp = pg_fetch_array(pg_query($query))) {
$contador = $resp[0] + 1;
pg_query("update fos_user_user_sha1 set Contador=" . $contador . " WHERE IdEmpleado='$IdEmpleado' and IdEstablecimiento=" . $IdEstablecimiento);
} else {
$contador = 1;
}
return $contador;
}
function obtenerContadorMedico($IdEmpleado, $IdEstablecimiento) {
$query = "select Contador from fos_user_user_sha1 WHERE IdEmpleado='$IdEmpleado' and IdEstablecimiento=" . $IdEstablecimiento;
$resp = pg_fetch_array(pg_query($query));
$contador = $resp[0];
return $contador;
}
}
//
?>
function xmlhttp(){
var xmlhttp;
try{xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");}
catch(e){
try{xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");}
catch(e){
try{xmlhttp = new XMLHttpRequest();}
catch(e){
xmlhttp = false;
}
}
}
if (!xmlhttp)
return null;
else
return xmlhttp;
}//xmlhttp
/*Filtracion de teclas*/
var nav4 = window.Event ? true : false;
function acceptNum(evt){
var key = nav4 ? evt.which : evt.keyCode;
//alert(key);
return ((key < 13) || (key >= 48 && key <= 57) || key == 45);
}
/*Verificacion de campos vacios*/
function verificacion(){
if(document.getElementById('contra').value==''){
alert('Digite su nueva contraseña');
}else{
Respuesta();
}
}//verificacion
function Respuesta(){
//var query = document.getElementById('q').value;
var Contra = document.getElementById('contra').value;
var usereg = document.getElementById('idempleado').value;
var IdSubServicio = document.getElementById('subespecialidad').value;
var A = document.getElementById('Respuesta');
var IdEstablecimiento = document.getElementById("IdEstablecimiento").value;
var ajax = xmlhttp();
ajax.onreadystatechange=function(){
if(ajax.readyState==1){
A.innerHTML = "Actualizando Contraseña ...";
}
if(ajax.readyState==4){
A.innerHTML = ajax.responseText;
}
}
ajax.open("GET","ActualizarProceso.php?Contra="+Contra+'&usereg='+usereg+'&IdSubServicio='+IdSubServicio+'&IdEstablecimiento='+IdEstablecimiento,true);
ajax.send(null);
return false;
}//Respuesta
function Eliminar2(Archivo){
var A = document.getElementById('Respuesta');
var ajax = xmlhttp();
//alert(Archivo);
ajax.onreadystatechange=function(){
if(ajax.readyState==1){
// A.innerHTML="Eliminando....";
}
if(ajax.readyState==4){
var Respuesta=ajax.responseText;
//A.innerHTML=Respuesta[0];
if(Respuesta!=""){
A.innerHTML=Respuesta;
window.location="../SeguimientoClinico/CitasMedicas/AgendaMedica.php";
}
}
}
ajax.open("GET","ActualizarProceso.php?Eliminar=1&Archivo="+Archivo,true);
ajax.send(null);
return false;
}//Eliminar2
function Cancelar(){
window.location="../SeguimientoClinico/CitasMedicas/AgendaMedica.php";
}
\ No newline at end of file
<?php
session_start();
include("IncludeFiles/conexion.php");
include('ActualizarClase.php');
conectar();
if (isset($_SESSION["Digital"]) and $_SESSION["Digital"] == 1) {
$TipoSesion = 2;
} else {
$TipoSesion = 1;
}
if(isset($_GET["Eliminar"])){$TipoSesion='Eliminar';}
switch ($TipoSesion) {
case 1:
$IdUsuarioReg = $_GET['usereg'];
$IdSubServicio = $_GET["IdSubServicio"];
$Contra = $_GET["Contra"];
$update = new Cambios;
$SQL = "SELECT fos_user_user.iduser
FROM fos_user_user INNER JOIN mnt_empleado
ON fos_user_user.IdEmpleado=mnt_empleado.id
WHERE fos_user_user.IdEmpleado='$IdUsuarioReg'
AND IdSubServicio=$IdSubServicio
AND IdTipoEmpleado='MED'
AND EstadoCuenta='H'";
$Resultado = pg_query($SQL) or die('La consulta fall&oacute;: ' . pg_last_error($con));
$Rows = pg_fetch_array($Resultado);
$update->ActualizarPassword($Rows['iduser'], $Contra);
echo "Cambio Realizado ! <br> Los Cambios tendran efecto la proxima vez que inicie sesion";
break;
case 2:
$puntero = new Cambios;
$puntero2=new Datos;
$archivo = $_GET["usereg"];
$pass = $_GET["Contra"];
$IdEstablecimiento=$_GET["IdEstablecimiento"];
// **********************************
//
//
//DATOS COMUNES FIRMA DIGITAL
$stateOrProvinceName = $_SESSION["stateOrProvinceName"];
$localityName = $_SESSION["localityName"];
$organizationalUnitName = $_SESSION["organizationalUnitName"];
$commonName = htmlentities($puntero2->NombreEmpleado($archivo));
$contador=$puntero->obtenerContador($archivo, $IdEstablecimiento);
$commonName.=$contador;
$emailAddress = $_SESSION["emailAddress"];
//****************************************
//$NombreEmpleado="Carlos Fuentes";
//$mail="cfuentes@salud.gob.sv";
//$pass=".alaska.08";
$NombreArchivo = "Files/" . $archivo . ".p12";
$dn = array("countryName" => 'SV',
"stateOrProvinceName" => $stateOrProvinceName,
"localityName" => $localityName,
"organizationName" => "Ministerio de Salud - El Salvador",
"organizationalUnitName" => $organizationalUnitName,
"commonName" => $commonName,
"emailAddress" => $emailAddress);
$numberofdays = 365; //Dias de valides
//$privkey = openssl_pkey_new();
//CARGA DE CERTIFICADORES
$cacert = "file://CSR/STAR_salud_gob_sv.crt";
$privkey = array("file://CSR/STAR_salud_gob_sv.key",
"");
$csr = openssl_csr_new($dn, $privkey);
//SE GENERA EL CERTIFICADO AUTENTICADO
$sscert = openssl_csr_sign($csr, $cacert, $privkey, $numberofdays);
//Se genera la llave publica en la variable publickey a partir del certificado
//generado en la variable sscert
openssl_x509_export($sscert, $publickey);
//se exporta el x509 a un archivo de extension p12
$filename = $NombreArchivo;
openssl_pkcs12_export_to_file($publickey, $filename, $privkey, $pass);
//LECTURA DE FIRMA Y OBTENCION DE hash GENERADO
$p12file = $NombreArchivo;
$fp = fopen($p12file, "r");
$p12buf = fread($fp, filesize($p12file));
fclose($fp);
if (openssl_pkcs12_read($p12buf, $p12cert, $pass)) {
$pkey_data = print_r($p12cert["pkey"], true);
$cert_data = print_r($p12cert["cert"], true);
};
$priv_key = openssl_pkey_get_private(array($pkey_data, ""));
$verification = openssl_x509_check_private_key($cert_data, $priv_key);
$cert = openssl_x509_read($cert_data);
$cert_data2 = openssl_x509_parse($cert);
$hash = $cert_data2["hash"];
$puntero->ActualizaHash($hash, $archivo, $IdEstablecimiento);
$resp_sha = $puntero->ObtenerSHA1($archivo, $IdEstablecimiento);
if ($row = pg_fetch_array($resp_sha)) {
//Do nothing
} else {
$puntero->IngresarSHA1($archivo, $IdEstablecimiento);
}
// *********************************************
echo "<a href='" . $NombreArchivo . "'>DESCARGAR NUEVA FIRMA DIGITAL <br><img src='imagenes/Download.gif'/></a>";
echo "<br><br>";
echo "<input type='button' id='Regresar' name='Regresar' value='REGRESAR' onclick='Eliminar2(\"" . $NombreArchivo . "\");'/>";
break;
case 'Eliminar':
unlink($_GET["Archivo"]);
echo "Archivo Eliminardo: " . $_GET["Archivo"] . '~';
echo "<br>";
break;
}
desconectar();
?>
\ No newline at end of file
-----BEGIN CERTIFICATE-----
MIIF6jCCBNKgAwIBAgIRAPb2/rBIu2b4137yxnubeJowDQYJKoZIhvcNAQEFBQAw
gYkxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
BgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMS8wLQYD
VQQDEyZDT01PRE8gSGlnaC1Bc3N1cmFuY2UgU2VjdXJlIFNlcnZlciBDQTAeFw0x
MTA3MjMwMDAwMDBaFw0xNjA3MjIyMzU5NTlaMIIBCzELMAkGA1UEBhMCU1YxDDAK
BgNVBBETAzUwMzEVMBMGA1UECBMMU2FuIFNhbHZhZG9yMRUwEwYDVQQHEwxTYW4g
U2FsdmFkb3IxGjAYBgNVBAkTEUNhbGxlIEFyY2UgTm8uODI3MRwwGgYDVQQKExNN
aW5pc3RlcmlvIGRlIFNhbHVkMUgwRgYDVQQLEz9EaXJlY2Npb24gZGUgVGVjbm9s
b2dpYXMgZGUgSW5mb3JtYWNpb24geSBDb211bmljYWNpb25lcyAoRFRJQykxIzAh
BgNVBAsTGkNvbW9kbyBQcmVtaXVtU1NMIFdpbGRjYXJkMRcwFQYDVQQDFA4qLnNh
bHVkLmdvYi5zdjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL8OIc8Q
O8uZeeZk54+zO7Q6G0TQlmfkedKWCXYA4rWP5+///9PLEB6QWs0aFAdoF4cX6FS8
WF1sooY4wGyNYUSAtRjr9zvoIqmuY0hUMgkyC5/GpkMi4Yx4JMGbJKFmP1RocAVs
krYACw3LRSv9tOHvmoPVascnDlIsz6sEIoHkilsVJ3sYq5PSKm0h2/dgHw9m0MYP
SFkBUIEfxVjmCSIDNfAj5tAcl3311uQMd4wFUtI9JrEBYR1wI7USXg6dXRpnD/Pl
wWd5zfr6EqcY3fcluAmNKXvDji4AYJAfCBSQelZwa0sK6LlBxYKGQW7EDNA4/+S4
GzzzYMuZBxqtlosCAwEAAaOCAcYwggHCMB8GA1UdIwQYMBaAFD/VtdDWRHlQShej
m4xK3LiwImRrMB0GA1UdDgQWBBQm0xujVlEh2u9fQr3pUyPNgyruNTAOBgNVHQ8B
Af8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYB
BQUHAwIwRgYDVR0gBD8wPTA7BgwrBgEEAbIxAQIBAwQwKzApBggrBgEFBQcCARYd
aHR0cHM6Ly9zZWN1cmUuY29tb2RvLmNvbS9DUFMwTwYDVR0fBEgwRjBEoEKgQIY+
aHR0cDovL2NybC5jb21vZG9jYS5jb20vQ09NT0RPSGlnaC1Bc3N1cmFuY2VTZWN1
cmVTZXJ2ZXJDQS5jcmwwgYAGCCsGAQUFBwEBBHQwcjBKBggrBgEFBQcwAoY+aHR0
cDovL2NydC5jb21vZG9jYS5jb20vQ09NT0RPSGlnaC1Bc3N1cmFuY2VTZWN1cmVT
ZXJ2ZXJDQS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNvbW9kb2NhLmNv
bTAnBgNVHREEIDAegg4qLnNhbHVkLmdvYi5zdoIMc2FsdWQuZ29iLnN2MA0GCSqG
SIb3DQEBBQUAA4IBAQBHvrWvg71c+qP4AGsOwE45UhaHsUBPde4PayQAtJ7nDU/j
LTXhOFieYjOI94re/GfW4/XUb5xWg+dk/G94ZKDQ5kIifuPqCQO8tXxfd5RiULPF
4t93KV2bBxj8mQehtyQDNRab9l8srmyjJgPrueiZ/Lc0/z/xtpmgxoHVILF25TiJ
mzaRWgF0aY/BFtF7GZKNRsguXrVlvkbbqI9nJTix6/WclewOwvJwI77OhsKW83UE
V47JaWbxKKEGRGJOTc0er7ldubkQfnIVo2KOR0VDj0P3j+n0jN0rny6jdCdiWaXI
cl7ZfPN7zG01g0W2oroXyW7ruMXQJvWWrjzjrC0T
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAvw4hzxA7y5l55mTnj7M7tDobRNCWZ+R50pYJdgDitY/n7///
08sQHpBazRoUB2gXhxfoVLxYXWyihjjAbI1hRIC1GOv3O+giqa5jSFQyCTILn8am
QyLhjHgkwZskoWY/VGhwBWyStgALDctFK/204e+ag9VqxycOUizPqwQigeSKWxUn
exirk9IqbSHb92AfD2bQxg9IWQFQgR/FWOYJIgM18CPm0ByXffXW5Ax3jAVS0j0m
sQFhHXAjtRJeDp1dGmcP8+XBZ3nN+voSpxjd9yW4CY0pe8OOLgBgkB8IFJB6VnBr
SwrouUHFgoZBbsQM0Dj/5LgbPPNgy5kHGq2WiwIDAQABAoIBADpyh1NCIxjRFeKu
wcxLR5uGHyt5KFoWIlKTBcfs02453Pml9kyDlaXUAYM3VCND69avMKsjh2DlR/8J
w4wx4CzFtyEtps/T3y7Lo6HP6BK6FaZGbjyhoiCH7K6x2I3rqroWzRZLtcIp1zfc
FIg1sC1iUIG+O1E7mHz5Knql5CyaB4RZsuAIEqNOubmwdvJ1UkB1egFG+9BNsKa2
ReXryc8e3QZ61iNekQbK8E1uvoyLjLuPKzLVc3WfxbJh4PTfmq3UZ/7mWM79YS0x
tNprmM3MorqIxnrbolP+Qj/bPckTkYo6yBpBwRK03gK6ySAo4fYSELFTgz8LBdld
o+VdukkCgYEA4jMupLU4FL3ztEithH4n0jClPY5/Zq/HRZ0Uu7P0QBZx/fMv6DBk
GC8tUYR07JFAz4p7WRNkz/R5fY8TB30pAaxgukrloOxsynOBCl2DUQx19IlWud7l
wUumTNdb4jvipB34nOFmnDiwBLNbCCTui6hURcqwqMKNNQDW+2I5ES0CgYEA2Dmo
sdD8m6T1zWLAJ3oVs2SZ7188Db9s0wXEKdt4jMChwJihjUlBNPa0gt2x+XAi69D/
GJs3Lf9IjmWKO1+9HndlWU7f4Hd/rLufKL5wDwMbhl/z0kgETvN64HQwIib1o+ON
SrPumIVyoGuQDCOQ6NAYbjZSavNDq968GuB9aZcCgYB/WlWugiEa/H9TR3/6EpUU
8DJ4X9w20kydUv0zWPPxiTGQyvR0A5q3Swh21t6FupoEv3EHC7Y8puYn3P/XvY3y
1Tx4Zma2naX6reE/FrsyTJO0pAZiC67Lj24H4VBoJVNLF1y75uPAnOHtI5XjFfgA
RTt9N8sSmMarytc/HWQH2QKBgQCsnltumckQ+MDDFvMQkQaCEO5Ti1QGJaxbS18v
i2bR93cqqq9OfAzym4HAd/x9hmhamp8Mpd2HeyYRiD6y59uzVt4yTiWsrbnfzGlj
vaT4VyLCRBgC6DuITBjs19UVbsTr8d36pWr1mJPKPhThnAMz2e2nDvb9Kvf7XfYN
/uogQQKBgQCi1MmLsM5mhQzUpds/G9WdxeX5HafJOrBPAtWm6qmRAwCw+0OpwjzM
gZFV94K+p8zTRzAKWfPC3u4E1keHLdZ6x8RRARvWe3+a/jCJS7np1MMGm6YaaXZ+
FUeFt5fwf0i43JL59z2r0hnJYu8O8bsu8wilVE+sbzMPX90MtFPCwA==
-----END RSA PRIVATE KEY-----
<?php include("IncludeFiles/conexion.php"); ?>
<html>
<head><TITLE>Firma Digital</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script language="JavaScript" src="IncludeFiles/ObjAjax.js"></script>
<link rel="stylesheet" type="text/css" href="stilo.css" media="screen" />
<script language="JavaScript">
function valida(formulario){
// var Ok=true;
var Archivo = formulario.Archivo.value;
var Contrasena = formulario.Contrasena.value;
if(Archivo == ""){
alert("Seleccione su firma digital");
return(false);
}
if(Contrasena == ""){
alert("Ingrese la clave de su firma digital");
formulario.Contrasena.focus();
return(false);
}
}
//1b53f5a5
</script>
</head>
<?php
if (!isset($_POST["Upload"]) && !isset($_GET["Accion"])) {
?>
<br/><br/><br/><br/><br/><br/>
<form action="" method="POST" onsubmit="return valida(this);" enctype="multipart/form-data">
<table align="center">
<tr class="MYTABLE"><td colspan="2" align="center"><strong>AUTENTICACION DE USUARIOS <br> CON FIRMA DIGITAL</strong></td></tr>
<tr><td class="MYTABLE"><strong>Firma digital:</strong></td><td class="FONDO"><input type="hidden" id="Upload" name="Upload" value="Upload"/>
<input type="file" id="Archivo" name="Archivo"/></td></tr>
<tr><td class="MYTABLE"><strong>Contrase&ntilde;a de firma digital:</strong></td>
<td class="FONDO"><input type="password" id="Contrasena" name="Contrasena"/></td></tr>
<tr class="MYTABLE"><td colspan="2" align="right">
<input type="submit" id="Enviar" name="Enviar" value="ENTRAR"/>
</td>
</tr>
</table>
</form>
<?php
} else {
conectar();
if (isset($_POST["Upload"])) {
$p12cert = array();
// $file = $_POST["Archivo"];
$tamano = $_FILES["Archivo"]['size'];
$tipo = $_FILES["Archivo"]['type'];
$archivo = $_FILES["Archivo"]['name'];
$prefijo = substr(md5(uniqid(rand())), 0, 6);
if ($archivo != "") {
// guardamos el archivo a la carpeta files
$destino = "Files/" . $prefijo . "_" . $archivo;
if (copy($_FILES['Archivo']['tmp_name'], $destino)) {
$status = "Archivo subido: <b>" . $archivo . "</b>";
$control = "<input type='button' id='eliminar' name='eliminar' value='REGRESAR' onclick='window.location=window.location;'>
<div id='Progreso';></div>";
} else {
$status = "Error al subir el archivo";
$control = "<input type='button' id='eliminar' name='eliminar' value='Error de Carga' onclick='window.location=window.location'>";
}
} else {
$status = "Error al subir archivo";
$control = "<input type='button' id='eliminar' name='eliminar' value='Error de Archivo' onclick='window.location=window.location'>";
}
echo $control;
}
if (isset($_GET["Accion"])) {
switch ($_GET["Accion"]) {
case 'Eliminar':
unlink($_GET["Archivo"]);
echo "Archivo Eliminardo: " . $_GET["Archivo"] . '~';
echo "<br>";
break;
}
}
$p12cert = array();
$p12file = $destino;
$pass = $_POST["Contrasena"];
$fp = fopen($p12file, "r");
$p12buf = fread($fp, filesize($p12file));
fclose($fp);
if (openssl_pkcs12_read($p12buf, $p12cert, $pass)) {
$pkey_data = print_r($p12cert["pkey"], true);
$cert_data = print_r($p12cert["cert"], true);
$Error = false;
} else {
$Error = true;
}
if ($Error == false) {
//verificacion de datos
$priv_key = openssl_pkey_get_private(array($pkey_data, ""));
//$cert_res=openssl_x509_read($dbbase64Cert_data);
$verification = openssl_x509_check_private_key($cert_data, $priv_key);
$contents = file_get_contents($destino);
function print_element($item, $key) {
if (is_array($item)) {
echo "$key is Array:<br>";
array_walk($item, 'print_element');
echo "$key done<br>";
}
else
echo "$key = $item<br>" . $key . "<br><br>";
}
// Get a certificate resource from the PEM string.
$cert = openssl_x509_read($cert_data);
// Parse the resource and print out the contents.
$cert_data2 = openssl_x509_parse($cert);
//echo "hash_FirmaDigital=> " . $cert_data2["hash"] . "<br>fin hash<br>";
$hash = $cert_data2["hash"];
$nombre_usuario=$cert_data2["subject"]["CN"];
$emisor_firmas=$cert_data2["issuer"]["O"];
//echo ' hash: '.$hash.' -> nombre_usuario: '.$nombre_usuario;
echo "<div align='center'>Validando sesion <br/> <img src='imagenes/barra.gif'/></div>";
?>
<form method="POST" id="formulario_hash" name="formulario_hash" action="GenerarFirma.php" style="visibility: hidden;">
<input type="text" id="hash" name="hash" value="<?php echo $hash; ?>"/>
<input type="text" id="nombre_usuario" name="nombre_usuario" value="<?php echo $nombre_usuario; ?>"/>
<input type="text" id="emisor_firmas" name="emisor_firmas" value="<?php echo $emisor_firmas; ?>"/>
</form>
<script language="javascript">
Eliminar3('<?php echo $destino; ?>');
</script>
<?php
//array_walk( $cert_data2, 'print_element' );
}else {
echo "Contrase&ntilde;a de firma digital no es la correcta!";
?>
<script language="javascript">
Eliminar3('<php echo $destino; ?>');
</script>
<?php
}
desconectar();
}
?>
</html>
# Sistema Integral de Atención al Paciente - SIAP - Módulo Firma Digital
Para realizar la instalación se debe de haber instalado el modulo principal del siap. Para realizar dicha instalación puede visitas el siguiente repositorio [siaps](http://gitlab.salud.gob.sv/SIAP/siaps.git)
## **Clonación del Proyecto**
Ejecutar la siguiente instrucción para realizar la clonación desde los repositorio del ministerio de salud.
```bash
git clone http://gitlab.salud.gob.sv/SIAP/firmadigital.git
```
## Configuración del Proyecto
Entrar al directorio clonado y crear el archivo **conexion.php** en el directorio **IncludeFiles/** con la siguiente información:
```php
<?php
function conectar() {
if (!isset($con)) {
$con = pg_connect("host=NOMBRE_HOST port=5432 dbname=BASE user=USUARIO password=CONTRASEÑA")
or die("Error al conectar a la base de datos --> " . pg_last_error($con));
}
return true;
}
function desconectar() {
pg_close();
}
?>
```
Con la siguiente instrucción creal la carpeta Files
```bash
mkdir Files/
```
Dar permisos de lectura y escritulo al usuario y apache:
```bash
setfacl -R -m u:www-data:rwx -m u:`whoami`:rw Files/
setfacl -dR -m u:www-data:rwx -m u:`whoami`:rw Files/
```
## Creando el Virtual Host
- Como **usuario root** moverse a la carpeta:
```bash
cd /etc/apache2/sites-available/
```
- Con un editor de texto crear el archivo **firma.localhost** con el siguiente
contenido:
```
# Inicio del archivo
<VirtualHost *:80>
ServerName firma.localhost
DocumentRoot directorioSIAP/firmadigital/
DirectoryIndex EntradaAdmin.php
<Directory directorioSIAP/firmadigital/ >
AllowOverride None
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/firma.localhost-error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/firma.localhost-access.log combined
</VirtualHost>
# Fin del archivo
```
En donde **directorioSIAP** es la ruta del directorio raíz en donde se encuentra el modulo de Firma Digital
- Guardar el archivo. Luego, como **root** ejecutar:
```
a2ensite firma.localhost
```
- Reiniciar el servicio de Apache
```bash
/etc/init.d/apache2 restart
```
- Se debe agregar en el archivo **/etc/hosts** la IP junto con el ServerName del Virtual Host. La línea debe ser similar a la siguiente:
```
X.X.X.X firma.localhost
```
### Configuración Máquinas Clientes
- Agregar la siguiente linea en el archivo **/etc/hosts** para que puedan acceder al sistema.
```bash
X.X.X.X firma.localhost
```
\ No newline at end of file
<?php
class Clase {
public $traduccion = array("á" => "&aacute;","é" => "&eacute;", "í" => "&iacute;","ó" => "&oacute;", "ú" => "&uacute;",
"Á" => "&Aacute;","É" => "&Eacute;", "Í" => "&Iacute;","Ó" => "&Oacute;", "Ú" => "&Uacute;",
"ñ"=>"&ntilde;","Ñ"=>"&Ntilde;");
function ComboDepto() {
$query = "SELECT C.id as iddepto, C.nombre as nombredepto "
. "FROM ctl_establecimiento A "
. " INNER JOIN ctl_municipio B ON A.id_municipio=B.id"
. " INNER JOIN ctl_departamento C ON B.id_departamento=C.id"
. " WHERE A.configurado=TRUE"
;
$resp = pg_query($query);
/*$combo = "<select id='depto' name='depto' onchange='Municipios(this.value)'; onblur='ConfirmaDatos(this.id);'>
* $combo.="<option selected='selected' value='" . $row["iddepto"] . "'>" . strtr($row["nombredepto"],$this->traduccion) . "</option>";
";*/
while ($row = pg_fetch_array($resp)) {
$combo = "<input id='depto' name='depto' type='hidden' value='" . $row["iddepto"] . "' />";
$combo.= "<input id='depto_name' name='depto_name' type='text' value='" . strtr($row["nombredepto"],$this->traduccion) . "' readonly='readonly' />";
}