From: Daniel Stenberg Date: Thu, 22 Dec 2022 18:57:16 +0000 (+0100) Subject: libssh2: try sha2 algos for hostkey methods X-Git-Tag: curl-7_88_0~229 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ccf1ca94303a56f661adbf8412748d6894848f64;p=thirdparty%2Fcurl.git libssh2: try sha2 algos for hostkey methods As is supported by recent libssh2, but should just be ignored by older versions. Reported-by: norbertmm on github Assisted-by: norbertmm on github Fixes #10143 Closes #10145 --- diff --git a/lib/vssh/libssh2.c b/lib/vssh/libssh2.c index ce9229f8fa..12edaf5e8b 100644 --- a/lib/vssh/libssh2.c +++ b/lib/vssh/libssh2.c @@ -840,6 +840,8 @@ static CURLcode ssh_force_knownhost_key_type(struct Curl_easy *data) #endif static const char * const hostkey_method_ssh_rsa = "ssh-rsa"; + static const char * const hostkey_method_ssh_rsa_all + = "rsa-sha2-256,rsa-sha2-512,ssh-rsa"; static const char * const hostkey_method_ssh_dss = "ssh-dss"; @@ -914,7 +916,16 @@ static CURLcode ssh_force_knownhost_key_type(struct Curl_easy *data) break; #endif case LIBSSH2_KNOWNHOST_KEY_SSHRSA: - hostkey_method = hostkey_method_ssh_rsa; +#ifdef HAVE_LIBSSH2_VERSION + if(libssh2_version(0x010900)) + /* since 1.9.0 libssh2_session_method_pref() works as expected */ + hostkey_method = hostkey_method_ssh_rsa_all; + else +#endif + /* old libssh2 which cannot correctly remove unsupported methods due + * to bug in src/kex.c or does not support the new methods anyways. + */ + hostkey_method = hostkey_method_ssh_rsa; break; case LIBSSH2_KNOWNHOST_KEY_SSHDSS: hostkey_method = hostkey_method_ssh_dss;