c++ ssl https gsoap
https://www.cs.fsu.edu/~engelen/cacerts.pem.zip

cómo usar SSL en clases generadas en C++ gSOAP



https (4)

Necesito usar la biblioteca gsoap en C ++ y necesito usar https. la documentación dice cómo trabajar con HTTPS en C, pero no en C ++ (http://www.cs.fsu.edu/~engelen/soapdoc2.html#tth_sEc19.20). en particular, tengo un error de soap_ssl_init(); en soap_ssl_init(); función. He buscado / usr / lib / libgsoap * archivos y he encontrado ligsoapssl ++. un archivo y vinculado a él. este error se ha ido, pero obtengo un error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed . eso significa que necesito llamar a soap_ssl_client_context func, pero no hay clases generadas en C ++. ¿Que debería hacer?

UPD: he solucionado este problema yo solo. pero es peculiar, muy peculiar. gSOAP genera clases de C ++ heredadas de struct soap, contiene los siguientes attrs:

BIO *bio; SSL *ssl; SSL_CTX *ctx; unsigned short ssl_flags; const char *keyfile; const char *password; const char *dhfile; const char *cafile; const char *capath; const char *crlfile; const char *randfile; SSL_SESSION *session;

para que podamos configurar los atributos necesarios (banderas, parámetros) como en la biblioteca OpenSSL por nosotros mismos. En caso simple, es suficiente llamar a soap_ssl_init() una vez y establecer ssl_flags = SOAP_SSL_NO_AUTHENTICATION . esto funciona para mi. si alguien sabe mejor, me complacerá ver.


He resuelto este problema yo solo. pero es peculiar, muy peculiar. gSOAP genera clases de C ++ heredadas de struct soap , contiene los siguientes attrs:

BIO *bio; SSL *ssl; SSL_CTX *ctx; unsigned short ssl_flags; const char *keyfile; const char *password; const char *dhfile; const char *cafile; const char *capath; const char *crlfile; const char *randfile; SSL_SESSION *session;

para que podamos configurar los atributos necesarios (indicadores, params) como en la biblioteca OpenSSL por nosotros mismos. En caso simple, es suficiente llamar a soap_ssl_init() una vez y establecer ssl_flags = SOAP_SSL_NO_AUTHENTICATION . esto funciona para mi. si alguien sabe mejor manera voy gla


He usado soporte SSL en gsoap en mi programa c ++, y no he tenido problemas. Recopilé el archivo fuente stdsoap2.cpp (que viene junto con gsoap), con la directiva -DWITH_OPENSSL (¿extrañaste esto?). Usé el archivo obj y vinculé mi programa con él.


He experimentado el mismo problema hoy. Estaba usando Ubuntu 14.04 en VirtualBox y Gsoap 2.8.21.

Genere clases proxy de C ++ con el comando:

soapcpp2 -1 -I/opt/libraries/gsoap/build/2.8.21/share/gsoap/import -C -j temporary.h

En primer lugar, utilicé la solución mencionada anteriormente y configuré ssl_flags en SOAP_SSL_NO_AUTHENTICATION. Gracias a este error desapareció.

Además, observé que al cambiar los indicadores a SOAP_TLSv1, también hace desaparecer los errores. El indicador que causa dolores de cabeza fue SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION, que se establece de forma predeterminada dentro del indicador SOAP_SSL_DEFAULT.

Todo parecía estar bien, hasta que recompuse gsoap desde el código fuente --enable-debug. Poco después comencé a ver algo como:

SSL verifica error o advertencia con certificado en profundidad 1: no se puede obtener certificado de emisor local

La mejor solución que he encontrado hasta ahora es descargar el archivo cacerts.pem del sitio gsoap https://www.cs.fsu.edu/~engelen/cacerts.pem.zip y descomprimirlos junto al ejecutable.

Y, por supuesto, en tu código deberías tener algo similar a:

soap *soap = soap_new(); soap->ssl_flags = SOAP_SSL_DEFAULT; soap_register_plugin(soap, soap_wsse); soap->cafile = "cacerts.pem";

Entonces desaparecen todos los mensajes de advertencia y error.


Esto funciona para mí:

soap_ssl_client_context(m_proxy.soap, SOAP_SSL_NO_AUTHENTICATION, NULL, NULL, NULL, NULL, NULL);

donde m_proxy es una instancia del proxy del cliente generado utilizando gSOAP:

wsdl2h.exe -o MyWebservice.h ../MyWebservice.wsdl soapcpp2.exe -IC:/gsoap-2.8/gsoap/import -j MyWebservice.h -C -1 -SL