Especificación para implementar titulo electrónico en México
Si perteneces a una institución educativa publica o privada es importante que conozcas esta información, en abril de 2018 se da a conocer el
estándar para la recepción en forma electrónica de los títulos
profesionales o grados académicos, para efectos de su registro ante la dirección
general de profesiones (http://dof.gob.mx/nota_detalle.php?codigo=5519300&fecha=13/04/2018), en junio se proporciono información para trabajar y especificaciones técnicas, actualmente han cambiado los detalles técnicos, específicamente, la DGP quito la caratula y el proceso quedara solo el XML del titulo.
En esta URL están los pasos que pide la DGP
http://www.sep.gob.mx/es/sep1/Preparacion
Archivos clave:
http://www.sep.gob.mx/work/models/sep1/Resource/16060/2/images/ws_titulos_electronicos_contrato.pdf
https://metqa.siged.sep.gob.mx/met-ws/services/TitulosElectronicos.wsdl
http://www.sep.gob.mx/dgticDatos/titulosElectronicos/sep_xsdtituloelectronico.zip
ejemplo.xml
<?xml version="1.0" encoding="utf-8"?>
<TituloElectronico version="1.0" folioControl="folioControl1" xmlns="https://www.siged.sep.gob.mx/titulos/">
<FirmaResponsables>
<FirmaResponsable nombre="nombre1" primerApellido="primerApellido1" segundoApellido="segundoApellido1" curp="curp1" idCargo="1" cargo="cargo1" abrTitulo="abrTitulo1" sello="sello1" certificadoResponsable="certificadoResponsable1" noCertificadoResponsable="noCertificadoResponsable1" />
<FirmaResponsable nombre="nombre2" primerApellido="primerApellido2" segundoApellido="segundoApellido2" curp="curp2" idCargo="-79228162514264337593543950335" cargo="cargo2" abrTitulo="abrTitulo2" sello="sello2" certificadoResponsable="certificadoResponsable2" noCertificadoResponsable="noCertificadoResponsable2" />
<FirmaResponsable nombre="nombre3" primerApellido="primerApellido3" segundoApellido="segundoApellido3" curp="curp3" idCargo="79228162514264337593543950335" cargo="cargo3" abrTitulo="abrTitulo3" sello="sello3" certificadoResponsable="certificadoResponsable3" noCertificadoResponsable="noCertificadoResponsable3" />
</FirmaResponsables>
<Institucion cveInstitucion="cveInstitucion1" nombreInstitucion="nombreInstitucion1" />
<Carrera cveCarrera="cveCarrera1" nombreCarrera="nombreCarrera1" fechaInicio="1900-01-01" fechaTerminacion="1900-01-01" idAutorizacionReconocimiento="1" autorizacionReconocimiento="autorizacionReconocimiento1" numeroRvoe="numeroRvoe1" />
<Profesionista curp="curp1" nombre="nombre1" primerApellido="primerApellido1" segundoApellido="segundoApellido1" correoElectronico="correoElectronico1" />
<Expedicion fechaExpedicion="1900-01-01" idModalidadTitulacion="1" modalidadTitulacion="modalidadTitulacion1" fechaExamenProfesional="1900-01-01" fechaExencionExamenProfesional="1900-01-01" cumplioServicioSocial="1" idFundamentoLegalServicioSocial="1" fundamentoLegalServicioSocial="fundamentoLegalServicioSocial1" idEntidadFederativa="idEntidadFederativa1" entidadFederativa="entidadFederativa1" />
<Antecedente institucionProcedencia="institucionProcedencia1" idTipoEstudioAntecedente="1" tipoEstudioAntecedente="tipoEstudioAntecedente1" idEntidadFederativa="idEntidadFederativa1" entidadFederativa="entidadFederativa1" fechaInicio="1900-01-01" fechaTerminacion="1900-01-01" noCedula="noCedula1" />
<Autenticacion />
</TituloElectronico>
<TituloElectronico version="1.0" folioControl="folioControl1" xmlns="https://www.siged.sep.gob.mx/titulos/">
<FirmaResponsables>
<FirmaResponsable nombre="nombre1" primerApellido="primerApellido1" segundoApellido="segundoApellido1" curp="curp1" idCargo="1" cargo="cargo1" abrTitulo="abrTitulo1" sello="sello1" certificadoResponsable="certificadoResponsable1" noCertificadoResponsable="noCertificadoResponsable1" />
<FirmaResponsable nombre="nombre2" primerApellido="primerApellido2" segundoApellido="segundoApellido2" curp="curp2" idCargo="-79228162514264337593543950335" cargo="cargo2" abrTitulo="abrTitulo2" sello="sello2" certificadoResponsable="certificadoResponsable2" noCertificadoResponsable="noCertificadoResponsable2" />
<FirmaResponsable nombre="nombre3" primerApellido="primerApellido3" segundoApellido="segundoApellido3" curp="curp3" idCargo="79228162514264337593543950335" cargo="cargo3" abrTitulo="abrTitulo3" sello="sello3" certificadoResponsable="certificadoResponsable3" noCertificadoResponsable="noCertificadoResponsable3" />
</FirmaResponsables>
<Institucion cveInstitucion="cveInstitucion1" nombreInstitucion="nombreInstitucion1" />
<Carrera cveCarrera="cveCarrera1" nombreCarrera="nombreCarrera1" fechaInicio="1900-01-01" fechaTerminacion="1900-01-01" idAutorizacionReconocimiento="1" autorizacionReconocimiento="autorizacionReconocimiento1" numeroRvoe="numeroRvoe1" />
<Profesionista curp="curp1" nombre="nombre1" primerApellido="primerApellido1" segundoApellido="segundoApellido1" correoElectronico="correoElectronico1" />
<Expedicion fechaExpedicion="1900-01-01" idModalidadTitulacion="1" modalidadTitulacion="modalidadTitulacion1" fechaExamenProfesional="1900-01-01" fechaExencionExamenProfesional="1900-01-01" cumplioServicioSocial="1" idFundamentoLegalServicioSocial="1" fundamentoLegalServicioSocial="fundamentoLegalServicioSocial1" idEntidadFederativa="idEntidadFederativa1" entidadFederativa="entidadFederativa1" />
<Antecedente institucionProcedencia="institucionProcedencia1" idTipoEstudioAntecedente="1" tipoEstudioAntecedente="tipoEstudioAntecedente1" idEntidadFederativa="idEntidadFederativa1" entidadFederativa="entidadFederativa1" fechaInicio="1900-01-01" fechaTerminacion="1900-01-01" noCedula="noCedula1" />
<Autenticacion />
</TituloElectronico>
Aqui les dejo un ejemplo PHP y JAVA por la DGP
PHP
<?php
header("Content-type: text/html; charset=UTF-8");
echo 'Current PHP Version: ' . phpversion();
try {
$private_file="c:/firma/llave_carlos.key.pem"; // Ruta al archivo key con contraseña
$public_file="c:/firma/cert_carlos.cer.pem";
$cadena_original="||1.0|3|MUOC810214HCHRCR00|Director de Articulación de Procesos|SECRETARÍA DE EDUCACIÓN|Departamento de Control Escolar|23DPR0749T|005|23|SOSE810201HDFRND05|EDGAR|SORIANO|SANCHEZ|2|7.8|2017-01-01T12:05:00||";
//$cadena_original="||1.0|3|GAVA730717HDFRGR05|Director de Articulación de Procesos|SECRETARÍA DE EDUCACIÓN|Departamento de Control Escolar|23DPR0749T|005|23|SOSE810201HDFRND05|EDGAR|SORIANO|SANCHEZ|2|7.8|2017-01-01T12:05:00||";
echo "<br><br> cadena ".$cadena_original;
// Se obtiene la clave privada con la que se va a firmar
$private_key = openssl_get_privatekey(file_get_contents($private_file)); // $clave es la contraseña del archivo .key
$exito = openssl_sign($cadena_original,$Firma,$private_key, OPENSSL_ALGO_SHA256);
openssl_free_key($private_key);
echo "<br><br> firma ".$Firma;
$sello = base64_encode($Firma); // lo codifica en formato base64
echo "<br><br> Sello ".$sello;
$public_key = openssl_pkey_get_public(file_get_contents($public_file));
$PubData = openssl_pkey_get_details($public_key);
$result = openssl_verify($cadena_original, $Firma, $public_key, "sha256WithRSAEncryption");
echo "<br><br> Resultado ".$result;
} catch (Exception $e) {
echo var_dump($e->getMessage());
}
// *******************************************************************************
// Comandos para convertir los *.cer y *.key en formato pem en Linux,
// Convertir *.key a *.pem: openssl pkcs8 -inform DER -in llave.key -out llave.key.pem -passin pass:contrasenia
// Convertir *.cer a *.pem: openssl x509 -inform DER -outform PEM -in certificado.cer -pubkey > certificado.cer.pemJAVA
header("Content-type: text/html; charset=UTF-8");
echo 'Current PHP Version: ' . phpversion();
try {
$private_file="c:/firma/llave_carlos.key.pem"; // Ruta al archivo key con contraseña
$public_file="c:/firma/cert_carlos.cer.pem";
$cadena_original="||1.0|3|MUOC810214HCHRCR00|Director de Articulación de Procesos|SECRETARÍA DE EDUCACIÓN|Departamento de Control Escolar|23DPR0749T|005|23|SOSE810201HDFRND05|EDGAR|SORIANO|SANCHEZ|2|7.8|2017-01-01T12:05:00||";
//$cadena_original="||1.0|3|GAVA730717HDFRGR05|Director de Articulación de Procesos|SECRETARÍA DE EDUCACIÓN|Departamento de Control Escolar|23DPR0749T|005|23|SOSE810201HDFRND05|EDGAR|SORIANO|SANCHEZ|2|7.8|2017-01-01T12:05:00||";
echo "<br><br> cadena ".$cadena_original;
// Se obtiene la clave privada con la que se va a firmar
$private_key = openssl_get_privatekey(file_get_contents($private_file)); // $clave es la contraseña del archivo .key
$exito = openssl_sign($cadena_original,$Firma,$private_key, OPENSSL_ALGO_SHA256);
openssl_free_key($private_key);
echo "<br><br> firma ".$Firma;
$sello = base64_encode($Firma); // lo codifica en formato base64
echo "<br><br> Sello ".$sello;
$public_key = openssl_pkey_get_public(file_get_contents($public_file));
$PubData = openssl_pkey_get_details($public_key);
$result = openssl_verify($cadena_original, $Firma, $public_key, "sha256WithRSAEncryption");
echo "<br><br> Resultado ".$result;
} catch (Exception $e) {
echo var_dump($e->getMessage());
}
// *******************************************************************************
// Comandos para convertir los *.cer y *.key en formato pem en Linux,
// Convertir *.key a *.pem: openssl pkcs8 -inform DER -in llave.key -out llave.key.pem -passin pass:contrasenia
// Convertir *.cer a *.pem: openssl x509 -inform DER -outform PEM -in certificado.cer -pubkey > certificado.cer.pemJAVA
http://www.sep.gob.mx/dgticDatos/titulosElectronicos/ejemplo_java.zip
Aquí dejo otra publicación de como es el proceso para las instituciones privadas y publicas: Clic Aqui, ademas te dejo un ejemplo en java: https://tituloelectronico.blogspot.com/2019/08/registroelectronico-dgp-java.html
Déjanos tus comentarios, si no te sirvió la información también escríbenos porque no te sirvió para poder mejorar.
Tengo una pregunta, quien genera las llaves públicas y privadas?, me refiero a los archivos .pem
ResponderEliminarDe momento hasta lo que tengo entendido se pueden usar las del SAT.
EliminarSi tienes alguna otra entidad certificadora, podrás usarla ademas si tienes un servidor para generar certificados también lo podrás usar, recuerda que el .cer se lo deberás proporcionar a la DGP.
EliminarHola, Tienen el URL para hacer pruebas de envio?
EliminarBuen dia Julio, nuestra herramienta lo hace para pruebas y produccion, pero no lo tenemos publico, si gustas podemos agendar una una reunion... mi correo es dabundis49@gmail.com y con gusto lo vemos.
EliminarAquí dejo una propuesta para universidades publicas y privadas
ResponderEliminarhttps://tituloelectronico.blogspot.com/2019/04/titulo-electronico-para-universidades.html
Aquí dejo un nuevo post, es un ejemplo en JAVA: https://tituloelectronico.blogspot.com/2019/08/registroelectronico-dgp-java.html
ResponderEliminarComo puedo verificar la autenticidad de un titulo electronico
ResponderEliminar