|
1 | 1 |
|
2 | | -Binaries |
3 | | -======== |
| 2 | +# Binaries |
4 | 3 |
|
5 | | -All the precompiled binaries provided here have extended support for |
6 | | -everything which is normally not in OpenSSL or LibreSSL -- 40+56 Bit, |
7 | | -export/ANON ciphers, weak DH ciphers, weak EC curves, SSLv2 etc. -- all the dirty |
8 | | -features needed for testing. OTOH they also come with extended support |
9 | | -for some new / advanced cipher suites and/or features which are not in the |
10 | | -official branch like (old version of the) CHACHA20+POLY1305 and CAMELLIA 256 bit ciphers. |
| 4 | +The precompiled binaries provided in this directory have extended support for weak crypto which is normally not in OpenSSL |
| 5 | +or LibreSSL: 40+56 Bit, export/ANON ciphers, weak DH ciphers, weak EC curves, SSLv2 etc. -- all the dirty features needed for |
| 6 | +testing if you just want to test with binaries. They also come with extended support for a few advanced cipher suites and/or |
| 7 | +features which are not in the official branch like (old version of the) CHACHA20+POLY1305 and CAMELLIA 256 bit ciphers. |
11 | 8 |
|
12 | | -The (stripped) binaries this directory are all compiled from my openssl snapshot |
13 | | -(https://github.com/testssl/openssl-1.0.2.bad) which adds a few bits to Peter |
14 | | -Mosman's openssl fork (https://github.com/PeterMosmans/openssl). Thx a bunch, Peter! |
15 | | -The few bits are IPv6 support (except IPV6 proxy) and some STARTTLS backports. |
| 9 | +# Security notices |
16 | 10 |
|
17 | | -Compiled Linux and FreeBSD binaries so far come from Dirk, other |
18 | | -contributors see ../CREDITS.md . |
| 11 | +The important thing upfront: **DO NOT USE THESE BINARIES FOR PRODUCTION PURPOSES**, at least not on the server side. A lot of security restrictions have been removed because we want to test how bad the servers are. |
19 | 12 |
|
20 | | -The binaries here have the naming scheme ``openssl.$(uname).$(uname -m)`` |
21 | | -and will be picked up from testssl.sh if you run testssl.sh directly |
22 | | -off the git directory. Otherwise you need ``testssl.sh`` to point to it |
23 | | -via the argument (``--openssl=<here>``) or as an environment variable |
24 | | -(``OPENSSL=<here> testssl.sh <yourargs>``). |
25 | 13 |
|
26 | | -The Linux binaries with the trailing ``-krb5`` come with Kerberos 5 support, |
27 | | -they won't be picked up automatically as you need to make sure first they |
28 | | -run (see libraries below). |
| 14 | +# General |
29 | 15 |
|
30 | | -Because I didn't want blow up the repo and waste disk spaces for others |
31 | | -there are more binaries for other aerchitectures (ARM7l, Darwin.i386, .. |
32 | | -here: https://testssl.sh/openssl-1.0.2k-chacha.pm.ipv6.Linux+FreeBSD.tar.gz |
33 | | -and older ones here: https://testssl.sh/openssl-1.0.2i-chacha.pm.ipv6.contributed/ . |
| 16 | +The (stripped) binaries this directory are all compiled from the [old OpenSSL snapshot](https://github.com/testssl/openssl-1.0.2.bad) which adds a few bits to [Peter |
| 17 | +Mosman's openssl fork](https://github.com/PeterMosmans/openssl). The few bits are IPv6 support (except IPV6 proxy) and some STARTTLS backports. More, see the [README.md](https://github.com/testssl/openssl-1.0.2.bad/README.md). Also, as of now, a few CVEs were fixed. |
34 | 18 |
|
35 | | -As there is not darwin64-arm64-cc in the old branch there is not binary for |
36 | | -that architecture either. (FYI: patch isn't big but isn't easy to backport). |
| 19 | +Compiled Linux and FreeBSD binaries so far came from Dirk, other contributors see ../CREDITS.md . A few binaries were removed in the latest edition, which are Kerberos binaries and 32 Bit binaries. Those and binaries for more architectures can be retrieved from [contributed builds @ https://testssl.sh/](https://testssl.sh/contributed_binaries/). Those binaries are *not* stripped. |
37 | 20 |
|
38 | 21 |
|
39 | | -In general the usage of this binaries became more and more of a limited |
40 | | -value: It doesn't support e.g. TLS 1.3 and newer TLS 1.2 ciphers. OTOH servers |
41 | | -which only offer SSLv2 and SSLv3 became less common and we use for the |
42 | | -majority of checks in testssl.sh sockets and not this binary. |
| 22 | +## Compilation instructions |
43 | 23 |
|
44 | 24 |
|
45 | | -Compiling and Usage Instructions |
46 | | -================================ |
| 25 | +See [https://github.com/testssl/openssl-1.0.2.bad/00-testssl-stuff/Readme.md](https://github.com/testssl/openssl-1.0.2.bad/00-testssl-stuff/Readme.md) |
47 | 26 |
|
48 | | -General |
49 | | -------- |
50 | 27 |
|
51 | | -Both 64+32 bit Linux binaries were compiled under Ubuntu 12.04 LTS(!). Likely you |
52 | | -cannot use them for older distributions, younger worked in all my test environments |
53 | | -(like Debian 11 and OpenSuse Tumbleweed on Q3/2022). |
54 | 28 |
|
55 | | -I provide two sets of binaries: |
| 29 | +## Conderations regarding binaries |
56 | 30 |
|
57 | | -* completely statically linked binaries |
58 | | -* dynamically linked binaries, additionally with MIT Kerberos support ("krb5" in the name). |
59 | | - They provide also KRB5-* and EXP-KRB5-* support (in OpenSSL terminology, see krb5-ciphers.txt). |
| 31 | +testssl.sh has emerged a longer while back, so in general these binaries are not needed anymore as weak crypto is covered by bash sockets if the binary from the vendor can't handle weak crypto. In a future release they might be be retired, as they do not provide a overall benefit. Also static linking with glibc doesn't work as flawlessly these days anymore as it used to be, |
60 | 32 |
|
61 | | -For the latter you need a whopping bunch of kerberos runtime libraries which you maybe need to |
62 | | -install from your distributor (libgssapi_krb5, libkrb5, libcom_err, libk5crypto, libkrb5support, |
63 | | -libkeyutils). Despite the fact it's 2022 the openssl kerberos binary still works when compiled |
64 | | -non-statically on a legacy VM. I didn't bother use static kerberos libs as they need to be |
65 | | -compiled from source. |
| 33 | +### Speed |
66 | 34 |
|
| 35 | +Checks using binaries instead of bash sockets run a bit faster. However when using a default run, this is within the error margin and also depends on what the server is offering for ciphers and protocols. Of course also local issues play a role because of issues like file system caching. Here is a quick comparison for defaults run started from one ok-ish/beefy Linux 8 core system to one server IP each: |
67 | 36 |
|
68 | | -Compilation instructions |
69 | | ------------------------- |
| 37 | +----- |
70 | 38 |
|
71 | | -If you want to compile OpenSSL yourself, here are the instructions: |
| 39 | +public server | remark | runtimes supplied openssl [s] | runtimes /usr/bin/openssl [s] | |
| 40 | +------------------|----------------------|-------------------------------| ------------------------------| |
| 41 | +testssl.sh | TLS 1.0 - 1.3 | 104, 77, 88, 97 | 106, 100, 95, 98 |
| 42 | +testssl.net | no RSA ciph.,TLS>=1.2| 79, 76, 85, 80 | 73, 66, (107), 72 |
| 43 | +heise.de | no TLS 1.0 | 102, 95, 104 | 98, 95, 99 |
| 44 | +owasp.org | TLS >= 1.2 | 85, 96, 105 | 88, 97, 98 |
| 45 | +vulnerable old system | SSLv3 - TLS 1.2 | 100, 104, 103 | 134, 138, 141 |
72 | 46 |
|
73 | | -1.) |
74 | | - git git clone https://github.com/testssl/openssl-1.0.2-bad |
75 | | - cd openssl |
| 47 | +As you can see which binary you pick does not matter much. To start with: The standard deviation even for a single target can be much bigger -- only the last system is internal and not in the internet. And comparing different targets with respect to their runtime depends also what the server is offering in terms of ciphers, vulnerabilities etc. . |
76 | 48 |
|
| 49 | +----- |
77 | 50 |
|
78 | | -2.) configure the damned thing. Options I used (see https://github.com/testssl/testssl.sh/blob/master/utils/make-openssl.sh) |
| 51 | +### Capabilities |
79 | 52 |
|
80 | | -**for 64Bit including Kerberos ciphers:** |
| 53 | +For modern servers the usage of the binaries provided by our project might come also with a limited value: They don't support e.g. TLS 1.3 and lack newer TLS 1.2 ciphers. They do support SSLv2 through TLS 1.2 though but servers with deprecated or vulnerable protocols protocols became less common. |
81 | 54 |
|
82 | | - ./config --prefix=/usr/ --openssldir=/etc/ssl enable-zlib enable-ssl2 enable-rc5 enable-rc2 \ |
83 | | - enable-GOST enable-cms enable-md2 enable-mdc2 enable-ec enable-ec2m enable-ecdh enable-ecdsa \ |
84 | | - enable-seed enable-camellia enable-idea enable-rfc3779 enable-ec_nistp_64_gcc_128 \ |
85 | | - --with-krb5-flavor=MIT experimental-jpake -DOPENSSL_USE_BUILD_DATE |
| 55 | +One other thing worth to mention is that any binary can handle protocols on top of SSL/TLS better (or at all) once encrypted connection is established, like retrieving the HTTP header. OTOH as of 2024/2025 distributors/vendors however still support weaker crypto with TLS 1.0 or TLS 1.1, most of them even support SSLv3. That is possible with some tweaks which testssl.sh applies. So using older binaries like the ones in this directory are very often not needed. |
86 | 56 |
|
87 | | -**for 64Bit, static binaries:** |
88 | 57 |
|
89 | | - ./config --prefix=/usr/ --openssldir=/etc/ssl enable-zlib enable-ssl2 enable-rc5 enable-rc2 \ |
90 | | - enable-GOST enable-cms enable-md2 enable-mdc2 enable-ec enable-ec2m enable-ecdh enable-ecdsa \ |
91 | | - enable-seed enable-camellia enable-idea enable-rfc3779 enable-ec_nistp_64_gcc_128 \ |
92 | | - -static experimental-jpake -DOPENSSL_USE_BUILD_DATE |
93 | | - |
94 | | -**for 32 Bit including Kerberos ciphers:** |
95 | | - |
96 | | - ./config --prefix=/usr/ --openssldir=/etc/ssl enable-zlib enable-ssl2 enable-rc5 enable-rc2 \ |
97 | | - enable-GOST enable-cms enable-md2 enable-mdc2 enable-ec enable-ec2m enable-ecdh enable-ecdsa \ |
98 | | - enable-seed enable-camellia enable-idea enable-rfc3779 no-ec_nistp_64_gcc_128 \ |
99 | | - --with-krb5-flavor=MIT experimental-jpake -DOPENSSL_USE_BUILD_DATE |
100 | | - |
101 | | - **for 32 Bit, static binaries:** |
102 | | - |
103 | | - ./config --prefix=/usr/ --openssldir=/etc/ssl enable-zlib enable-ssl2 enable-rc5 enable-rc2 \ |
104 | | - enable-GOST enable-cms enable-md2 enable-mdc2 enable-ec enable-ec2m enable-ecdh enable-ecdsa \ |
105 | | - enable-seed enable-camellia enable-idea enable-rfc3779 no-ec_nistp_64_gcc_128 \ |
106 | | - -static experimental-jpake -DOPENSSL_USE_BUILD_DATE |
107 | | - |
108 | | -Four GOST [1][2] ciphers come via engine support automagically with this setup. Two additional GOST |
109 | | -ciphers can be compiled in (``GOST-GOST94``, ``GOST-MD5``) with ``-DTEMP_GOST_TLS`` but as of now they make |
110 | | -problems under some circumstances, so unless you desperately need those ciphers I would stay away from |
111 | | -``-DTEMP_GOST_TLS``. |
112 | | - |
113 | | -If you don't have / don't want Kerberos libraries and devel rpms/debs, just omit "--with-krb5-flavor=MIT" |
114 | | -(see examples). If you have another Kerberos flavor you would need to figure out by yourself. |
115 | | - |
116 | | -3.) make depend |
117 | | - |
118 | | -4.) make |
119 | | - |
120 | | -5.) make report (check whether it runs ok!) |
121 | | - |
122 | | -6.) ``./apps/openssl ciphers -V 'ALL:COMPLEMENTOFALL' | wc -l`` lists for me |
123 | | -* 193(+4 GOST) ciphers including kerberos |
124 | | -* 179(+4 GOST) ciphers without kerberos |
125 | | - |
126 | | -as opposed to ~162 from Ubuntu or Opensuse. Note that newer distributions provide |
127 | | -newer ciphers which this old openssl-1.0.2-bad doesn't have. OTOH openssl-1.0.2-bad |
128 | | -has a lot of legacy ciphers and protocols enabled which newer binaries don't have. |
129 | | - |
130 | | -**Never use these binaries for anything other than testing!** |
131 | | - |
132 | | -Enjoy, Dirk |
133 | | - |
134 | | -[1] https://en.wikipedia.org/wiki/GOST_%29block_cipher%29 |
135 | | - |
136 | | -[2] http://fossies.org/linux/openssl/engines/ccgost/README.gost |
0 commit comments