1. Introducción
Al finalizar un proceso de pago, MYMOID realiza una llamada callback a la URL definida durante el proceso de alta de aplicación por parte del negocio. Esa llamada contiene los datos de la orden de pago ejecutada, el usuario y la aplicación que realizaron el pago. Para garantizar la autenticidad del contenido de esa llamada y comprobar que no se ha visto modificado en el trayecto, MYMOID aplica un proceso de firma electrónica a los datos más importantes que componen el cuerpo de la llamada. El comercio puede aplicar el proceso descrito en este documento para verificar la autenticidad del mensaje.
2. Procedimiento de firma
MYMOID utiliza el esquema de clave pública RSA para firmar digitalmente el contenido de la llamada. Para ello se parte de una cadena de datos al que se aplica el:
Algoritmo de firma SHA-256 con codificación RSA como viene definido en el “OSI Interoperability Workshop”, utilizando las convenciones de rellenado PKCS #1.
La firma resultante se codifica en BASE64 y se incluye en la llamada.
2.1. Estructura de los datos a firmar
La cadena base sigue esta estructura en Regex:
\{updatedAt=[0-9]{13},\x20userPublicId=[a-z0- 9]{64},\x20paymentOrderId=[a-z0-9]{64},\x20amount=[0- 9]{1,6},\x20currency=[A-Z]{3},\x20status=[A- Z]+,\x20applicationId=[a-z0-9]{64}(,\x20errorCode=[a-zA- Z.]+,\x20errorMessage=[a-zA-Z\x20]+)*\}
Un ejemplo de la cadena base sin código de error:
{updatedAt=1381749188539, userPublicId=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b93 4ca495991b7852b855, pymentOrderId=688787d8ff144c502c7f5cffaafe2cc588d86079f9de8 8304c26b0cb99ce91c6, amount=344323, currency=EUR, status=PAID, applicationId=0a5d18d7208f7a1231d99ad3cdab349cdd82758402b3e 2a52080eb35c870e51a}
Ejemplo de la cadena base con la sección del error:
{updatedAt=1381767108518, userPublicId= e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b785 2b855, paymentOrderId=688787d8ff144c502c7f5cffaafe2cc588d86079f9de 88304c26b0cb99ce91c6, amount=344323, currency=EUR, status=AVAILABLE, applicationId=0a5d18d7208f7a1231d99ad3cdab349cdd82758402b3e 2a52080eb35c870e51a, errorCode=Validator.mymoPay.genericGatewayError, errorMessage=Generic gateway error}
3. Verificación de la firma
3.1. Obtención del certificado
Para verificar la firma, es necesario disponer de la clave pública de MYMOID. Esa clave está disponible en el certificado público de TECHNOactivity. Para obtener el certificado basta con visitar la página web https://api.mymoid.com y extraer el certificado de conexión SSL. El Apéndice I incluye instrucciones detalladas para extraer el certificado digital utilizando distintos navegadores. Luego debemos extraer la llave publica del certificado mediante consola de la siguiente forma “ openssl x509 -pubkey -noout -in ‘CERTIFICADO’ > ‘LLAVEPUBLICA’ “
3.2. Verificación
Para la verificación basta con aplicar los siguientes pasos utilizando la clave pública extraída anteriormente:
1. Convertir la firma recibida en el callback de base64 a binario :
Echo –n “SIGNATURE_RAW” | base64 --decode > “SIGNATURE_FILE“
2. Verificar la firma extraída anteriormente usando la llave publica obtenida del certificado y la cadena base recibida en el callback: Echo –n “CADENA_BASE” | openssl dgst –sha256 –verify “LLAVEPUBLICA” --signature “SIGNATURE_FILE”
3.3. Ejemplo de Verificación
1. echo -n "ltPI3ZDkIQqkX6M/60PqsNbR1Fij8tojP8VyZRyZQLGG0pijM92KdknfL rJbS6qpuv0uRelNiRm27HJcgFM9eg4fq4d/BEp9U8wz1i4bJbtfY/bFC2Z J5ZnUBTldNywwqsz/1M97n2uSxyv24aC3Q4wMIqWJZ0lotlbsfaAPFAJgw xNZX9YpTI7M2szRkMkgnk+ZSHQ/IDuSsTrq8Cvy8r0TsTnt3G+1bfHDagM XRQ5iaMOhjjK1L+mDOdcC5OAQ00pufshaUAPYHmuaSpOU89psgJmFtznYK Weq3giRPtXJiMKMfB/72J+/Aq4LpwB5nJYe8s1X+7tbjyJZxXH4dg==" | base64 --decode > signature-1.sign
2. echo –n "{updatedAt=1407212807000, userPublicId=anonymous, paymentOrderId=a0e54f995d7474be37a2d7ecad4b99312c149f3fa2a f65998f989a337651222d, amount=2000, currency=EUR, status=PAID, applicationId=3a08a54559eadeb11c7d2e9bd16f7637dbf7065b3b30 2157874d33a5460f3aff}" | openssl dgst -sha256 -verify pubkey.pem -signature signature-1.sign
4. Apéndice I
A continuación se describen en detalle cómo extraer el certificado que contiene la clave pública de una página protegida por SSL/TLS.
4.1. Chrome
• Hacer click en el candado de seguridad que aparecer junto al nombre de dominio en la barra de direcciones
• Hacer click en la pestaña “Conexión”
• Hacer click en “Información del Certificado”
• Elegir la pestaña “Detalles”
• Pulsar el botón “Copiar a fichero...” • Seguir los pasos del asistente y guardar el certificado en formato Base64
4.2. Firefox
• Hacer click en el candado de seguridad que aparecer junto al nombre de dominio en la barra de direcciones
• Pulsar el botón “Más Información”
• Pulsar el botón “Ver Certificado” • Elegir la pestaña “Detalles”
• Pulsar el botón “Exportar...” • Guardar el certificado en formato PEM
4.3. Internet Explorer
• Hacer click en el candado de seguridad que aparecer junto al nombre de dominio en la barra de direcciones
• Pulsar el link “Ver Certificado”
• Elegir la pestaña “Detalles”
• Pulsar el botón “Copiar a fichero...”
• Seguir los pasos del asistente y guardar el certificado en formato Base64