Agregar certificado autofirmado para Mobile
Dejo el link al SAC y debajo el contenido por las dudas.
https://www.genexus.com/es/developers/websac?data=47478
Resumen
Como agregar certificado autofirmado o no reconocido en aplicaciones moviles para evitar errores de comunicación.
Android
En aplicaciones Android Offline / Online al hacer requets a url's que sirven sobre protocolo seguro https, regularmente se obtiene el mensaje de error:
"java.security.cert.CertPathValidatorException: Trust anchor for certification path not found"
cuando el certificado que habilita la comunicación SSL es autofirmado (Self-signed) o la empresa certificadora no es reconocida.
Como este certificado al ser autofirmado no es válido o la empresa certificadora no es reconocida en terminos de seguridad, para poder establecer comunicación se requiere que el propio certificado se agregue al dispositivo móvil.
Sin embargo a partir de la versión 24 y superiores (Nougat) ya no funciona agregar el certificado en el emulator/device --> Security Settings.
El detalle está aca:
https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html
Apps that target API Level 24 and above no longer trust user or admin-added CAs for secure connections, by default.
Como observan el tema viene por los cambios que hizo Google al respecto de los certificado, básicamente ahora se requiere que en el mismo apk se incluya el certificado, para agregar el certificado estos son los pasos:
Obtener el certificado donde residen las url's a las que se hacen request, en formato PEM, por ejemplo en Firefox se obtiene de la siguiente manera:
a) colocar la url en el navegador donde se hacen los request
b) dar clic al icono del candado- conexion segura- mas informacion. Se abre un popup (informacion sobre esta pagina), dar clic en Ver Certificado
c) Se abre una pagina con información del certificado, en la primera pestaña dar scroll hasta el nodo Miscelaneo y Descargar PEM (cert)
Nota. El nombre del certificado no debe contener caracteres especialescopiar el archivo pem resultante en \mobile\Android<objeto_main>\src\main\res\raw
Nota. Si se utiliza mas de un certificado, por ejemplo cuando se usan diversos sitios con Dynamic Services URL, se deben de agregar los mismos en este pasoModificar el archivo \Android\Templates\ApplicationProject\src\main\res\xml\network_security_config.xml,
agregando estas lineas antes del cierre del tag network-security-configEjecutar
Nota. Si se descarga el certificado desde otro medio seguir los siguientes pasos:
- Obtener el certificado del servidor donde residen las url's a las que se hacen request en formato Base-64 encoded (.CER)
- Usando el utilitario openssl cambiaremos la extension a .PEM,
ejecutar openssl x509 -inform pem -in -outform der -out
seguir los pasos 2,3 y 4 descritos anteriormente.
El error debe desaparecer.
IOS
Agregar el certificado .pem primero como Profile al dispositivo, para ello se puede mandar por email el certificado al device y desde alli descargarlo, automáticamente e agregara el certifificado a los Profiles.
Una vez agregado el certificado como profile hay que instalarlo en el propio device ( General --> Profile).
En este punto es importante que el certificado cuente con estos linemanientos
https://support.apple.com/en-us/HT210176
Si no se cumplen los lineamientos, a instalar el certificado quedara en estatus "No verificado".
- Una vez que el certificado esta instalado y verificado, hay que habilitarlo, para ello ir en el device ( General --> About --> Cerrtificate Trust Settings.
Dentro de esta última opción se encuentra la sección "Enable Full Trust for Root Certiticates", la cúal debe listar el certificado instalado previamente, allí mismo habilitarlo.
- El error de comunicación debe desaparecer.
Nota:
El error mostrado en iOS es:
ATS failed system trust
Connection 1: system TLS Trust evaluation failed(-9802)
TLS Trust encountered error 3:-9802
Connection 1: encountered error(3:-9802)
HTTP load failed, 0/0 bytes (error code: -1200 [3:-9802])Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server
caution
Tomado de wiki de DVelop