diff --git a/library/network/http_client/README.md b/library/network/http_client/README.md index 288ad58d..6a995c8c 100644 --- a/library/network/http_client/README.md +++ b/library/network/http_client/README.md @@ -10,6 +10,9 @@ It provides simple routine to perform http requests, and get response. - Eiffel Net library - and optionally Eiffel NetSSL library to support `https://...` +* Note: set ciphers settings is supported only with libcurl implementation for now, net implementation +set all the ciphers as part of the OpenSSL initialization. + This means on Windows, do not forget to copy the libcurl.dll (and related) either in the same directory of the executable, or ensure the .dll are in the PATH environment. It is possible to exclude the libcurl implementation xor the Eiffel Net implementation: diff --git a/library/network/http_client/src/http_client_session.e b/library/network/http_client/src/http_client_session.e index 5272173e..ae9177f6 100644 --- a/library/network/http_client/src/http_client_session.e +++ b/library/network/http_client/src/http_client_session.e @@ -272,6 +272,15 @@ feature -- Authentication -- Associated optional credentials value. -- Computed as `username':`password'. + ciphers_settings: detachable READABLE_STRING_8 + -- SSL cipher preference lists + -- examples: DEFAULT, ALL, TLSv1 + -- check https://www.openssl.org/docs/man1.1.0/apps/ciphers.html + --Warning At the moment only used for LIB_CURL_HTTP_CLIENT + --Warning Net implementation set all the ciphers using the OpenSSL at + --Warning initialization time. + + feature -- Status setting set_is_debug (b: BOOLEAN) @@ -401,6 +410,14 @@ feature -- Element change chunk_size := a_size end + set_ciphers_settings (a_ciphers_settings: READABLE_STRING_8) + -- Set 'ciphers_settings' with 'a_ciphers_settings'. + do + create {STRING_8} ciphers_settings.make_from_string (a_ciphers_settings) + ensure + cipher_settings_set: attached ciphers_settings as c_settings and then c_settings.same_string (a_ciphers_settings) + end + note copyright: "2011-2017, Jocelyn Fiat, Javier Velilla, Eiffel Software and others" license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" diff --git a/library/network/http_client/src/spec/libcurl/libcurl_http_client_request.e b/library/network/http_client/src/spec/libcurl/libcurl_http_client_request.e index 13e44bbb..5fda6c06 100644 --- a/library/network/http_client/src/spec/libcurl/libcurl_http_client_request.e +++ b/library/network/http_client/src/spec/libcurl/libcurl_http_client_request.e @@ -372,6 +372,11 @@ feature -- Execution curl_easy.setopt_integer (curl_handle, {CURL_OPT_CONSTANTS}.curlopt_ssl_verifypeer, 0) end + --| Cipher List + if attached session.ciphers_settings as c_list then + curl_easy.setopt_string (curl_handle, {CURL_OPT_CONSTANTS}.curlopt_ssl_cipher_list, c_list ) + end + --| Request method if request_method.is_case_insensitive_equal ("GET") then curl_easy.setopt_integer (curl_handle, {CURL_OPT_CONSTANTS}.curlopt_httpget, 1)