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.