Sin soporte de SSL en Qt 5.3 ni 5.5
-
Estoy usando Windows 10 de 64 bits en un portatil DELL modelo Vostro. Con las ultimas actualizaciones instaladas.
He instalado y comprobado que me funciona OpenSSL 0.9.8zf 19 Mar 2015.
He podido crear certificados SSL y usarlos. Lo he comprobado con estos comandos:
Para crear el certificado:
openssl req -x509 -newkey rsa:2048 -keyout clave.pem -out certificado.pem -days 3650 -nodes
Para poner en marcha el servidor:
openssl s_server -key clave.pem -cert certificado.pem -accept 12345
Para verificar que me podía conectar a él, desde otra máquina de mi red:
openssl s_client -connect 192.168.1.49:12345
Y bualá!! Funciona y obtengo un chat cutrón pero seguro (en teoria).
Al buscar información por internet he visto que hay gente que ha solucionado el problema copiando las librerías de OpenSSL
libeay32.dll
,libssl32.dll
,ssleay32.dll
en el directorio donde está el ejecutable de mi programa creado con Qt 5.3 o Qt 5.5Me he fijado que yo estoy compilando con Mingw32 (en 32 bits) y el OpenSSL que he instalado es de 64 bits. No se si eso afectará mucho. La cosa es que las librerías que copio en el directorio de mi aplicación, en teoría indica que son de 32bits.
Cuando instalo OpenSSL habilito la opción de que se copie las librerias en el directorio de Windows.
En mi programa sigo comprobando si está habilitado o soportado el SSL y la respuesta sigue siendo "nanai... ¡pa tu tia!" . Lo hago con el siguiente código:
if(QSslSocket::supportsSsl()) { qDebug() << QSslSocket::sslLibraryVersionString(); } else { qDebug() << " SSL no soportado"; }
¿Alguna sugerencia?
-
El mismo código, tal cual en Linux funciona a la primera sin ningún tipo de problema.
No ha sido necesario copiar ninguna librería en el directorio del programa ni en ningún otro sitio.¿Cómo puedo hacer que funcione en Windows 10?
-
Veo que este post es muy antiguo, aún así voy a responder por si a algún otro usuario le sucede lo mismo no tenga que pasar todo el trabajo que pase yo buscando la solución.
Qt utiliza la versión 1.1.1 de openssl (no es compatible con las versiones mas recientes) ademas debes copiar la dll en un lugar especifico, no basta con tener openssl instalado en la pc.
1- Descarga la versión correcta de aquí:
https://download.firedaemon.com/FireDaemon-OpenSSL/openssl-1.1.1w.zip
2- Descomprime y busca las bibliotecas libcrypto-1_1.dll y libssl-1_1.dll (nota que están las dos arquitecturas x86 y x64)
3- Copia esas bibliotecas hacia la carpeta donde están las bibliotecas propias de qt para el compilador que deseas usar. Si dejaste la ubicación que qt usa por defecto debe ser algo asi:
C:\Qt\Qt5.12.12\5.12.12\mingw73_32\bin (en el ejemplo use mingw de 32 bits)Esta solución a mi me funcionó en qt 5.12. Para probar si funcionó pueden usar este programa de ejemplo:
https://github.com/jbagg/QSslSocket-exampleEn el caso de windows se copian las dlls exactamente con el nombre que vienen en el comprimido (incluyendo el -x64 en las de 64 bits); para linux es el mismo procedimiento solo que hay que cambiarles el nombre y dejarlas como libcrypto.so y libssl.so. Esto es para que se ejecute desde el QtCreator, deben incluirlas también junto a su .exe cuando distribuyan el programa. Suerte a todos con sus proyectos!