On Fri, May 14, 2021 at 2:43 AM Ilya Maximets <[email protected]> wrote:
>
> On 5/13/21 11:33 PM, Han Zhou wrote:
> > From the description of this interface, one of the problems it tries to
> > solve is when one of the files is changed before the other:
> >
> >  * But, if the private
> >  * key is changed before the certificate (e.g. someone "scp"s or "mv"s
the new
> >  * private key in place before the certificate), then OpenSSL would
reject that
> >  * change, and then the change of certificate would succeed, but there
would be
> >  * no associated private key (because it had only changed once and
therefore
> >  * there was no point in re-reading it).
> >
> >  * This function avoids both problems by, whenever either the
certificate or
> >  * the private key file changes, re-reading both of them ...
> >
> > However, in the implement it used "&&" instead of "||", and so it was
> > in fact re-reading both of them only when both are changed. This patch
> > fixes it by using "||".
> >
> > Reported-by: Girish Moodalbail <[email protected]>
> > Reported-at:
https://mail.openvswitch.org/pipermail/ovs-discuss/2020-December/050859.html
> > Signed-off-by: Han Zhou <[email protected]>
> > ---
> >  lib/stream-ssl.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/lib/stream-ssl.c b/lib/stream-ssl.c
> > index 078fcbc3a..e67ccb4bd 100644
> > --- a/lib/stream-ssl.c
> > +++ b/lib/stream-ssl.c
> > @@ -1215,7 +1215,7 @@ stream_ssl_set_key_and_cert(const char
*private_key_file,
> >                              const char *certificate_file)
> >  {
> >      if (update_ssl_config(&private_key, private_key_file)
> > -        && update_ssl_config(&certificate, certificate_file)) {
> > +        || update_ssl_config(&certificate, certificate_file)) {
> >          stream_ssl_set_certificate_file__(certificate_file);
> >          stream_ssl_set_private_key_file__(private_key_file);
> >      }
> >
>
> Hi, Han.  Thanks for working on this.
>
> This change might fix the issue, but I'm not sure that updating only
> one of the components makes much sense.  I mean, certificate and private
> key should match, otherwise setup will be broken while the second
> component is not updated, IIUC.
>
I agree that it doesn't make sense to set mismatched cert & key. However, I
think it is not this interface's responsibility. This patch only intended
to fix the implementation to support what the description has mentioned.
What's in my mind was, the user who calls the interface (or the end user)
is responsible for providing matched cert & key files to make sure the SSL
works, but if they failed to do so at some circumstances, they should still
be able to correct the problem (by correcting the wrong file) and then call
this interface to fix it. The original implementation doesn't work in this
situation when user tries to correct the problem. With this patch it will
work when the mismatch files are corrected.

> I'm not sure, but maybe you're looking for solution for the same problem
> as this patch tries to address:
>
https://patchwork.ozlabs.org/project/openvswitch/patch/[email protected]/
> ?
>
Thanks for sharing. I didn't notice this before, but it looks indeed a
better solution for the above mentioned problem. However, there seems to be
a new problem in a corner case: if a user placed mismatched cert & key
files when the first time this interface is called, and later on fixes the
mismatch by correcting the wrong file (either cert or key, but not both),
then calling the interface again would not fix the problem because the
function would just return. It would work only if both files are changed
(e.g. generating a new pair, or if the user reads the code and gets the
tricks to pretend that both files are changed). I am not sure if this
corner case is of importance. Otherwise that patch looks better and I am ok
to drop my patch.

Thanks,
Han
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to