Am 30.06.2022 um 22:25 schrieb David Sommerseth:
On 20/05/2022 23:32, Arne Schwabe wrote:
Current exit notification relies on data channel messages with specific
prefix. Adding these to new data channel modules (DCO) adds unncessary
complexity for the data for messages that from their idea belong to the
control channel anyway.

This patch adds announcing support for control channel and sending/receving
it. We use the simple EXIT message for this.

Patch V2: add comment about protocol-flags to be not a user visible option,
           fix various grammar mistakes, remove unused argument to
           receive_exit_message
---
  doc/man-sections/client-options.rst |  7 ++++++-
  src/openvpn/crypto.h                |  5 +++++
  src/openvpn/forward.c               |  4 ++++
  src/openvpn/multi.c                 |  5 +++++
  src/openvpn/options.c               | 20 ++++++++++++++++++++
  src/openvpn/push.c                  | 19 +++++++++++++++++++
  src/openvpn/push.h                  |  2 ++
  src/openvpn/sig.c                   | 27 +++++++++++++++++++++++++--
  src/openvpn/ssl.c                   |  3 +++
  src/openvpn/ssl.h                   |  3 +++
  src/openvpn/ssl_ncp.c               |  5 +++++
  11 files changed, 97 insertions(+), 3 deletions(-)


[...snip...]

diff --git a/src/openvpn/options.c b/src/openvpn/options.c
index 9ff384d09..427d58392 100644
--- a/src/openvpn/options.c
+++ b/src/openvpn/options.c
@@ -8326,6 +8326,8 @@ add_option(struct options *options,
      }
      else if (streq(p[0], "key-derivation") && p[1])
      {
+        /* NCP only option that is pushed by the server to enable EKM,
+         * should not be used by normal users in config files*/

This part seems unrelated.


Yes. But basically adding that documentation for the other push only protocol felt related and small enough to not warrant an extra patch.


          VERIFY_PERMISSION(OPT_P_NCP)
  #ifdef HAVE_EXPORT_KEYING_MATERIAL
          if (streq(p[1], "tls-ekm"))
@@ -8338,6 +8340,24 @@ add_option(struct options *options,
              msg(msglevel, "Unknown key-derivation method %s", p[1]);
          }
      }
+    else if (streq(p[0], "protocol-flags") && p[1])
+    {
+        /* NCP only option that is pushed by the server to enable protocol +         * features that are negotiated, should not be used by normal users
+         * in config files */
+        VERIFY_PERMISSION(OPT_P_NCP)
+        for (size_t j = 1; j < MAX_PARMS && p[j] != NULL; j++)
+        {
+            if (streq(p[j], "cc-exit"))
+            {
+                options->data_channel_crypto_flags |= CO_USE_CC_EXIT_NOTIFY;
+            }
+            else
+            {
+                msg(msglevel, "Unknown protocol-flags flag: %s", p[j]);
+            }
+        }
+    }

Isn't it possible to do this by pushing IV_PROTO from the server to the client?  That could be more compact than adding 22 more bytes to the PUSH_REPLY while IV_PROTO takes less "space" on the wire to indicate a feature.  Plus the client already sends the IV_PROTO with the CC_EXIT_NOTIFY feature flag to the server with this patch.

The whole peer info field is empty and happens at a very different time before even looking at ccd/connect-script/deferred password aut etc that might influence what is pushed to a client. So pushing configuration at a completely different time that is extremely early is just adding a lot of extra complexity. We do it this way in p2p mode by comparing IV_PROTO values from two clients but that p2p mode has nothing after the initial handshake and will consider a session established after the initial handshake.

Space in push reply is not really a big concern as push replies don't have the tight limit that the packet the IV_PROTO contains has. If we wanted to have something that is more space efficient, we could change  protocol-flags cc-exit feat2 feat3 to proto-flgs 82734 like IV_PROTO. Basically if I had been a bit more forwarding looking we would now have protocol-flags ekm cc-exit instead of key-derivation ekm and protocol-flags cc-exit


The rest of the code otherwise looks reasonable with the current "option approach".  The client also sends the IV_PROTO_CC_EXIT_NOTIFY flag to the server, as expected.




_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to