In case of the fix for the engine I still cannot verify it because it fails when I run OST locally,
I am leaning towards reverting the offending patch.
Artur

On Tue, Feb 23, 2021 at 8:42 AM Vojtech Juranek <vjuranek@redhat.com> wrote:
Given the code freeze this week, could you please merge ASAP, so that we can
run OST with other patches?
Thanks
Vojta

On Monday, 22 February 2021 17:07:49 CET Artur Socha wrote:
> And the fix for the engine is here:
> https://gerrit.ovirt.org/#/c/ovirt-engine/+/113650/
>
> Artur
>
> On 22.02.2021 16:29, Marcin Sobczyk wrote:
> > Hi,
> >
> > On 2/22/21 4:21 PM, Yedidyah Bar David wrote:
> >> On Mon, Feb 22, 2021 at 4:51 PM Artur Socha <asocha@redhat.com> wrote:
> >>> Hi Didi,
> >>> You are probably right that enabling Strict Transport Security caused
> >>> that bug as an unfortunate side-effect.
> >>> Do you think that, adding some sort of exception for cert url would be
> >>> an acceptable fix?  For example we have this kind of rule for excluding
> >>> authentication for Rest api docs.
> >>
> >> If we already have an exception, and hopefully some process to add one,
> >> then I think it makes sense for this case as well.
> >>
> >> I admit, though, that I do not feel completely happy with this. On one
> >> hand,
> >> this is insecure, and on the other hand, there is no way to do this
> >> securely
> >> using the existing official means.
> >>
> >> This thread also made me think about the hosted-engine deploy process.
> >> In standalone engine setup, the user is responsible for installing the
> >> OS,
> >> so it's up to the user to control (or not) generation of the sshd
> >> private key
> >> for allowing later secure access to it using ssh. For hosted-engine,
> >> it's us,
> >> and I do not think we do anything around this. Perhaps we should.
> >>
> >> TL;DR: IMO:
> >> 1. Please add an exception. Please open another bug for this.
> >> 2. We should document how to get the engine CA cert not using https:
> >> ssh to the engine machine; cat /etc/pki/ovirt-engine/ca.pem .
> >> 3. We should consider our options for hosted-engine. Filed now [1].
> >>
> >> [1] https://bugzilla.redhat.com/show_bug.cgi?id=1931510
> >>
> >> Best regards,
> >
> > For now I posted a patch for OST that will unblock basic suite [2].
> > When we have a proper solution we should adapt the tests to the new way
> > of working.
> >
> > Regards, Marcin
> >
> > [2] https://gerrit.ovirt.org/#/c/ovirt-system-tests/+/113649/
> >
> >>> Artur
> >>>
> >>> On 22.02.2021 13:52, Yedidyah Bar David wrote:
> >>>> On Mon, Feb 22, 2021 at 3:12 AM <jenkins@jenkins.phx.ovirt.org> wrote:
> >>>>> Project:
> >>>>> https://jenkins.ovirt.org/job/ovirt-system-tests_basic-suite-master_ni
> >>>>> ghtly/
> >>>>>
> >>>>> Build:
> >>>>> https://jenkins.ovirt.org/job/ovirt-system-tests_basic-suite-master_ni
> >>>>> ghtly/894/
> >>>>>
> >>>>> Build Number: 894
> >>>>> Build Status:  Failure
> >>>>> Triggered By: Started by timer
> >>>>>
> >>>>> -------------------------------------
> >>>>> Changes Since Last Success:
> >>>>> -------------------------------------
> >>>>> Changes for Build #894
> >>>>> [Andrej Cernek] ost_utils: Remove explicit object inheritance
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> -----------------
> >>>>> Failed Tests:
> >>>>> -----------------
> >>>>> 1 tests failed.
> >>>>> FAILED:
> >>>>> basic-suite-master.test-scenarios.test_002_bootstrap.test_verify_engin
> >>>>> e_certs[CA certificate]
> >>>>>
> >>>>> Error Message:
> >>>>> ost_utils.shell.ShellError: Command failed with rc=1. Stdout:
> >>>>> Stderr: unable to load certificate
> >>>>> 139734854465344:error:0909006C:PEM routines:get_name:no start
> >>>>> line:crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE
> >>>>>
> >>>>> Stack Trace:
> >>>>> key_format = 'X509-PEM-CA'
> >>>>> verification_fn = <function <lambda> at 0x7f6aab2add90>,
> >>>>> engine_fqdn = 'engine'
> >>>>> engine_download = <function engine_download.<locals>.download at
> >>>>> 0x7f6aa98d5ea0>
> >>>>>
> >>>>>      @pytest.mark.parametrize("key_format, verification_fn", [
> >>>>>          pytest.param(
> >>>>>              'X509-PEM-CA',
> >>>>>              lambda path: shell.shell(["openssl", "x509", "-in",
> >>>>> path, "-text", "-noout"]),
> >>>>>              id="CA certificate"
> >>>>>          ),
> >>>>>          pytest.param(
> >>>>>              'OPENSSH-PUBKEY',
> >>>>>              lambda path: shell.shell(["ssh-keygen", "-l", "-f",
> >>>>> path]),
> >>>>>              id="ssh pubkey"
> >>>>>          ),
> >>>>>      ])
> >>>>>      @order_by(_TEST_LIST)
> >>>>>      def test_verify_engine_certs(key_format, verification_fn,
> >>>>> engine_fqdn,
> >>>>>                                   engine_download):
> >>>>>          url =
> >>>>> 'http://{}/ovirt-engine/services/pki-resource?resource=ca-certificate&
> >>>>> format={}'>>>>
> >>>> I guess (didn't check, only looked at engine git log) that this is a
> >>>> result of [1].
> >>>>
> >>>> Anyone looking at this?
> >>>>
> >>>> This is trying to download the engine ca cert via http, and then do
> >>>> some verification on it.
> >>>>
> >>>> Generally speaking, this is a chicken-and-egg problem: You can't
> >>>> securely download
> >>>> a ca cert if you need this cert to securely download it.
> >>>>
> >>>> For OST, it might be easy to fix by s/http/https/ and perhaps passing
> >>>> some param to
> >>>> make it not check certs in https. But I find it quite reasonable that
> >>>> others are doing
> >>>> similar things and will now be broken by this change [1]. If so, we
> >>>> might decide that
> >>>> this is "by design" - that whoever that gets broken, should fix their
> >>>> stuff one way or
> >>>> another (like OST above, or via safer means if possible/relevant, such
> >>>> as using ssh
> >>>> to securely connect to the engine machine and then get the cert from
> >>>> there somehow
> >>>> (do we have an api for this?)). Or we can decide that it's an engine
> >>>> bug - that [1]
> >>>> should have allowed this specific url to bypass hsts.
> >>>>
> >>>> [1] https://gerrit.ovirt.org/c/ovirt-engine/+/113508
> >>>>
> >>>>>          with http_proxy_disabled(), tempfile.NamedTemporaryFile()
> >>>>> as tmp:
> >>>>>              engine_download(url.format(engine_fqdn, key_format),
> >>>>> tmp.name)
> >>>>>
> >>>>>              try:
> >>>>>>                verification_fn(tmp.name)
> >>>>>
> >>>>> ../basic-suite-master/test-scenarios/test_002_bootstrap.py:292:
> >>>>> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> >>>>> _ _ _ _ _ _
> >>>>> ../basic-suite-master/test-scenarios/test_002_bootstrap.py:275: in
> >>>>> <lambda>
> >>>>>      lambda path: shell.shell(["openssl", "x509", "-in", path,
> >>>>> "-text", "-noout"]),
> >>>>> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> >>>>> _ _ _ _ _ _
> >>>>>
> >>>>> args = ['openssl', 'x509', '-in', '/tmp/tmpnj42cxm2', '-text',
> >>>>> '-noout']
> >>>>> bytes_output = False, kwargs = {}
> >>>>> process = <subprocess.Popen object at 0x7f6aa98143c8>, out = ''
> >>>>> err = 'unable to load
> >>>>> certificate\n139734854465344:error:0909006C:PEM
> >>>>> routines:get_name:no start line:crypto/pem/pem_lib.c:745:Expecting:
> >>>>> TRUSTED CERTIFICATE\n'
> >>>>>
> >>>>>      def shell(args, bytes_output=False, **kwargs):
> >>>>>          process = subprocess.Popen(args,
> >>>>>                                     stdout=subprocess.PIPE,
> >>>>>                                     stderr=subprocess.PIPE,
> >>>>>                                     **kwargs)
> >>>>>          out, err = process.communicate()
> >>>>>
> >>>>>          if not bytes_output:
> >>>>>              out = out.decode("utf-8")
> >>>>>              err = err.decode("utf-8")
> >>>>>
> >>>>>          if process.returncode:
> >>>>>>            raise ShellError(process.returncode, out, err)
> >>>>>
> >>>>> E           ost_utils.shell.ShellError: Command failed with rc=1.
> >>>>> Stdout:
> >>>>> E
> >>>>> E           Stderr:
> >>>>> E           unable to load certificate
> >>>>> E           139734854465344:error:0909006C:PEM routines:get_name:no
> >>>>> start line:crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE
> >>>>
> >>>> (As I said, didn't check myself - I suppose that hsts causes httpd to
> >>>> return some kind of redirect, and this is the way openssl fails when
> >>>> we input this redirect instead of a cert).
> >>>>
> >>>> Best regards,

_______________________________________________
Devel mailing list -- devel@ovirt.org
To unsubscribe send an email to devel-leave@ovirt.org
Privacy Statement: https://www.ovirt.org/privacy-policy.html
oVirt Code of Conduct: https://www.ovirt.org/community/about/community-guidelines/
List Archives: https://lists.ovirt.org/archives/list/devel@ovirt.org/message/N72N67VDSY2Z55WQOSW2Y24ZBB3KGARS/


--
Artur Socha
Senior Software Engineer, RHV
Red Hat