Openssl 3.0.0

Julien ÉLIE julien at trigofacile.com
Sun Oct 17 11:45:17 UTC 2021


Hi all,

> tls.c: In function 'eckey_from_name':
> tls.c:473:5: warning: 'EC_KEY_new_by_curve_name' is deprecated: Since 
> OpenSSL 3.0 [-Wdeprecated-declarations]
>    473 |     eckey = EC_KEY_new_by_curve_name(builtin_curves[i].nid);
>        |     ^~~~~

FYI, all the mechanisms to select curves have changed.
I've managed to find the right function to use:
   https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set1_groups.html

We just need now a straight-forward call like:
   SSL_CTX_set1_groups_list(CTX, "X25519");

intead of all the machinery to find out the ID of the curve name.
The new OpenSSL 3.0.0 is great!
I hope it will now remain stable because we have #if for 0.9.8, 0.9.8d, 
1.0.2, 1.1.0, 1.1.1 and 3.0.0 versions.

I've checked that if the provided curve does not exist, nnrpd negotiates 
the default one.  Otherwise, it takes it into account.

[tlseccurve: "X25519" in inn.conf]
Server Temp Key: X25519, 253 bits

[tlseccurve: "P-256" in inn.conf]
Server Temp Key: ECDH, P-256, 256 bits



=> We now fully support the new OpenSSL 3.0.0 API.




--- a/nnrpd/tls.c
+++ b/nnrpd/tls.c
@@ -440,10 +440,13 @@ set_cert_stuff(SSL_CTX * ctx, char *cert_file, 
char *key_file)
  }


-#ifdef HAVE_OPENSSL_ECC
+#if defined(HAVE_OPENSSL_ECC) && OPENSSL_VERSION_NUMBER < 0x01010100fL
  /*
  **  Provide an ECKEY from a curve name.
  **  Accepts a NULL pointer as the name.
+**  The EC_KEY_new_ey_curve_name() function has been deprecated in
+**  OpenSSL 3.0.0; another mechanism to select groups has been available
+**  since OpenSSL 1.1.1.
  **
  **  Returns the key, or NULL on error.
  */
@@ -512,9 +515,6 @@ tls_init_serverengine(int verifydepth, int askcert, 
int requirecert,
      struct stat buf;
      size_t  tls_protos = 0;
      size_t  i;
-#ifdef HAVE_OPENSSL_ECC
-    EC_KEY *eckey;
-#endif

      if (tls_serverengine)
        return (0);                              /* Already running. */
@@ -593,9 +593,18 @@ tls_init_serverengine(int verifydepth, int askcert, 
int requirecert,
      /* We set a curve here by name if provided
       * or we use OpenSSL (>= 1.0.2) auto-selection
       * or we default to NIST P-256. */
-    eckey = eckey_from_name(tls_ec_curve);
-    if (eckey != NULL) {
-        SSL_CTX_set_tmp_ecdh(CTX, eckey);
+    if (tls_ec_curve != NULL) {
+# if OPENSSL_VERSION_NUMBER < 0x01010100fL
+        /* A new mechanism to select groups has been introduced
+         * in OpenSSL 1.1.1. */
+        EC_KEY *eckey;
+        eckey = eckey_from_name(tls_ec_curve);
+        if (eckey != NULL) {
+            SSL_CTX_set_tmp_ecdh(CTX, eckey);
+        }
+# else
+        SSL_CTX_set1_groups_list(CTX, tls_ec_curve);
+# endif
      } else {
  # if OPENSSL_VERSION_NUMBER < 0x010100000L
  #  if OPENSSL_VERSION_NUMBER >= 0x01000200fL





-- 
Julien ÉLIE

« C'est une forêt vierge où la main de l'homme n'a jamais mis le pied. »


More information about the inn-workers mailing list