View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0004917 | libmicrohttpd2 | HTTPS (TLS) | public | 2017-02-22 21:29 | 2025-09-07 01:02 |
| Reporter | silvioprog | Assigned To | Karlson2k | ||
| Priority | normal | Severity | feature | Reproducibility | have not tried |
| Status | assigned | Resolution | open | ||
| Product Version | Git master | ||||
| Summary | 0004917: OpenSSL support | ||||
| Description | Hello, It would be nice to implement OpenSSL support in MHD. Thank you! | ||||
| Tags | No tags attached. | ||||
| related to | 0006671 | new | New API support allowing to load the TLS library dynamically. |
|
|
Hello, I made changes to support OpenSSL and other TLS engines. You will find my working branch here: https://github.com/ghaderer/libmicrohttpd/tree/wip-openssl-master. Could you review it and tell me if this is something you could integrate? If you don't, what should be done to improve it and have it checked in? I tested on Linux/amd64. All existing tests pass. Not tested on Windows at all. Cheers, Gauthier |
|
|
Hello. Thanks a lot for implementing and sharing it, I'm going to test your changes as soon as possible. OpenSSL support is an awesome feature, it requires a detailed test ... |
|
|
Hello again @ghaderer . I took a look at your changes, really impressive. However, I've tried to compile it on my Xubuntu and got the following error: ./configure --with-gnutls=no --with-openssl=yes make [snip] gcc -DHAVE_CONFIG_H -I. -I../.. -I../../src/include -DDATA_DIR=\"../../src/datadir/\" -DCPU_COUNT=8 -g -O2 -fno-strict-aliasing -MT benchmark-benchmark.o -MD -MP -MF .deps/benchmark-benchmark.Tpo -c -o benchmark-benchmark.o `test -f 'benchmark.c' || echo './'`benchmark.c mv -f .deps/benchmark-benchmark.Tpo .deps/benchmark-benchmark.Po /bin/bash ../../libtool --tag=CC --mode=link gcc -g -O2 -fno-strict-aliasing -o benchmark benchmark-benchmark.o ../../src/microhttpd/libmicrohttpd.la libtool: link: gcc -g -O2 -fno-strict-aliasing -o .libs/benchmark benchmark-benchmark.o ../../src/microhttpd/.libs/libmicrohttpd.so -pthread ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_del_session' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_del_context' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_create_context' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_set_context_client_certificate_mode' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_set_context_certificate_cb' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_session_wants_write' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_set_https_callbacks' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_global_deinit' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_tls_connection_shutdown' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_session_read' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_get_session_protocol_version' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_get_specific_session' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_session_close' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_session_read_pending' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_run_tls_handshake_' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_set_context_trust_certificate' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_get_session_cipher_algorithm' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_session_wants_read' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_set_context_cipher_priorities' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_lookup_engine' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_create_session' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_engine_has_feature' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_set_context_dh_params' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_global_init' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_set_context_certificate' ../../src/microhttpd/.libs/libmicrohttpd.so: undefined reference to `MHD_TLS_session_write' collect2: error: ld returned 1 exit status Makefile:734: recipe for target 'benchmark' failed make[4]: *** [benchmark] Error 1 make[4]: Leaving directory '/home/silvioprog/dev/git/libmicrohttpd2/src/examples' Makefile:938: recipe for target 'all-recursive' failed make[3]: *** [all-recursive] Error 1 make[3]: Leaving directory '/home/silvioprog/dev/git/libmicrohttpd2/src/examples' Makefile:418: recipe for target 'all-recursive' failed make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory '/home/silvioprog/dev/git/libmicrohttpd2/src' Makefile:549: recipe for target 'all-recursive' failed make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory '/home/silvioprog/dev/git/libmicrohttpd2' Makefile:454: recipe for target 'all' failed make: *** [all] Error 2 It should link openssl by itself. Another test:
./configure --with-openssl=no
make
[snip]
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../.. -I../../src/include -I../../src/microhttpd -I/usr/include/p11-kit-1 -DBUILDING_MHD_LIB=1 -fvisibility=hidden -pthread -I/usr/include/p11-kit-1 -g -O2 -fno-strict-aliasing -MT libmicrohttpd_la-connection.lo -MD -MP -MF .deps/libmicrohttpd_la-connection.Tpo -c connection.c -fPIC -DPIC -o .libs/libmicrohttpd_la-connection.o
In file included from internal.h:32:0,
from connection.c:28:
tls.h:493:31: error: field ‘gnutls’ has incomplete type
struct MHD_GnuTLS_Context gnutls;
^
tls.h:529:31: error: field ‘gnutls’ has incomplete type
struct MHD_GnuTLS_Session gnutls;
^
connection.c: In function ‘MHD_get_connection_info’:
connection.c:3764:28: warning: implicit declaration of function ‘gnutls_cipher_get’ [-Wimplicit-function-declaration]
connection->cipher = gnutls_cipher_get (connection->tls_session->d.gnutls
^
connection.c:3775:30: warning: implicit declaration of function ‘gnutls_protocol_get_version’ [-Wimplicit-function-declaration]
connection->protocol = gnutls_protocol_get_version (connection->tls_sessi
^
Makefile:1182: recipe for target 'libmicrohttpd_la-connection.lo' failed
make[3]: *** [libmicrohttpd_la-connection.lo] Error 1
make[3]: Leaving directory '/home/silvioprog/dev/git/libmicrohttpd2/src/microhttpd'
Makefile:418: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory '/home/silvioprog/dev/git/libmicrohttpd2/src'
Makefile:549: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/silvioprog/dev/git/libmicrohttpd2'
Makefile:454: recipe for target 'all' failed
make: *** [all] Error 2
|
|
|
Hello silvioprog, Thank you for taking time to test and review my changes. Regarding the missing symbols issue, I broke the HTTPS support auto-detection. For the second issue, it was due to a typo which caused the build to break when GnuTLS was enabled but not OpenSSL. I fixed both of them and pushed on the same branch. I hope I did not make other mistakes! :-/ Let me know if you have other issues or questions regarding all of this. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2017-02-22 21:29 | silvioprog | New Issue | |
| 2017-02-22 21:29 | silvioprog | Tag Attached: feature | |
| 2017-03-08 00:05 | Christian Grothoff | Product Version | => Git master |
| 2017-03-08 00:05 | Christian Grothoff | Summary | [FEATURE REQUEST] OpenSSL support => OpenSSL support |
| 2017-10-13 14:36 | ghaderer | Note Added: 0012475 | |
| 2018-02-01 00:07 | silvioprog | Note Added: 0012847 | |
| 2018-02-01 01:07 | silvioprog | Note Added: 0012848 | |
| 2018-02-01 09:38 | ghaderer | Note Added: 0012851 | |
| 2024-01-21 13:25 | Christian Grothoff | Category | HTTPS (SSL) => HTTPS (TLS) |
| 2024-01-21 13:37 | Christian Grothoff | Relationship added | related to 0006671 |
| 2024-02-29 22:50 | Christian Grothoff | Tag Detached: feature | |
| 2025-09-07 01:01 | root | Project | libmicrohttpd => libmicrohttpd2 |
| 2025-09-07 01:02 | Christian Grothoff | Assigned To | => Karlson2k |
| 2025-09-07 01:02 | Christian Grothoff | Status | new => assigned |