Hola, he añadido el certificado a la conexión como lo hace https://www.b4x.com/android/forum/t...tputils2-sslcontext-kickstart.132549/#content
Además, he probado con https://www.b4x.com/android/forum/t...eer-certificate-a-website.133479/#post-843768
La conexión he incluido https://www.b4x.com/android/forum/threads/b4x-mqtt-ssl-and-self-signed-certificates.100973/#content
pero me da el error: (SSLHandshakeException) javax.net.ssl.SSLHandshakeException: Connection closed by peer
con B4J me funciona los certificados y me conecta: https://www.b4x.com/android/forum/t...ires-a-client-certificate.111881/#post-771036
Pruebas:
He instalado el certificado en mi móvil, Ajustes > Seguridad > Certificado VPN y Aplicaciones.
He agregado -> Press Ctrl + B and add HU2_PUBLIC as a conditional symbol!
Manifest: CreateResourceFromFile(Macro, Core.NetworkClearText)
utilizando lo anterior me queda
Además, he probado con https://www.b4x.com/android/forum/t...eer-certificate-a-website.133479/#post-843768
La conexión he incluido https://www.b4x.com/android/forum/threads/b4x-mqtt-ssl-and-self-signed-certificates.100973/#content
pero me da el error: (SSLHandshakeException) javax.net.ssl.SSLHandshakeException: Connection closed by peer
con B4J me funciona los certificados y me conecta: https://www.b4x.com/android/forum/t...ires-a-client-certificate.111881/#post-771036
Pruebas:
He instalado el certificado en mi móvil, Ajustes > Seguridad > Certificado VPN y Aplicaciones.
He agregado -> Press Ctrl + B and add HU2_PUBLIC as a conditional symbol!
Manifest: CreateResourceFromFile(Macro, Core.NetworkClearText)
utilizando lo anterior me queda
B4X:
Private StorePasswordstr As String = "771ef89xxx"
Private serverURI As String = "ssl://alu1y79tgeq5a-ats.iot.us-east-1.amazonaws.com:8883"
B4X:
Root = Root1
Root.LoadLayout("MainPage")
mytopic = "MAC/estado" '& mqtt.ClientId
ConectarMQTT
B4X:
Sub ConectarMQTT
SetSSLFactory
mqtt.Initialize("mqtt", serverURI, Rnd(0, 999999999)) ' & Rnd(0, 999999999) & DateTime.No
Dim mo As MqttConnectOptions
mo.Initialize("", "")
TrustAll(mo)
'SetSSLFactory
mqtt.Connect2(mo)
'SetSSLFactory
End Sub
B4X:
Sub TrustAll (mo As MqttConnectOptions)
Dim SSLContext As JavaObject
SSLContext = SSLContext.InitializeStatic("javax.net.ssl.SSLContext").RunMethod("getInstance", Array("TLS"))
Dim tm As CustomTrustManager
tm.InitializeAcceptAll
SSLContext.RunMethod("init", Array(Null, tm, Null))
Dim jmo As JavaObject = mo
jmo.RunMethod("setSocketFactory", Array(SSLContext.RunMethod("getSocketFactory", Null)))
End Sub
B4X:
Private Sub SetSSLFactory
Dim hc As OkHttpClient = HttpUtils2Service.hc
Dim builder As JavaObject = hc.As(JavaObject).RunMethod("sharedInit", Array("hc"))
Dim sslfactoryBuilder As JavaObject
sslfactoryBuilder = sslfactoryBuilder.InitializeStatic("nl.altindag.sslcontext.SSLFactory").RunMethod("builder", Null)
Dim in As InputStream = File.OpenInput(File.DirAssets, "771ef8945f-certificate.pfx")
Dim keystore As JavaObject
keystore.InitializeStatic("java.security.KeyStore")
Dim password As Object = StorePasswordstr.As(JavaObject).RunMethod("toCharArray", Null) 'ignore
Dim store As JavaObject = keystore.RunMethodJO("getInstance", Array("pkcs12"))
store.RunMethod("load", Array(in, password))
sslfactoryBuilder.RunMethod("withIdentityMaterial", Array(store, password))
sslfactoryBuilder.RunMethod("withTrustMaterial", Array(store, password))
Dim sslfactory As JavaObject = sslfactoryBuilder.RunMethod("build", Null)
Dim socketfactory As JavaObject = sslfactory.RunMethodJO("getSslContext", Null).RunMethod("getSocketFactory", Null)
Dim trustmanager As JavaObject = sslfactory.RunMethodJO("getTrustManager", Null)
builder.RunMethod("sslSocketFactory", Array(socketfactory, trustmanager.RunMethod("get", Null)))
Dim jo As JavaObject
jo.InitializeNewInstance(Application.PackageName & ".b4xmainpage$MyVerifier", Array(Me))
builder.RunMethod("hostnameVerifier", Array(jo))
hc.As(JavaObject).SetField("client", builder.RunMethod("build", Null))
End Sub
B4X:
Private Sub Verify_Verify (Host As String, Session As Object)
Log("verify")
Dim jo As JavaObject = Session
Dim certificates() As Object = jo.RunMethod("getPeerCertificates", Null)
For Each certificate As JavaObject In certificates
Dim PublicKey As JavaObject = certificate.RunMethod("getPublicKey", Null)
Log(PublicKey) 'ignore
Dim b() As Byte = certificate.RunMethod("getEncoded", Null)
Log(BytesToString(b, 0, b.Length, "ASCII"))
Next
End Sub
B4X:
#if Java
public class MyVerifier implements javax.net.ssl.HostnameVerifier {
public boolean verify(java.lang.String host, javax.net.ssl.SSLSession session) {
getBA().raiseEventFromDifferentThread(null, null, 0, "verify_verify", true, new Object[] {host, session});
return true;
}
}
#End If
Last edited: