Hello Salvatore Bonaccorso, just tried to find some information without deeper knowledge of spice or openssl.
In the end I think the update of openssl from 1.1.0h-4 to 1.1.1-4 makes the difference. Since some 1.1.1 version /etc/ssl/openssl.cnf seems to contain: CipherString = DEFAULT@SECLEVEL=2 This level is responsible to not accept the 80 bits used in the certificate in this test, while we need at least 112 bits. Therefore I assume upstream should replace this certificate. "Generating self-signed certificates" ([1],[2]) may give some pointers how these files were generated. [1] https://www.spice-space.org/spice-user-manual.html [2] https://cgit.freedesktop.org/spice/spice/commit/server/tests/pki?id=7b5e294a363e1500ab1a5b143da1602c9fed0547 More information in following links: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=907015 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=907518 https://wiki.debian.org/ContinuousIntegration/TriagingTips/openssl-1.1.1 Kind regards, Bernhard
apt update apt dist-ugprade apt build-dep spice apt install devscripts gdb mkdir spice/orig -p cd spice/orig apt source spice cd ../.. mkdir libssl1.1/orig -p cd libssl1.1/orig apt source libssl1.1 cd ../.. mkdir libssl1.1-buster/orig -p cd libssl1.1-buster/orig dget http://http.debian.net/debian/pool/main/o/openssl/openssl_1.1.0h-4.dsc cd ../.. cd spice cp -a orig try1 cd try1/spice-0.14.0/ dpkg-buildpackage -> Builds in buster -> Switch to unstable apt update apt dist-upgrade Die folgenden Pakete werden aktualisiert (Upgrade): autopoint ca-certificates console-setup console-setup-linux cpp debhelper dirmngr dmidecode dpkg dpkg-dev g++ gcc gettext gettext-base gnupg gnupg-l10n gnupg-utils gpg gpg-agent gpg-wks-client gpg-wks-server gpgconf gpgsm gpgv gzip ifupdown keyboard-configuration libdpkg-perl libegl-mesa0 libegl1-mesa-dev libgbm1 libgl1-mesa-dev libgl1-mesa-dri libglapi-mesa libgles2-mesa-dev libglx-mesa0 libgnutls-dane0 libgnutls30 libgpgme11 libio-socket-ssl-perl libltdl7 libnet-dns-sec-perl libnet-ssleay-perl libnghttp2-14 libpython3.6-minimal libpython3.6-stdlib libsoup2.4-1 libssl-dev libssl1.1 libtool linux-image-4.18.0-1-amd64 linux-image-amd64 linux-libc-dev mesa-common-dev openssl publicsuffix python3-gpg python3.6 python3.6-minimal wget apt autoremove reboot apt install libglib2.0-0-dbgsym cd spice cp -a orig try2 cd try2/spice-0.14.0/ dpkg-buildpackage PASS: test-stat-file ../../test-driver: Zeile 107: 14389 Trace/Breakpoint ausgelöst "$@" > $log_file 2>&1 FAIL: test-leaks PASS: test-vdagent PASS: test-fail-on-null-core-interface PASS: test-empty-success PASS: test-channel =============================================== spice 0.14.0: server/tests/test-suite.log =============================================== # TOTAL: 13 # PASS: 12 # SKIP: 0 # XFAIL: 0 # FAIL: 1 # XPASS: 0 # ERROR: 0 .. contents:: :depth: 2 FAIL: test-leaks ================ /server/server leaks: (./test-leaks:14389): Spice-WARNING **: 10:38:37.328: reds.c:2860:reds_init_ssl: Could not load certificates from /home/benutzer/spice/try2/spice-0.14.0/server/tests/pki/server-cert.pem FAIL test-leaks (exit status: 133) ============================================================================ Testsuite summary for spice 0.14.0 ============================================================================ # TOTAL: 13 # PASS: 12 # SKIP: 0 # XFAIL: 0 # FAIL: 1 # XPASS: 0 # ERROR: 0 ============================================================================ See server/tests/test-suite.log Please report to spice-de...@lists.freedesktop.org ============================================================================ make[8]: *** [Makefile:1301: test-suite.log] Fehler 1 cd server/tests gdb -q --args ./test-leaks set height 0 set width 0 set pagination off directory /home/benutzer/spice/try2/spice-0.14.0/server directory /home/benutzer/libssl1.1/orig/openssl-1.1.1/ssl run benutzer@debian:~/spice/try2/spice-0.14.0/server/tests$ gdb -q --args ./test-leaks Reading symbols from ./test-leaks...done. (gdb) set height 0 (gdb) set width 0 (gdb) set pagination off (gdb) run Starting program: /home/benutzer/spice/try2/spice-0.14.0/server/tests/test-leaks [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". /server/server leaks: (/home/benutzer/spice/try2/spice-0.14.0/server/tests/test-leaks:14700): Spice-WARNING **: 10:45:48.291: reds.c:2860:reds_init_ssl: Could not load certificates from /home/benutzer/spice/try2/spice-0.14.0/server/tests/pki/server-cert.pem Program received signal SIGTRAP, Trace/breakpoint trap. 0x00007ffff6add9f5 in _g_log_abort () at ../../../../glib/gmessages.c:554 554 ../../../../glib/gmessages.c: Datei oder Verzeichnis nicht gefunden. (gdb) bt #0 0x00007ffff6add9f5 in _g_log_abort (breakpoint=1) at ../../../../glib/gmessages.c:554 #1 0x00007ffff6aded0d in g_logv (log_domain=0x55555562a029 "Spice", log_level=G_LOG_LEVEL_WARNING, format=<optimized out>, args=args@entry=0x7fffffffe050) at ../../../../glib/gmessages.c:1371 #2 0x00007ffff6adeedf in g_log (log_domain=log_domain@entry=0x55555562a029 "Spice", log_level=log_level@entry=G_LOG_LEVEL_WARNING, format=format@entry=0x555555639eb5 "%s") at ../../../../glib/gmessages.c:1413 #3 0x0000555555566b22 in spice_logv (log_domain=0x55555562a029 "Spice", args=0x7fffffffe130, format=0x55555562ca80 "Could not load certificates from %s", function=0x55555562d2f8 <__FUNCTION__.50618> "reds_init_ssl", strloc=0x55555562ba39 "reds.c:2860", log_level=G_LOG_LEVEL_WARNING) at log.c:178 #4 0x0000555555566b22 in spice_log (log_level=log_level@entry=G_LOG_LEVEL_WARNING, strloc=strloc@entry=0x55555562ba39 "reds.c:2860", function=function@entry=0x55555562d2f8 <__FUNCTION__.50618> "reds_init_ssl", format=format@entry=0x55555562ca80 "Could not load certificates from %s") at log.c:196 #5 0x000055555556ed87 in reds_init_ssl (reds=0x555555696f70) at reds.c:2860 #6 0x000055555556ed87 in do_spice_init (core_interface=<optimized out>, reds=0x555555696f70) at reds.c:3457 #7 0x000055555556ed87 in spice_server_init (reds=0x555555696f70, core=<optimized out>) at reds.c:3694 #8 0x0000555555564d16 in server_leaks () at test-leaks.c:60 #9 0x00007ffff6afee7a in test_case_run (tc=0x555555695e00) at ../../../../glib/gtestutils.c:2318 #10 0x00007ffff6afee7a in g_test_run_suite_internal (suite=suite@entry=0x555555694e40, path=path@entry=0x0) at ../../../../glib/gtestutils.c:2403 #11 0x00007ffff6afed34 in g_test_run_suite_internal (suite=suite@entry=0x555555694e20, path=path@entry=0x0) at ../../../../glib/gtestutils.c:2415 #12 0x00007ffff6aff132 in g_test_run_suite (suite=0x555555694e20) at ../../../../glib/gtestutils.c:2490 #13 0x00007ffff6aff151 in g_test_run () at ../../../../glib/gtestutils.c:1755 #14 0x000055555555fb08 in main (argc=<optimized out>, argv=<optimized out>) at test-leaks.c:153 (gdb) list reds.c:2824,2908 2824 static int reds_init_ssl(RedsState *reds) 2825 { 2826 static GOnce openssl_once = G_ONCE_INIT; 2827 #if OPENSSL_VERSION_NUMBER >= 0x10000000L 2828 const SSL_METHOD *ssl_method; 2829 #else 2830 SSL_METHOD *ssl_method; 2831 #endif 2832 int return_code; 2833 /* When some other SSL/TLS version becomes obsolete, add it to this 2834 * variable. */ 2835 long ssl_options = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3; 2836 2837 /* Global system initialization*/ 2838 g_once(&openssl_once, openssl_global_init, NULL); 2839 2840 /* Create our context*/ 2841 /* SSLv23_method() handles TLSv1.x in addition to SSLv2/v3 */ 2842 ssl_method = SSLv23_method(); 2843 reds->ctx = SSL_CTX_new(ssl_method); 2844 if (!reds->ctx) { 2845 spice_warning("Could not allocate new SSL context"); 2846 return -1; 2847 } 2848 2849 /* Limit connection to TLSv1 only */ 2850 #ifdef SSL_OP_NO_COMPRESSION 2851 ssl_options |= SSL_OP_NO_COMPRESSION; 2852 #endif 2853 SSL_CTX_set_options(reds->ctx, ssl_options); 2854 2855 /* Load our keys and certificates*/ 2856 return_code = SSL_CTX_use_certificate_chain_file(reds->ctx, reds->config->ssl_parameters.certs_file); 2857 if (return_code == 1) { 2858 spice_debug("Loaded certificates from %s", reds->config->ssl_parameters.certs_file); 2859 } else { 2860 spice_warning("Could not load certificates from %s", reds->config->ssl_parameters.certs_file); 2861 return -1; 2862 } 2863 2864 SSL_CTX_set_default_passwd_cb(reds->ctx, ssl_password_cb); 2865 SSL_CTX_set_default_passwd_cb_userdata(reds->ctx, reds); 2866 2867 return_code = SSL_CTX_use_PrivateKey_file(reds->ctx, reds->config->ssl_parameters.private_key_file, 2868 SSL_FILETYPE_PEM); 2869 if (return_code == 1) { 2870 spice_debug("Using private key from %s", reds->config->ssl_parameters.private_key_file); 2871 } else { 2872 spice_warning("Could not use private key file"); 2873 return -1; 2874 } 2875 2876 /* Load the CAs we trust*/ 2877 return_code = SSL_CTX_load_verify_locations(reds->ctx, reds->config->ssl_parameters.ca_certificate_file, 0); 2878 if (return_code == 1) { 2879 spice_debug("Loaded CA certificates from %s", reds->config->ssl_parameters.ca_certificate_file); 2880 } else { 2881 spice_warning("Could not use CA file %s", reds->config->ssl_parameters.ca_certificate_file); 2882 return -1; 2883 } 2884 2885 #if (OPENSSL_VERSION_NUMBER < 0x00905100L) 2886 SSL_CTX_set_verify_depth(reds->ctx, 1); 2887 #endif 2888 2889 if (strlen(reds->config->ssl_parameters.dh_key_file) > 0) { 2890 if (load_dh_params(reds->ctx, reds->config->ssl_parameters.dh_key_file) < 0) { 2891 return -1; 2892 } 2893 } 2894 2895 SSL_CTX_set_session_id_context(reds->ctx, (const unsigned char *)"SPICE", 5); 2896 if (strlen(reds->config->ssl_parameters.ciphersuite) > 0) { 2897 if (!SSL_CTX_set_cipher_list(reds->ctx, reds->config->ssl_parameters.ciphersuite)) { 2898 return -1; 2899 } 2900 } 2901 2902 #ifndef SSL_OP_NO_COMPRESSION 2903 STACK *cmp_stack = SSL_COMP_get_compression_methods(); 2904 sk_zero(cmp_stack); 2905 #endif 2906 2907 return 0; 2908 } (gdb) list reds.c:3429,3490 3429 static int do_spice_init(RedsState *reds, SpiceCoreInterface *core_interface) 3430 { 3431 spice_debug("starting %s", VERSION); 3432 3433 if (core_interface->base.major_version != SPICE_INTERFACE_CORE_MAJOR) { 3434 spice_warning("bad core interface version"); 3435 goto err; 3436 } 3437 reds->core = core_interface_adapter; 3438 reds->core.public_interface = core_interface; 3439 reds->agent_dev = red_char_device_vdi_port_new(reds); 3440 reds_update_agent_properties(reds); 3441 reds->clients = NULL; 3442 reds->main_dispatcher = main_dispatcher_new(reds, &reds->core); 3443 reds->channels = NULL; 3444 reds->mig_target_clients = NULL; 3445 reds->char_devices = NULL; 3446 reds->mig_wait_disconnect_clients = NULL; 3447 reds->vm_running = TRUE; /* for backward compatibility */ 3448 3449 if (!(reds->mig_timer = reds->core.timer_add(&reds->core, migrate_timeout, reds))) { 3450 spice_error("migration timer create failed"); 3451 } 3452 3453 if (reds_init_net(reds) < 0) { 3454 goto err; 3455 } 3456 if (reds->secure_listen_socket != -1) { 3457 if (reds_init_ssl(reds) < 0) { 3458 goto err; 3459 } 3460 } 3461 #if HAVE_SASL 3462 int saslerr; 3463 if ((saslerr = sasl_server_init(NULL, reds->config->sasl_appname ? 3464 reds->config->sasl_appname : "spice")) != SASL_OK) { 3465 spice_error("Failed to initialize SASL auth %s", 3466 sasl_errstring(saslerr, NULL, NULL)); 3467 goto err; 3468 } 3469 #endif 3470 3471 reds->main_channel = main_channel_new(reds); 3472 reds->inputs_channel = inputs_channel_new(reds); 3473 3474 reds->mouse_mode = SPICE_MOUSE_MODE_SERVER; 3475 3476 spice_buffer_free(&reds->client_monitors_config); 3477 3478 reds->allow_multiple_clients = getenv(SPICE_DEBUG_ALLOW_MC_ENV) != NULL; 3479 if (reds->allow_multiple_clients) { 3480 spice_warning("spice: allowing multiple client connections"); 3481 } 3482 pthread_mutex_lock(&global_reds_lock); 3483 servers = g_list_prepend(servers, reds); 3484 pthread_mutex_unlock(&global_reds_lock); 3485 return 0; 3486 3487 err: 3488 return -1; 3489 } 3490 (gdb) run Starting program: /home/benutzer/spice/try2/spice-0.14.0/server/tests/test-leaks [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". /server/server leaks: Breakpoint 7, ssl_security_default_callback (s=0x0, ctx=0x5555556c2df0, op=393232, bits=80, nid=0, other=0x5555556c44f0, ex=0x0) at ../ssl/ssl_cert.c:915 915 if (ctx) (gdb) next 916 level = SSL_CTX_get_security_level(ctx); (gdb) 920 if (level <= 0) { (gdb) 929 if (level > 5) (gdb) 931 minbits = minbits_table[level - 1]; (gdb) 932 switch (op) { (gdb) print minbits $8 = 112 (gdb) next 986 if (bits < minbits) (gdb) print bits $9 = 80 (gdb) print level $10 = 2 (gdb) print/x op $12 = 0x60010 (gdb) bt #0 0x00007ffff7357f43 in ssl_security_default_callback (s=0x0, ctx=<optimized out>, op=393232, bits=80, nid=0, other=0x5555556c44f0, ex=0x0) at ../ssl/ssl_cert.c:986 #1 0x00007ffff7359bc6 in ssl_ctx_security (ctx=ctx@entry=0x5555556c2df0, op=<optimized out>, bits=<optimized out>, nid=<optimized out>, other=<optimized out>) at ../ssl/ssl_cert.c:999 #2 0x00007ffff738a0ba in ssl_security_cert_key (s=s@entry=0x0, ctx=ctx@entry=0x5555556c2df0, x=x@entry=0x5555556c44f0, op=op@entry=393232) at ../ssl/t1_lib.c:2400 #3 0x00007ffff738dc75 in ssl_security_cert (s=s@entry=0x0, ctx=ctx@entry=0x5555556c2df0, x=x@entry=0x5555556c44f0, vfy=vfy@entry=0, is_ee=is_ee@entry=1) at ../ssl/t1_lib.c:2426 #4 0x00007ffff73673e6 in SSL_CTX_use_certificate (ctx=0x5555556c2df0, x=0x5555556c44f0) at ../ssl/ssl_rsa.c:308 #5 0x00007ffff7367509 in use_certificate_chain_file (ctx=0x5555556c2df0, ssl=ssl@entry=0x0, file=<optimized out>) at ../ssl/ssl_rsa.c:627 #6 0x00007ffff7367e0a in SSL_CTX_use_certificate_chain_file (ctx=<optimized out>, file=<optimized out>) at ../ssl/ssl_rsa.c:688 #7 0x000055555556e9e6 in reds_init_ssl (reds=0x555555696f70) at reds.c:2856 #8 0x000055555556e9e6 in do_spice_init (core_interface=<optimized out>, reds=0x555555696f70) at reds.c:3457 #9 0x000055555556e9e6 in spice_server_init (reds=0x555555696f70, core=<optimized out>) at reds.c:3694 #10 0x0000555555564d16 in server_leaks () at test-leaks.c:60 #11 0x00007ffff6afee7a in test_case_run (tc=0x555555695e00) at ../../../../glib/gtestutils.c:2318 #12 0x00007ffff6afee7a in g_test_run_suite_internal (suite=suite@entry=0x555555694e40, path=path@entry=0x0) at ../../../../glib/gtestutils.c:2403 #13 0x00007ffff6afed34 in g_test_run_suite_internal (suite=suite@entry=0x555555694e20, path=path@entry=0x0) at ../../../../glib/gtestutils.c:2415 #14 0x00007ffff6aff132 in g_test_run_suite (suite=0x555555694e20) at ../../../../glib/gtestutils.c:2490 #15 0x00007ffff6aff151 in g_test_run () at ../../../../glib/gtestutils.c:1755 #16 0x000055555555fb08 in main (argc=<optimized out>, argv=<optimized out>) at test-leaks.c:153 (gdb) list ssl_cert.c:909,990 909 static int ssl_security_default_callback(const SSL *s, const SSL_CTX *ctx, 910 int op, int bits, int nid, void *other, 911 void *ex) 912 { 913 int level, minbits; 914 static const int minbits_table[5] = { 80, 112, 128, 192, 256 }; 915 if (ctx) 916 level = SSL_CTX_get_security_level(ctx); 917 else 918 level = SSL_get_security_level(s); 919 920 if (level <= 0) { 921 /* 922 * No EDH keys weaker than 1024-bits even at level 0, otherwise, 923 * anything goes. 924 */ 925 if (op == SSL_SECOP_TMP_DH && bits < 80) 926 return 0; 927 return 1; 928 } 929 if (level > 5) 930 level = 5; 931 minbits = minbits_table[level - 1]; 932 switch (op) { 933 case SSL_SECOP_CIPHER_SUPPORTED: 934 case SSL_SECOP_CIPHER_SHARED: 935 case SSL_SECOP_CIPHER_CHECK: 936 { 937 const SSL_CIPHER *c = other; 938 /* No ciphers below security level */ 939 if (bits < minbits) 940 return 0; 941 /* No unauthenticated ciphersuites */ 942 if (c->algorithm_auth & SSL_aNULL) 943 return 0; 944 /* No MD5 mac ciphersuites */ 945 if (c->algorithm_mac & SSL_MD5) 946 return 0; 947 /* SHA1 HMAC is 160 bits of security */ 948 if (minbits > 160 && c->algorithm_mac & SSL_SHA1) 949 return 0; 950 /* Level 2: no RC4 */ 951 if (level >= 2 && c->algorithm_enc == SSL_RC4) 952 return 0; 953 /* Level 3: forward secure ciphersuites only */ 954 if (level >= 3 && (c->min_tls != TLS1_3_VERSION || 955 !(c->algorithm_mkey & (SSL_kEDH | SSL_kEECDH)))) 956 return 0; 957 break; 958 } 959 case SSL_SECOP_VERSION: 960 if (!SSL_IS_DTLS(s)) { 961 /* SSLv3 not allowed at level 2 */ 962 if (nid <= SSL3_VERSION && level >= 2) 963 return 0; 964 /* TLS v1.1 and above only for level 3 */ 965 if (nid <= TLS1_VERSION && level >= 3) 966 return 0; 967 /* TLS v1.2 only for level 4 and above */ 968 if (nid <= TLS1_1_VERSION && level >= 4) 969 return 0; 970 } else { 971 /* DTLS v1.2 only for level 4 and above */ 972 if (DTLS_VERSION_LT(nid, DTLS1_2_VERSION) && level >= 4) 973 return 0; 974 } 975 break; 976 977 case SSL_SECOP_COMPRESSION: 978 if (level >= 2) 979 return 0; 980 break; 981 case SSL_SECOP_TICKET: 982 if (level >= 3) 983 return 0; 984 break; 985 default: 986 if (bits < minbits) 987 return 0; 988 } 989 return 1; 990 } (gdb) #3 0x00007ffff738dc75 in ssl_security_cert (s=s@entry=0x0, ctx=ctx@entry=0x5555556c2df0, x=x@entry=0x5555556c44f0, vfy=vfy@entry=0, is_ee=is_ee@entry=1) at ../ssl/t1_lib.c:2426 2426 if (!ssl_security_cert_key(s, ctx, x, SSL_SECOP_EE_KEY | vfy)) (gdb) list ssl.h:2255 2255 # define SSL_SECOP_OTHER_CERT (6 << 16) (gdb) list ssl.h:2292 2292 # define SSL_SECOP_EE_KEY (16 | SSL_SECOP_OTHER_CERT) benutzer@debian:~$ openssl x509 -in /home/benutzer/spice/try2/spice-0.14.0/server/tests/pki/server-cert.pem -text Certificate: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha256WithRSAEncryption Issuer: C = XX, L = Default City, O = Default Company Ltd Validity Not Before: Mar 23 10:40:45 2017 GMT Not After : Mar 16 10:40:45 2047 GMT Subject: C = XX, L = Default City, O = Default Company Ltd Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (1024 bit) Modulus: 00:c5:c3:3c:c6:4b:b1:ef:02:b8:4c:09:28:c9:2f: 11:d9:81:c0:af:b7:dd:3d:23:38:c9:14:24:fb:7c: 2e:c7:8b:0a:35:e6:60:e8:ab:da:05:ab:b2:73:f9: 7e:0c:69:c3:1f:d7:c5:be:b5:8a:fc:21:02:d0:b6: 98:57:32:df:15:e9:44:d9:03:1e:4d:c5:d9:7a:46: c0:3d:0c:b2:3f:6d:47:d0:d8:89:dc:91:cf:fa:cd: d4:14:6d:87:96:4b:9b:44:ef:8e:6c:16:70:16:fb: a9:62:02:21:54:cb:b2:9e:b3:5e:e3:3f:7a:b0:37: 13:4d:2c:ed:50:0d:06:56:8f Exponent: 65537 (0x10001) Signature Algorithm: sha256WithRSAEncryption d8:e9:b4:d5:06:af:d8:e4:1c:66:32:0f:52:69:6a:4b:36:3d: eb:1c:93:f2:0c:c2:20:ec:90:8a:40:ae:27:74:1d:7a:6e:10: bf:57:3d:47:10:c5:c4:d4:ab:9c:d2:0d:c7:b4:6b:b6:4a:a9: ed:d3:3b:b2:df:a0:52:a7:4a:73:68:ef:6f:7d:35:4d:b4:be: 4a:50:da:2b:53:6b:7b:9b:c1:f1:b3:e0:d5:c2:71:53:05:97: d5:f0:f2:da:28:08:a2:4d:0a:98:cd:4f:ed:2f:0c:8a:c6:bf: aa:6a:1b:45:be:2b:ce:f9:f7:6e:54:e1:7a:ca:85:7b:3f:71: 46:19 -----BEGIN CERTIFICATE----- MIIB8zCCAVwCAQEwDQYJKoZIhvcNAQELBQAwQjELMAkGA1UEBhMCWFgxFTATBgNV BAcMDERlZmF1bHQgQ2l0eTEcMBoGA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDAe Fw0xNzAzMjMxMDQwNDVaFw00NzAzMTYxMDQwNDVaMEIxCzAJBgNVBAYTAlhYMRUw EwYDVQQHDAxEZWZhdWx0IENpdHkxHDAaBgNVBAoME0RlZmF1bHQgQ29tcGFueSBM dGQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMXDPMZLse8CuEwJKMkvEdmB wK+33T0jOMkUJPt8LseLCjXmYOir2gWrsnP5fgxpwx/Xxb61ivwhAtC2mFcy3xXp RNkDHk3F2XpGwD0Msj9tR9DYidyRz/rN1BRth5ZLm0TvjmwWcBb7qWICIVTLsp6z XuM/erA3E00s7VANBlaPAgMBAAEwDQYJKoZIhvcNAQELBQADgYEA2Om01Qav2OQc ZjIPUmlqSzY96xyT8gzCIOyQikCuJ3Qdem4Qv1c9RxDFxNSrnNINx7Rrtkqp7dM7 st+gUqdKc2jvb301TbS+SlDaK1Nre5vB8bPg1cJxUwWX1fDy2igIok0KmM1P7S8M isa/qmobRb4rzvn3blThesqFez9xRhk= -----END CERTIFICATE----- https://cgit.freedesktop.org/spice/spice/commit/server/tests/pki/server-cert.pem?id=7b5e294a363e1500ab1a5b143da1602c9fed0547 Where does this 80 come from ? (gdb) bt #0 0x00007ffff71158b0 in BN_security_bits (L=1024, N=-1) at ../crypto/bn/bn_lib.c:834 #1 0x00007ffff738a080 in ssl_security_cert_key (s=s@entry=0x0, ctx=ctx@entry=0x5555556c2df0, x=x@entry=0x5555556c44f0, op=op@entry=393232) at ../ssl/t1_lib.c:2395 #2 0x00007ffff738dc75 in ssl_security_cert (s=s@entry=0x0, ctx=ctx@entry=0x5555556c2df0, x=x@entry=0x5555556c44f0, vfy=vfy@entry=0, is_ee=is_ee@entry=1) at ../ssl/t1_lib.c:2426 #3 0x00007ffff73673e6 in SSL_CTX_use_certificate (ctx=0x5555556c2df0, x=0x5555556c44f0) at ../ssl/ssl_rsa.c:308 #4 0x00007ffff7367509 in use_certificate_chain_file (ctx=0x5555556c2df0, ssl=ssl@entry=0x0, file=<optimized out>) at ../ssl/ssl_rsa.c:627 #5 0x00007ffff7367e0a in SSL_CTX_use_certificate_chain_file (ctx=<optimized out>, file=<optimized out>) at ../ssl/ssl_rsa.c:688 #6 0x000055555556e9e6 in reds_init_ssl (reds=0x555555696f70) at reds.c:2856 #7 0x000055555556e9e6 in do_spice_init (core_interface=<optimized out>, reds=0x555555696f70) at reds.c:3457 #8 0x000055555556e9e6 in spice_server_init (reds=0x555555696f70, core=<optimized out>) at reds.c:3694 #9 0x0000555555564d16 in server_leaks () at test-leaks.c:60 #10 0x00007ffff6afee7a in test_case_run (tc=0x555555695e00) at ../../../../glib/gtestutils.c:2318 #11 0x00007ffff6afee7a in g_test_run_suite_internal (suite=suite@entry=0x555555694e40, path=path@entry=0x0) at ../../../../glib/gtestutils.c:2403 #12 0x00007ffff6afed34 in g_test_run_suite_internal (suite=suite@entry=0x555555694e20, path=path@entry=0x0) at ../../../../glib/gtestutils.c:2415 #13 0x00007ffff6aff132 in g_test_run_suite (suite=0x555555694e20) at ../../../../glib/gtestutils.c:2490 #14 0x00007ffff6aff151 in g_test_run () at ../../../../glib/gtestutils.c:1755 #15 0x000055555555fb08 in main (argc=<optimized out>, argv=<optimized out>) at test-leaks.c:153 (gdb) list bn_lib.c:831,900 831 int BN_security_bits(int L, int N) 832 { 833 int secbits, bits; 834 if (L >= 15360) 835 secbits = 256; 836 else if (L >= 7680) 837 secbits = 192; 838 else if (L >= 3072) 839 secbits = 128; 840 else if (L >= 2048) 841 secbits = 112; 842 else if (L >= 1024) 843 secbits = 80; 844 else 845 return 0; 846 if (N == -1) 847 return secbits; 848 bits = N / 2; 849 if (bits < 80) 850 return 0; 851 return bits >= secbits ? secbits : bits; 852 } (gdb) print L $25 = 1024 (gdb) print N $26 = -1 (gdb) print secbits $27 = 80 Back to buster openssh: wget http://ftp.de.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0h-4_amd64.deb wget http://ftp.de.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0h-4_amd64.deb wget http://ftp.de.debian.org/debian/pool/main/o/openssl/openssl_1.1.0h-4_amd64.deb wget http://debug.mirrors.debian.org/debian-debug/pool/main/o/openssl/libssl1.1-dbgsym_1.1.0h-4_amd64.deb dpkg -i *1.1.0h-4*.deb cd spice cp -a orig try3 cd try3/spice-0.14.0/ dpkg-buildpackage --> Test does not fail directory /home/benutzer/spice/try3/spice-0.14.0/server directory /home/benutzer/libssl1.1-buster/orig/openssl-1.1.0h/ssl (gdb) 1003 level = SSL_CTX_get_security_level(ctx); (gdb) 1007 if (level <= 0) { (gdb) print level $2 = 1 --> 1.1.0h-4 returns level == 1, 1.1.1-1 returns level == 2 1.1.0h-4: ssl/ssl_lib.c:4023 (gdb) list SSL_CTX_get_security_level 4021 int SSL_CTX_get_security_level(const SSL_CTX *ctx) 4022 { 4023 return ctx->cert->sec_level; 4024 } --> With 1.1.0h-4 sec_level gets initialized with 1 (gdb) bt #0 0x00007ffff717e24b in SSL_CTX_new (meth=0x7ffff73b2680 <TLS_method_data.21235>) at ../ssl/ssl_lib.c:2568 #1 0x000055555556e9b3 in reds_init_ssl (reds=0x555555696f70) at reds.c:2843 #2 0x000055555556e9b3 in do_spice_init (core_interface=<optimized out>, reds=0x555555696f70) at reds.c:3457 #3 0x000055555556e9b3 in spice_server_init (reds=0x555555696f70, core=<optimized out>) at reds.c:3694 #4 0x0000555555564d16 in server_leaks () at test-leaks.c:60 #5 0x00007ffff677ae7a in test_case_run (tc=0x555555695e00) at ../../../../glib/gtestutils.c:2318 #6 0x00007ffff677ae7a in g_test_run_suite_internal (suite=suite@entry=0x555555694e40, path=path@entry=0x0) at ../../../../glib/gtestutils.c:2403 #7 0x00007ffff677ad34 in g_test_run_suite_internal (suite=suite@entry=0x555555694e20, path=path@entry=0x0) at ../../../../glib/gtestutils.c:2415 #8 0x00007ffff677b132 in g_test_run_suite (suite=0x555555694e20) at ../../../../glib/gtestutils.c:2490 #9 0x00007ffff677b151 in g_test_run () at ../../../../glib/gtestutils.c:1755 #10 0x000055555555fb08 in main (argc=<optimized out>, argv=<optimized out>) at test-leaks.c:153 (gdb) 2565 if ((ret->cert = ssl_cert_new()) == NULL) (gdb) 2568 ret->sessions = lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp); (gdb) print ret->cert->sec_level $19 = 1 --> Where do we get the level 2 with 1.1.1-1 ? apt install -f apt dist-upgrade cd spice cp -a orig try4 cd try4/spice-0.14.0/ dpkg-buildpackage cd server/tests/ gdb -q --args ./test-leaks set height 0 set width 0 set pagination off directory /home/benutzer/spice/try4/spice-0.14.0/server directory /home/benutzer/libssl1.1/orig/openssl-1.1.1/ssl b SSL_CTX_new run benutzer@debian:~/spice/try4/spice-0.14.0/server/tests$ gdb -q --args ./test-leaks Reading symbols from ./test-leaks...done. (gdb) set height 0 (gdb) set width 0 (gdb) set pagination off (gdb) directory /home/benutzer/spice/try4/spice-0.14.0/server Source directories searched: /home/benutzer/spice/try4/spice-0.14.0/server:$cdir:$cwd (gdb) directory /home/benutzer/libssl1.1/orig/openssl-1.1.1/ssl Source directories searched: /home/benutzer/libssl1.1/orig/openssl-1.1.1/ssl:/home/benutzer/spice/try4/spice-0.14.0/server:$cdir:$cwd (gdb) b SSL_CTX_new Breakpoint 1 at 0xadc0 (gdb) run Starting program: /home/benutzer/spice/try4/spice-0.14.0/server/tests/test-leaks [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". /server/server leaks: Breakpoint 1, SSL_CTX_new (meth=0x7ffff73b2d40 <TLS_method_data.23193>) at ../ssl/ssl_lib.c:2878 2878 if (meth == NULL) { (gdb) bt #0 0x00007ffff7361820 in SSL_CTX_new (meth=0x7ffff73b2d40 <TLS_method_data.23193>) at ../ssl/ssl_lib.c:2878 #1 0x000055555556e9b3 in reds_init_ssl (reds=0x555555696f70) at reds.c:2843 #2 0x000055555556e9b3 in do_spice_init (core_interface=<optimized out>, reds=0x555555696f70) at reds.c:3457 #3 0x000055555556e9b3 in spice_server_init (reds=0x555555696f70, core=<optimized out>) at reds.c:3694 #4 0x0000555555564d16 in server_leaks () at test-leaks.c:60 #5 0x00007ffff6afee7a in test_case_run (tc=0x555555695e00) at ../../../../glib/gtestutils.c:2318 #6 0x00007ffff6afee7a in g_test_run_suite_internal (suite=suite@entry=0x555555694e40, path=path@entry=0x0) at ../../../../glib/gtestutils.c:2403 #7 0x00007ffff6afed34 in g_test_run_suite_internal (suite=suite@entry=0x555555694e20, path=path@entry=0x0) at ../../../../glib/gtestutils.c:2415 #8 0x00007ffff6aff132 in g_test_run_suite (suite=0x555555694e20) at ../../../../glib/gtestutils.c:2490 #9 0x00007ffff6aff151 in g_test_run () at ../../../../glib/gtestutils.c:1755 #10 0x000055555555fb08 in main (argc=<optimized out>, argv=<optimized out>) at test-leaks.c:153 (gdb) next 2883 if (!OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS, NULL)) (gdb) 2886 if (SSL_get_ex_data_X509_STORE_CTX_idx() < 0) { (gdb) 2890 ret = OPENSSL_zalloc(sizeof(*ret)); (gdb) 2891 if (ret == NULL) (gdb) 2894 ret->method = meth; (gdb) 2897 ret->mode = SSL_MODE_AUTO_RETRY; (gdb) next 2898 ret->session_cache_mode = SSL_SESS_CACHE_SERVER; (gdb) 2899 ret->session_cache_size = SSL_SESSION_CACHE_MAX_SIZE_DEFAULT; (gdb) 2901 ret->session_timeout = meth->get_timeout(); (gdb) 2902 ret->references = 1; (gdb) 2903 ret->lock = CRYPTO_THREAD_lock_new(); (gdb) 2904 if (ret->lock == NULL) { (gdb) 2909 ret->max_cert_list = SSL_MAX_CERT_LIST_DEFAULT; (gdb) 2910 ret->verify_mode = SSL_VERIFY_NONE; (gdb) 2911 if ((ret->cert = ssl_cert_new()) == NULL) (gdb) 2914 ret->sessions = lh_SSL_SESSION_new(ssl_session_hash, ssl_session_cmp); (gdb) print ret->cert->sec_level $1 = 1 (gdb) print &(ret->cert->sec_level) $2 = (int *) 0x555555696a00 (gdb) watch *0x555555696a00 Hardware watchpoint 2: *0x555555696a00 (gdb) cont Continuing. Hardware watchpoint 2: *0x555555696a00 Old value = 1 New value = 2 ssl_cipher_process_rulestr (rule_str=rule_str@entry=0x5555556bc867 "@SECLEVEL=2", head_p=head_p@entry=0x7fffffffe0c8, tail_p=tail_p@entry=0x7fffffffe0d0, ca_list=ca_list@entry=0x5555556c3a30, c=<optimized out>) at ../ssl/ssl_ciph.c:1193 1193 if (ok == 0) (gdb) bt #0 0x00007ffff735a9b5 in ssl_cipher_process_rulestr (rule_str=rule_str@entry=0x5555556bc867 "@SECLEVEL=2", head_p=head_p@entry=0x7fffffffe0c8, tail_p=tail_p@entry=0x7fffffffe0d0, ca_list=ca_list@entry=0x5555556c3a30, c=<optimized out>) at ../ssl/ssl_ciph.c:1193 #1 0x00007ffff735b94d in ssl_create_cipher_list (ssl_method=<optimized out>, tls13_ciphersuites=0x5555556c3210, cipher_list=0x5555556c2df8, cipher_list_by_id=0x5555556c2e00, rule_str=<optimized out>, rule_str@entry=0x5555556bc860 "DEFAULT@SECLEVEL=2", c=0x555555696800) at ../ssl/ssl_ciph.c:1579 #2 0x00007ffff73610b2 in SSL_CTX_set_cipher_list (ctx=<optimized out>, str=str@entry=0x5555556bc860 "DEFAULT@SECLEVEL=2") at ../ssl/ssl_lib.c:2511 #3 0x00007ffff735cf0f in cmd_CipherString (cctx=0x5555556c3970, value=0x5555556bc860 "DEFAULT@SECLEVEL=2") at ../ssl/ssl_conf.c:262 #4 0x00007ffff735d37f in SSL_CONF_cmd (cctx=cctx@entry=0x5555556c3970, cmd=<optimized out>, value=0x5555556bc860 "DEFAULT@SECLEVEL=2") at ../ssl/ssl_conf.c:812 #5 0x00007ffff7366072 in ssl_do_config (s=s@entry=0x0, ctx=ctx@entry=0x5555556c2df0, name=<optimized out>, name@entry=0x0, system=system@entry=1) at ../ssl/ssl_mcnf.c:69 #6 0x00007ffff73661b1 in ssl_ctx_system_config (ctx=ctx@entry=0x5555556c2df0) at ../ssl/ssl_mcnf.c:98 #7 0x00007ffff7361ad5 in SSL_CTX_new (meth=0x7ffff73b2d40 <TLS_method_data.23193>) at ../ssl/ssl_lib.c:3050 #8 0x000055555556e9b3 in reds_init_ssl (reds=0x555555696f70) at reds.c:2843 #9 0x000055555556e9b3 in do_spice_init (core_interface=<optimized out>, reds=0x555555696f70) at reds.c:3457 #10 0x000055555556e9b3 in spice_server_init (reds=0x555555696f70, core=<optimized out>) at reds.c:3694 #11 0x0000555555564d16 in server_leaks () at test-leaks.c:60 #12 0x00007ffff6afee7a in test_case_run (tc=0x555555695e00) at ../../../../glib/gtestutils.c:2318 #13 0x00007ffff6afee7a in g_test_run_suite_internal (suite=suite@entry=0x555555694e40, path=path@entry=0x0) at ../../../../glib/gtestutils.c:2403 #14 0x00007ffff6afed34 in g_test_run_suite_internal (suite=suite@entry=0x555555694e20, path=path@entry=0x0) at ../../../../glib/gtestutils.c:2415 #15 0x00007ffff6aff132 in g_test_run_suite (suite=0x555555694e20) at ../../../../glib/gtestutils.c:2490 #16 0x00007ffff6aff151 in g_test_run () at ../../../../glib/gtestutils.c:1755 #17 0x000055555555fb08 in main (argc=<optimized out>, argv=<optimized out>) at test-leaks.c:153 (gdb) print rule_str $7 = 0x5555556bc867 "@SECLEVEL=2" (gdb) list ssl_ciph.c:955,1200 955 static int ssl_cipher_process_rulestr(const char *rule_str, 956 CIPHER_ORDER **head_p, 957 CIPHER_ORDER **tail_p, 958 const SSL_CIPHER **ca_list, CERT *c) 959 { 960 uint32_t alg_mkey, alg_auth, alg_enc, alg_mac, algo_strength; 961 int min_tls; 962 const char *l, *buf; 963 int j, multi, found, rule, retval, ok, buflen; 964 uint32_t cipher_id = 0; 965 char ch; 966 967 retval = 1; 968 l = rule_str; 969 for ( ; ; ) { 970 ch = *l; 971 972 if (ch == '\0') 973 break; /* done */ 974 if (ch == '-') { 975 rule = CIPHER_DEL; 976 l++; 977 } else if (ch == '+') { 978 rule = CIPHER_ORD; 979 l++; 980 } else if (ch == '!') { 981 rule = CIPHER_KILL; 982 l++; 983 } else if (ch == '@') { 984 rule = CIPHER_SPECIAL; 985 l++; 986 } else { 987 rule = CIPHER_ADD; 988 } 989 990 if (ITEM_SEP(ch)) { 991 l++; 992 continue; 993 } 994 995 alg_mkey = 0; 996 alg_auth = 0; 997 alg_enc = 0; 998 alg_mac = 0; 999 min_tls = 0; 1000 algo_strength = 0; 1001 1002 for (;;) { 1003 ch = *l; 1004 buf = l; 1005 buflen = 0; 1006 #ifndef CHARSET_EBCDIC 1007 while (((ch >= 'A') && (ch <= 'Z')) || 1008 ((ch >= '0') && (ch <= '9')) || 1009 ((ch >= 'a') && (ch <= 'z')) || 1010 (ch == '-') || (ch == '.') || (ch == '=')) 1011 #else 1012 while (isalnum((unsigned char)ch) || (ch == '-') || (ch == '.') 1013 || (ch == '=')) 1014 #endif 1015 { 1016 ch = *(++l); 1017 buflen++; 1018 } 1019 1020 if (buflen == 0) { 1021 /* 1022 * We hit something we cannot deal with, 1023 * it is no command or separator nor 1024 * alphanumeric, so we call this an error. 1025 */ 1026 SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR, SSL_R_INVALID_COMMAND); 1027 retval = found = 0; 1028 l++; 1029 break; 1030 } 1031 1032 if (rule == CIPHER_SPECIAL) { 1033 found = 0; /* unused -- avoid compiler warning */ 1034 break; /* special treatment */ 1035 } 1036 1037 /* check for multi-part specification */ 1038 if (ch == '+') { 1039 multi = 1; 1040 l++; 1041 } else { 1042 multi = 0; 1043 } 1044 1045 /* 1046 * Now search for the cipher alias in the ca_list. Be careful 1047 * with the strncmp, because the "buflen" limitation 1048 * will make the rule "ADH:SOME" and the cipher 1049 * "ADH-MY-CIPHER" look like a match for buflen=3. 1050 * So additionally check whether the cipher name found 1051 * has the correct length. We can save a strlen() call: 1052 * just checking for the '\0' at the right place is 1053 * sufficient, we have to strncmp() anyway. (We cannot 1054 * use strcmp(), because buf is not '\0' terminated.) 1055 */ 1056 j = found = 0; 1057 cipher_id = 0; 1058 while (ca_list[j]) { 1059 if (strncmp(buf, ca_list[j]->name, buflen) == 0 1060 && (ca_list[j]->name[buflen] == '\0')) { 1061 found = 1; 1062 break; 1063 } else 1064 j++; 1065 } 1066 1067 if (!found) 1068 break; /* ignore this entry */ 1069 1070 if (ca_list[j]->algorithm_mkey) { 1071 if (alg_mkey) { 1072 alg_mkey &= ca_list[j]->algorithm_mkey; 1073 if (!alg_mkey) { 1074 found = 0; 1075 break; 1076 } 1077 } else { 1078 alg_mkey = ca_list[j]->algorithm_mkey; 1079 } 1080 } 1081 1082 if (ca_list[j]->algorithm_auth) { 1083 if (alg_auth) { 1084 alg_auth &= ca_list[j]->algorithm_auth; 1085 if (!alg_auth) { 1086 found = 0; 1087 break; 1088 } 1089 } else { 1090 alg_auth = ca_list[j]->algorithm_auth; 1091 } 1092 } 1093 1094 if (ca_list[j]->algorithm_enc) { 1095 if (alg_enc) { 1096 alg_enc &= ca_list[j]->algorithm_enc; 1097 if (!alg_enc) { 1098 found = 0; 1099 break; 1100 } 1101 } else { 1102 alg_enc = ca_list[j]->algorithm_enc; 1103 } 1104 } 1105 1106 if (ca_list[j]->algorithm_mac) { 1107 if (alg_mac) { 1108 alg_mac &= ca_list[j]->algorithm_mac; 1109 if (!alg_mac) { 1110 found = 0; 1111 break; 1112 } 1113 } else { 1114 alg_mac = ca_list[j]->algorithm_mac; 1115 } 1116 } 1117 1118 if (ca_list[j]->algo_strength & SSL_STRONG_MASK) { 1119 if (algo_strength & SSL_STRONG_MASK) { 1120 algo_strength &= 1121 (ca_list[j]->algo_strength & SSL_STRONG_MASK) | 1122 ~SSL_STRONG_MASK; 1123 if (!(algo_strength & SSL_STRONG_MASK)) { 1124 found = 0; 1125 break; 1126 } 1127 } else { 1128 algo_strength = ca_list[j]->algo_strength & SSL_STRONG_MASK; 1129 } 1130 } 1131 1132 if (ca_list[j]->algo_strength & SSL_DEFAULT_MASK) { 1133 if (algo_strength & SSL_DEFAULT_MASK) { 1134 algo_strength &= 1135 (ca_list[j]->algo_strength & SSL_DEFAULT_MASK) | 1136 ~SSL_DEFAULT_MASK; 1137 if (!(algo_strength & SSL_DEFAULT_MASK)) { 1138 found = 0; 1139 break; 1140 } 1141 } else { 1142 algo_strength |= 1143 ca_list[j]->algo_strength & SSL_DEFAULT_MASK; 1144 } 1145 } 1146 1147 if (ca_list[j]->valid) { 1148 /* 1149 * explicit ciphersuite found; its protocol version does not 1150 * become part of the search pattern! 1151 */ 1152 1153 cipher_id = ca_list[j]->id; 1154 } else { 1155 /* 1156 * not an explicit ciphersuite; only in this case, the 1157 * protocol version is considered part of the search pattern 1158 */ 1159 1160 if (ca_list[j]->min_tls) { 1161 if (min_tls != 0 && min_tls != ca_list[j]->min_tls) { 1162 found = 0; 1163 break; 1164 } else { 1165 min_tls = ca_list[j]->min_tls; 1166 } 1167 } 1168 } 1169 1170 if (!multi) 1171 break; 1172 } 1173 1174 /* 1175 * Ok, we have the rule, now apply it 1176 */ 1177 if (rule == CIPHER_SPECIAL) { /* special command */ 1178 ok = 0; 1179 if ((buflen == 8) && strncmp(buf, "STRENGTH", 8) == 0) { 1180 ok = ssl_cipher_strength_sort(head_p, tail_p); 1181 } else if (buflen == 10 && strncmp(buf, "SECLEVEL=", 9) == 0) { 1182 int level = buf[9] - '0'; 1183 if (level < 0 || level > 5) { 1184 SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR, 1185 SSL_R_INVALID_COMMAND); 1186 } else { 1187 c->sec_level = level; 1188 ok = 1; 1189 } 1190 } else { 1191 SSLerr(SSL_F_SSL_CIPHER_PROCESS_RULESTR, SSL_R_INVALID_COMMAND); 1192 } 1193 if (ok == 0) 1194 retval = 0; 1195 /* 1196 * We do not support any "multi" options 1197 * together with "@", so throw away the 1198 * rest of the command, if any left, until 1199 * end or ':' is found. 1200 */ (gdb) print *cmds $12 = {cmd = 0x5555556bc800 "MinProtocol", arg = 0x5555556bc820 "TLSv1.2"} root@debian:/etc# grep MinProtocol . -R ./ssl/openssl.cnf:MinProtocol = TLSv1.2 root@debian:/etc# grep SECLEVEL /etc/ssl/openssl.cnf CipherString = DEFAULT@SECLEVEL=2 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=907015 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=907518 https://wiki.debian.org/ContinuousIntegration/TriagingTips/openssl-1.1.1