¿Cuantas veces te habrás encontrado que libpurple te deniega el acceso a un servidor XMPP, IRC, etc por que Pidgin u otra aplicación te dice que el certificado es inválido?
Simple truco, si el servicio existe debe tener un certificado al que poder acceder. Entonces tratemos de acceder al certificado tal que así:
openssl s_client -connect servidor:puerto
Nos saldra un tocho del cual debemos fijarnos en:
-----BEGIN CERTIFICATE----- MIIFETCCA/mgAwIBAgISA/n+36kmEgsQDImnG0l6aEZ1MA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNjA0MjgxMjM2MDBaFw0x NjA3MjcxMjM2MDBaMBgxFjAUBgNVBAMTDWVsYmluYXJpby5uZXQwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDbIl8nFuZUBe52XTBSg8WpKtWo3rf2N8+/ enzSNAdHI+E4y9dt6fTMCEYjFHsFoFU5PMuStoLfl4qQkiDSUkZLH7kVukL1UCf6 43j2kQB073h6IpoC0t7AZ2W1QoS4BPo/g8ZWer8hvmggq7KzTpv8sDtDi9H5P+Cc JbUypfy80W7w2ovDI8UhSgF86xvDbFGvpCfTZKmUK5uu/g4tJ3L/g3XtEo5+Mymd nfMn7hag0CxJShLVgX19g9z80ybvQwBCBS0UjOxpZ+VVUoDDez4LphKbHnQyjpss gftQrIArr5CcSxcPVTiqqeLvWdbM99AHsQV0mjm2R2wB9YtFzqX/AgMBAAGjggIh MIICHTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF BwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFKOrMCc1DtXxscFriWD5z658CTS2 MB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMHAGCCsGAQUFBwEBBGQw YjAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNyeXB0Lm9y Zy8wLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5v cmcvMCsGA1UdEQQkMCKCDWVsYmluYXJpby5uZXSCEXd3dy5lbGJpbmFyaW8ubmV0 MIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggr BgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwIC MIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBi eSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRo ZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlw dC5vcmcvcmVwb3NpdG9yeS8wDQYJKoZIhvcNAQELBQADggEBAHlu82sdjRP3Pvvk hJ3x9Jva3NExhxw8/cOBFc/IJ8YOAw7/lgm33SKtzQe47KolTTENfAx3cCBjPSsx OnPuZIEuydxjuEkS2YNlkqh/cAyFrAwc8QmYdr2TVmBDSkGd3g7gYSaLYRRXTf+N HAn8c2r7E26dDdusmUjRO4vIbjNgP3PzFQKILlqS8djmGUjqZrZMHlQmj93o3mGR OrPfcvflvQQfwE+gb1JDlpKyk4ipCW0VjU2R1Ze+vVxwLQQh1i8xSwN/HG3//yA3 Xkf1C924FomIbpmfFjYORE9N7dC7sKNyBp69EzeX+Z05BPyjnLnS4ldqQxcdmts6 M2W3viI= -----END CERTIFICATE-----
Eso como podemos ver es el certificado del servicio. copiamos desde «—–BEGIN CERTIFICATE—–» hasta «—–END CERTIFICATE—–» y lo pegamos en un archivo el cual podemos llamar certificado.servicio por llamarlo de alguna manera. Guardamos el archivo.
Ahora nos falta llevarlo a Pidgin, nos vale también para otras aplicaciones pero es que Pidgin en concreto, no tiene la opción de aceptar certificados inválidos: Vamos a Tools -> Certificates. En Certificates pulsamos el botón «Add» y seleccionamos el archivo que acabamos de guardar «certificado.servicio»
Importante, el hostname, debe ser el mismo que el servidor que hemos puesto cuando lanzamos el comando openssl s_client -connect servidor:puerto
Listo, Pidgin ya puede usar ese certificado y por lo tanto acceder al servicio.
Y como se podria añadir el certificado de xmpp.elbinario.net ?
Por lo demas ha sido un articulo excelente!
Felicidades.