On Mon, Feb 22, 2021 at 3:12 AM <[email protected]> wrote:
>
> Project: 
> https://jenkins.ovirt.org/job/ovirt-system-tests_basic-suite-master_nightly/
> Build: 
> https://jenkins.ovirt.org/job/ovirt-system-tests_basic-suite-master_nightly/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_engine_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,
-- 
Didi
_______________________________________________
Devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]
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/[email protected]/message/KQKHQN46YMAPFJDXIFWSZRGPS5SA5TNA/

Reply via email to