1
0
mirror of https://github.com/drwetter/testssl.sh.git synced 2025-05-23 16:46:04 +02:00

Merge pull request from testssl/new_Handshakes

Update handshakes
This commit is contained in:
Dirk Wetter 2025-04-17 16:13:31 +02:00 committed by GitHub
commit 128d8b5997
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 579 additions and 88 deletions

@ -172,7 +172,7 @@
minEcdsaBits+=(-1)
curves+=("prime256v1:secp384r1")
requiresSha2+=(false)
current+=(true)
current+=(false)
names+=("Android 7.0 (native)")
short+=("android_70")
@ -262,8 +262,8 @@
requiresSha2+=(false)
current+=(true)
names+=("Android 11 (native)")
short+=("android_11")
names+=("Android 11/12 (native)")
short+=("android_11_12")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
@ -273,37 +273,41 @@
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
alpn+=("http/1.1")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("X25519:secp256r1:secp384r1")
curves+=("x25519:secp256r1:secp384r1")
requiresSha2+=(false)
ja3+=("9b02ebd3a43b62d825e1ac605b621dc8")
ja4+=("t13d1713h1_5b57614c22b0_eca864cca44a")
current+=(true)
names+=("Android 12 (native)")
short+=("android_12")
names+=("Android 13/14 (native)")
short+=("android_13_14")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("1603010200010001fc0303ef9015ea56c63737ffffc0accb09384a436f080a39f77fe113356ae5bfd1254a20163dc9147addf7e7fdb45852fbfe8e3fb2b79ec6f725bfda838d429eba22e6670022130113021303c02bc02ccca9c02fc030cca8c009c00ac013c014009c009d002f00350100019100000010000e00000b662d64726f69642e6f726700170000ff01000100000a00080006001d00170018000b00020100002300000010000b000908687474702f312e31000500050100000000000d00140012040308040401050308050501080606010201003300260024001d0020f209906d70ae4ba88ac3c89810eb7092be23e377f98d8c96696dec9296358c3e002d00020101002b0009080304030303020301001500ed000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
handshakebytes+=("16030102330100022f0303564593a940b5d751d4cee7d4cd3ffbb68c310109b98a4a17e3ed6486d73dcee3202e82d4bbe870f4ad23988eee22f7b5c5036460e511edc31544211275bd9527960022130113021303c02bc02ccca9c02fc030cca8c009c00ac013c014009c009d002f0035010001c4000000180016000013706c61792e676f6f676c65617069732e636f6d00170000ff01000100000a00080006001d00170018000b00020100002300000010000b000908687474702f312e31000500050100000000000d00140012040308040401050308050501080606010201003300260024001d00205551dfbfb939959b7aa673d638cd80e0ee8d202623f1a78f87741ff7bfa0c619002d00020101002b000504030403030029011c00f700f1025680712b38fc90496ec3b53ffa0ae9e00eafdaa742879902bc71a8956410ca53915661cbc5c3e60649f278b1268a6a3dfcd9be7269ae0eda3974dbad73f6368d430867a8e1d540aad8c0b9024adabb10adc58864062a0984fc03d62ad39b25d176f8500e93232446663fa256733f9b08efbce336afd2eaa090d8e20f7e53ec0a4135a83bdff4383cd1db1905377e9a5d81f41e045e6fd97d316b05f954102e6bcd3b110b0b2c2ccd1891d90057e9fe6795f4430942437ce9cad68c7a7d77c1a49eb29d33d7700c7274a552f1015dff3569a1492d746e59b372a1ecdbae650eba8771b931c648414d133f7e0e0633376d1b715cca002120dc30aa42c9d3367cce7f2bafd591d04b95e6b11081345ebd56d47b65bf89266c")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
tlsvers+=("-tls1_3 -tls1_2")
lowest_protocol+=("0x0303")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
alpn+=("http/1.1")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("X25519:secp256r1:secp384r1")
curves+=("x25519:secp256r1:secp384r1")
requiresSha2+=(false)
ja3+=("c67e9dc27d283f1f89b4ebb4b4670c21")
ja4+=("t13d1713h1_5b57614c22b0_352634941f3a")
current+=(true)
names+=("Chrome 27 Win 7")
@ -917,7 +921,7 @@
minEcdsaBits+=(-1)
curves+=("X25519:secp256r1:secp384r1")
requiresSha2+=(false)
current+=(true)
current+=(false)
names+=("Chrome 101 (Win 10)")
short+=("chrome_101_win10")
@ -941,6 +945,30 @@
requiresSha2+=(true)
current+=(true)
names+=("Chromium 137 (Win 11)")
short+=("chromium_137_win11")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030106b3010006af0303fbd2b110b1afbc69dac9202344caa14f56eb72252a02904c00395c3ada1716be20439b0a947c628db23f13d697fe4323f9a4929bf182cbc4c880fdc5f5315cc8080020eaea130113021303c02bc02fc02cc030cca9cca8c013c014009c009d002f0035010006464a4a000000230000fe0d00ba00000100012a002065b7614cfd41b624c0a9c508c7ba54ac2541edaa61b95dafb2259fcd96e87e1900909bd89d48d1da0991e630b47a90e6c64180c4b36628222dc07c6cb9c4ca7eb1ea231a7e59c6368d80cff26f76110099168eafa707e84a114cf659e73a8a024ac66ce1c7e7e590ee44ca26fb87d0c09014849cdbe0c3f6d6bad2a75fd2b8e688b9dce354df417166448d102089d991dcfcdcb7dbce6db4abfb410106fc45f1da80e26e6ca52617591858cf284281ec5545003304ef04ed9a9a00010011ec04c0874c762bd4a556587b5197c6439a914b176da4db56f67518ffe9285fd229aa9454b4b85dac193106f7494827c40a1b026a270f8f100876080a05114ae316861166c0790b7ed420546e7531ea281ae1eba8398b0850764995431045647c65b138247884f132a9ecf881c75b17186a15da2bbadf342ef87353cde900fa781f4e8c7924782a604769dae2810eba77b1a7a9433a9b22b937ad22490a14b169c999f2c3ccaa8029d0317e98c01edd6a740231aa9310a6d521330dd8a5f9473a5e7763416bc7d24c5d1d4a04436c352bba1ae83537abec638e04c9b71300d938180793060685462d4a0cc9e89be4ba29e17049f796c9db1130911908b8e213713857620401cda66f7274b97c61c61bb73cecd76d6af66630069c0e13be273b7d105ca594529fb8890bad0898c276591d3472f17cbd80a50bc20421a80c94b12357144205a7e577de0276514182554202e786a4d5c62bfd2c62a771805fe43cb40236d99078df6371071b1f36e10440c7b59e06172539326498c6a6f81887417b6c0c75fbf02b5a166e6b05bdc332c0e0265a21a76253c26a6af899949bce34c814b9ca39637810624b122a8a9afb2959e0ecb7d8f5b48924c0d9a1386ec910fdd01688e94103566717ac7784c0bcc31b199f1a4be5ea6b1e9760ecc16b55c0b9f498495272a8da99bb1e15c0e6b078d9c1163fca068ec7589279b22b293c76f40a40c52842c583e36173944b6bcd66a8fe30afe7c9453b393ac61848bd32cdfde28ec9469bca049f207c66b2dc5c001b134bfb565f45b7d3b3770762633f2b6113a90bcebc1edd29726d332b34b173ba672ab6fa0a2533ce7f43432a08bd1bab07e4d557d60c4cf2867f552ca4dadc93cd66950a5810dfb40123d2a0cf07c18d895a2158c751154d3f80855d112e39551ceabb42ed41c9e710a2b3f400bd5c386c703564b627817112f4ec6ab5024cf4ebcd6d3917df87c1d617377e5a1408f73bf0abb13ce64dd4c5a306f42660042d8694afc9371b4fe66170534bfde0362f591d21470e8514952a65525b9c48ba4438f024a9bd6a19319c80f90c2a53f42823132f8692869f7b4f28718eec265a51b7afd5c0c300c57930f694e451620ab6a09785357ab13c351289a54c426ee2a852c29ec9882ebeb985151b6bef462418501c00c76cc856a370f29e9cc5359a9a81fcd20553c4bfda10679f87c25662a158e08d07a2882c402bf4977822c8cd9094a926885a03c04911e0c5dbe16371aba9cdfb73343c7f1ef03a97864a29a2662868ae81b3cf772536a0783f0b5c9f145c0e2b1ab66c2b9eb006bc627b6496593722b02ddc648fbf0614f2808718e26b2d23575952ba3cdc335e1a68796281886604d5541acb02431665c7b9d156f52c6f902888cc5a156023c7fe017124a99f9b990085a343b0fa1d47817bff727b6ca09be31bbb86b726ef9a8119a34dadc83837330b63d955af60069062a34056751780a2f8f22dc72937743678dec3bdc9723121da056777ac1ddb472d93cb1b62a1bef7415f91598ac1146d00ba200b3edee7a21a78444c967d7d5b8af35645212a01eff213a7d51270d22059882abae856bb5c2383d5b1b55418f20978a0cb1140629848476bf18fa5c3a489b10aa6761be00fb58aa893e76983749ed10a2e6691389dac7bb12d5d2c51d549e868bf30d33b231a95651396e34a2167bf60c58e65ed5d001d002045abd03dc3f1716a957587e038b5114380a12b78c2b95967be7b326c12c32520002d00020101000500050100000000000d00120010040308040401050308050501080606010000000f000d00000a7465737473736c2e73680010000e000c02683208687474702f312e31002b000706dada03040303001700000012000044cd00050003026832000b00020100001b0003020002000a000c000a9a9a11ec001d00170018ff010001008a8a000100")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2")
lowest_protocol+=("0x0303")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("HTTP")
minDhBits+=(1024)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("X25519MLKEM768:x25519:secp256r1:secp384r1")
requiresSha2+=(true)
ja3+=("5d36bde6b6ce424c1972667ad9a6a732")
ja4+=("t13d1516h2_8daaf6152771_d8a2da3f94cd")
current+=(true)
names+=("Firefox 10.0.12 ESR Win 7")
short+=("firefox_10012_esr_win7")
ch_ciphers+=("ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-DSS-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:ECDH-RSA-AES256-SHA:ECDH-ECDSA-AES256-SHA:CAMELLIA256-SHA:AES256-SHA:ECDHE-ECDSA-RC4-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-DSS-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:ECDH-RSA-RC4-SHA:ECDH-RSA-AES128-SHA:ECDH-ECDSA-RC4-SHA:ECDH-ECDSA-AES128-SHA:SEED-SHA:CAMELLIA128-SHA:RC4-SHA:RC4-MD5:AES128-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:ECDH-ECDSA-DES-CBC3-SHA:DES-CBC3-SHA")
@ -1570,7 +1598,7 @@
minEcdsaBits+=(-1)
curves+=("X25519:secp256r1:secp384r1:secp521r1:ffdhe2048:ffdhe3072")
requiresSha2+=(false)
current+=(true)
current+=(false)
names+=("Firefox 71 (Win 10)")
short+=("firefox_71_win10")
@ -1616,6 +1644,30 @@
requiresSha2+=(false)
current+=(true)
names+=("Firefox 137 (Win 11)")
short+=("firefox_137_win11")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030107620100075e0303a0b1ef8be287453f90ada3213b0b3fe24ab4724790b494fc370480cd7a924bec20faab9a25078ed312a24ff2134e59987ac478ea31c17509053c40c08d0799e4d00022130113031302c02bc02fcca9cca8c02cc030c00ac009c013c014009c009d002f0035010006f30000000f000d00000a7465737473736c2e736800170000ff01000100000a0010000e11ec001d00170018001901000101000b00020100002300000010000e000c02683208687474702f312e310005000501000000000022000a00080403050306030203001200000033052f052d11ec04c000534636761d96a91bff883cd3997146e37c10a2cbec183b1545046351711c2c14cb9bcee0b6c65fd18ac9139d375a94d7b69a92728dbfacbcc25b8fdf814d9bf1bce16bbaf8410bdce6b28d2b3ba2e58bd181c655db9d3adc763f88300ba4c9129b5798fc539eab8e41b2008919632a42bd51523593c41ef984801a972d2616a3db7a0cf4ba3248cc5ee88c26c30272d0d23e9bf4603916198938bd1fc69c7c4a9d26b7a57692932128b4c044612c958772c0bda2f897ae10661c9cacbfd99af871a84b79007b9bbc443439e7896ede49087c83564894b0a5f261d51bba447cabae5bb3c1781d36930233acc56f9bb2d23a7721d5b345a8a242a09ac1f64a20e863308a0cad7cb0eb9b0bc5bcb83cf4b0b71bae37a2919e25bd9f8a762454bb6fb5b477ba1f3eaa1a3f54010d61c5089b38a12bc65ffa37dd4aca76320221b60ff9cc466e3613b54c16bd94375f8bb8242b4fb648cebea0371271164f3858ea9029968234d421694a89519724c849e663970b22ea9708050879255195f07790f2f17c58d0972d175fad14718c25abfdf4b21911cfdbfb1677a78bf0da5b01675d16a06af896b4f61784df2bbe8d3799ba420ee83750c11a100053c8585a5ae83c815c2bc8f06627068316ef3b98c814468902534075370ab299d6c74a62ea5eef1a98192c1759bb43405ca4ea3cb2141a1c39029b088a72bbbb064b468192545df2f57d29dab260a74cfdd88ec7d2c916056814902dd6a326b92aa8fc046eb059aff0148078c0734fcc7474499db857a146fb4dace5bb75fa5deb4b1aed2386c48651b27971f6486e67d5113dd02e239a3d6c62bbd528745c4552a33814b6c59a04f997e0383edcf75f008a77ecc47e0e0883743a51d491c2cde26ded288d2c3c822d2a471fe24740c93bb8d320508b85bcf05c889b156877afba5117739a292ca047089cb7e20b3a9c8a0eaae61333d3c3c2f33d14a97f27e484a298c6ab71509fe39e0471162414cd07a8a439910e53460be373b650850ff33545739a0a4c470ea36288c6d21d0d3a7f88bc1ec278a1aeba97ec105f5bb4bee319cf115b94c161bde71cab324819d439982313194770842697a22fcaa7d6e16543d46ae178c2e7eb5e166a98ad213a92a67723aa8ad9328f8c32aefa4a319e355f051b511c079bce768a778067f92586c4786c4793b943c4821d8579ca919079829f3ffc30fcbcbff871bdd337826d6269e32063330891b2c6911da30f2e0b907027458b8589cd2526de20c894b6cca17a4c53704c661b6d5d153635bc47b8b0bbab47589690593f8206ec3c3f7d8cc1c119ba5963c6f0613151d5b8902b523979cbfe227cf8e45c0fa073007c78804883e3c23401b0ba5fd1b53d975aef94655dc1a06fbc714ab0c7a0f518dd117567376ce7e23ebd2a0126cb1e7d9a7f895aa60e65a16b651d468318eaec49b91bc046b99275f264c493037c9332fb261449f0320ad7698cd70866618ef2187ed42371123b0af8b0011e5844e09934efc5418f60aa31f39b91039f367b59514003c3f70fd3f813e8dbbe31ab0093863ab1a506138353915bacd626b42ed464334165d1c2aee1a2c6440b7a99e73b6e398ca02c623c999d7b7e9656b0af80a5a7a8195995542c8a33e3c896e02cd17946d139cbfa474ae2d0c88d43d8e8904566d7b22f1abd484976e9b92d69a023c108e0f4ade46e9078001d0020d0c88d43d8e8904566d7b22f1abd484976e9b92d69a023c108e0f4ade46e90780017004104c2def31a670b4a9655e66fe6f40faeca73f1087b0acb1595f15367f29536d7fec61d01d24f8dba47f7325b2a314ea96e3d7b27570213f8acfe8b246ab2c9d305002b00050403040303000d0018001604030503060308040805080604010501060102030201002d00020101001c00024001001b000706000100020003fe0d011900000100032b00209f461dcd898b13a5ae9cb6eda16db517723a0bd452637e628dd9f42684525a2e00efe1e6f2feae67133161ac996bcfb5f06cd1d1635099eecb70fbc50a9ba740551de7afa0c1d222d5b4073bc3e76079c9c33d87fef700870929d979dd2bf44e3c89e14aaac43f46d1e985d1be13ee29fd76820334c5d169d9dc50b49ad24919af9735baa27816394bed94a0f1640e8d6cf67268b58215fd2fcfda67c7203527903f6ed32b576cd5f4bb5d947b3b2aeb6e9eaa588f68c2c728b8f410c0cb67a5565478b28d3fce6f485bb80b2748b1f85166ecc9729f4f03e9c1cdd80f4ec2342b088d45161d8334a5dd4f57aa4fd3cc3b48c361b318147cc5b1270c172788d3674a854acb3a37fdd532d6a014d33acd68")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2")
lowest_protocol+=("0x0303")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("HTTP")
minDhBits+=(1023)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("X25519MLKEM768:x25519:secp256r1:secp384r1:secp521r1:ffdhe2048:ffdhe3072")
requiresSha2+=(false)
ja3+=("6f7889b9fb1a62a9577e685c1fcfa919")
ja4+=("t13d1717h2_5b57614c22b0_3cbfd9057e0d")
current+=(true)
names+=("IE 6 XP")
short+=("ie_6_xp")
ch_ciphers+=("RC4-MD5:RC4-SHA:DES-CBC3-SHA:RC4-MD5:DES-CBC3-MD5:RC2-CBC-MD5:DES-CBC-SHA:DES-CBC-MD5:EXP1024-RC4-SHA:EXP1024-DES-CBC-SHA:EXP-RC4-MD5:EXP-RC2-CBC-MD5:EXP-RC4-MD5:EXP-RC2-CBC-MD5:EDH-DSS-DES-CBC3-SHA:EDH-DSS-DES-CBC-SHA:EXP1024-DHE-DSS-DES-CBC-SHA")
@ -1635,7 +1687,7 @@
minEcdsaBits+=(-1)
curves+=("")
requiresSha2+=(false)
current+=(true)
current+=(false)
names+=("IE 7 Vista")
short+=("ie_7_vista")
@ -1719,7 +1771,7 @@
minEcdsaBits+=(-1)
curves+=("")
requiresSha2+=(false)
current+=(true)
current+=(false)
names+=("IE 9 Win 7")
short+=("ie_9_win7")
@ -2017,6 +2069,30 @@
requiresSha2+=(true)
current+=(true)
names+=("Edge 133 Win 11 23H2")
short+=("edge_133_win11_23h2")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030106d3010006cf0303a91b95c93b73955817dc10234ee30211ee47acba8e85d399ab36d39b76c7914d208e40fc084d95a77ffbcbac3a267e9e81d4ed2d6f4d14edc40f74781f648c41db00201a1a130113021303c02bc02fc02cc030cca9cca8c013c014009c009d002f0035010006663a3a00000012000000170000fe0d00da0000010001cb002012e6b30da36331d943fd044f7dc4c7fc9300f9d80d0d820ff89e5b0d1e260f4100b02ac49e517c37e5517a346ecdb73165a9c9d1e58d872168375b6addc9db40a2ba9a04191485fc3aed2323d71a5f4c4e15a818333166c3879ca54671f47b5d6bdf83bd8ce1931ea18d6e3d02b362f32b8f547a1d40f362c830893237e475dca57651d7aaaacd373251f91bd4e3e3d4e80e6e4f035dfb7eb9fa090e3d3616cbce2efe6d1005a0797043a2bdb86f6e193e0a756ae5d3aa962ab432195924b3005c51949b69777e8f7129bdcbc62fb122bdfc000500050100000000000a000c000a1a1a11ec001d00170018ff01000100002b0007067a7a03040303001b0003020002000b00020100446900050003026832003304ef04ed1a1a00010011ec04c0042c6dea9c7423c62ce0a529d8a69193341908775c19ac770843455151b792a39926ca9265794bb357689c435b7b4607d65174632c31c6aa40e3baade8fabe28fac8fccbba27277bfc389356d65e7823b3c305c3c50364f9e52786c60c12cccc2d6b9f736a74e3d93e9b925b2974808426b0bcd40a04a406f5c260c4d301fff9322e80a07ec768cd7b0bbe46488a902f533c1138447688b65e558481da18448d064f0eacc054e008380558b388af69ec25d7787071e6b3f197b483028c2be4b4d937044df36b837a6bbb97292fd9b70ba76e906ba123166ac40c00d6d78b0dcc60adf1caa918773af536a56936e703b011709b92716cb828406baa0231254e00ca81c0e9c565c373e21b6ed20019ff1249bcb9442a778e76fa434a24b28439263d6bad60fa7dc5747b65728d2e83c1edf94e910a4fcabcb70fb7b024d354daf127ec733b74427b0ca3448208205c7389094a495225308874a84dd92ff635b077329a3b734ce95566565a5480159f24333a55803d3d889c6796682df509ec22c44716387dfb8615066ccc49af994790f81431a563c06d8848272255cc4b91a7c237821c829d73b33a7c7867461206a6951f535481db2c73d1a986058cce44bd09db775e15ac95ba50603a25a2f6ab68829373aa21f46cbbd436a8e8d2c197e72d5a8810800a20ab88b83e1917f808a8cdbacc00c071db76cff6744f8ca407cbba57372a9d47f641a0d9a4ec8c295cf26289bbcc2b95574ae7769108a849a2494915a2252217f301693a257443387ff2ea9c80162cc3f3b159c3a1ab9804b3e7120d677a009cb8faf4870705a125890025815cfa305cbdeb33e547c08717ac3b601e8b625ba9a10a6ec08ee582b41e4412b5d452a33838a940892742c2330a291b999c27e5ac577079ece3cf02c8747d00659be25b344954cf8527bc16aabb904b848c71a6ec259f28cb10134f4c150eace0252f095e11acaccd0194b0e90f67d4a25e35cc0fba14f9d852c2913fa0117e8ce7334b4a0ae28c397ef662eea6c437ab3ddb8034e8135ad2002910927f647a787635267560284d40c48a359da33b35b1c883bdabb5609c5d6a18871e7a511ac80cc918b532fa2728819e8c6a86c3f522fda45e8b4a4b82dcc8cf248050b0cfcfc63228170df27c2a0a82a56d7cca25845b89d58759f615dbd573ddeb7ac4d3c76980ac995c7268d8c28357bb2e688abac551dc2246daa06559cb57fc53a20a00afdce949f65b378226a5998700ceb5a105918936795e00cd3a9a467e74eca608d682f1466d6396b9fe231963e721ac52768583145f8b84c0ab55ea906cdd307ada340ca4182d28007d9d98c793228dc91b9d20816227a8a33f3825aff603a65cc1f48c09e622a98b50c15719c0bcd5629bf678a97b2aabf3ae429c5a7526c6de810adde5777e715e820774d44b539e778f4156015418316df7647d0818d971c5d1351e40973e1754b690684934e94eb447385a5aa85c6081e9f210a466b9fd794f0a7248c691571ce42d9cb492837bbc831a7765d073f6203f83cac7ac6703aae678d15b8283c94365b22e0515b52c6ace887abd32320d1bf45f99ab5cacd124627925ff58869257904223bedc43846d9df9fb6954968bb8ddb29f94cf440e85f7c9d75d000d89b24a5664d64c461899864ffd3e27d7d4f6a468ff41f61c86bb8eedf1b90c963e186c7590ca89933b001d0020e35783261e99e6eb69d783c21f9e6c14f9d5976162986c365921daf17f5b1d39002d000201010010000e000c02683208687474702f312e3100230000000d00120010040308040401050308050501080606010000000f000d00000a7465737473736c2e7368aaaa000100")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2")
lowest_protocol+=("0x0303")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("HTTP")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(16384)
minEcdsaBits+=(-1)
curves+=("X25519MLKEM768:x25519:secp256r1:secp384r1")
requiresSha2+=(true)
ja3+=("f8e65281e2992dcf1d057bc9aaf430e4")
ja4+=("t13d1516h2_8daaf6152771_02713d6af862")
current+=(true)
names+=("Opera 12.15 Win 7")
short+=("opera_1215_win7")
ch_ciphers+=("DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DH-RSA-AES256-SHA256:DH-DSS-AES256-SHA256:AES256-SHA256:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:DH-RSA-AES256-SHA:DH-DSS-AES256-SHA:AES256-SHA:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DH-RSA-AES128-SHA256:DH-DSS-AES128-SHA256:AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:DH-RSA-AES128-SHA:DH-DSS-AES128-SHA:AES128-SHA:RC4-SHA:RC4-MD5:EDH-DSS-DES-CBC3-SHA:DH-DSS-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:DH-RSA-DES-CBC3-SHA:DES-CBC3-SHA")
@ -2419,6 +2495,29 @@ names+=("Opera 66 (Win 10)")
requiresSha2+=(false)
current+=(false)
names+=("Safari 18.4 (iOS 18.4)")
short+=("safari_184_ios_184")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA:AES128-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
handshakebytes+=("1603010200010001fc0303eeadd8d7a16a2094961be3378d634db290ca80a727bbd1b6e9ba8738ff3fad4c20fc75d8ca4ca06f8ff1b6346ea1e212ae68dfd0aef24f7debde69478e64649b2a002a3a3a130113021303c02cc02bcca9c030c02fcca8c00ac009c014c013009d009c0035002fc008c012000a010001891a1a00000000000f000d00000a7465737473736c2e736800170000ff01000100000a000c000a6a6a001d001700180019000b000201000010000e000c02683208687474702f312e31000500050100000000000d001600140403080404010503080508050501080606010201001200000033002b00296a6a000100001d0020fd184de04a7fe5cdfd7317a41c36031805a53c2f45eb8f14634c10efae08db32002d00020101002b000b0ababa0304030303020301001b0003020001fafa000100001500c6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("HTTP")
curves+=("x25519:secp256r1:secp384r1:secp521r1")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
requiresSha2+=(false)
ja3+=("773906b0efdefa24a7f2b8eb6985bf37")
ja4+=("t13d2014h2_a09f3c656075_e42f34c56612")
current+=(true)
names+=("Safari 10 OS X 10.12")
short+=("safari_10_osx1012")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA")
@ -2459,7 +2558,7 @@ names+=("Opera 66 (Win 10)")
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
requiresSha2+=(false)
current+=(true)
current+=(false)
names+=("Safari 12.1 (macOS 10.13.6)")
short+=("safari_121_osx_10136")
@ -2503,7 +2602,7 @@ names+=("Opera 66 (Win 10)")
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
requiresSha2+=(false)
current+=(true)
current+=(false)
names+=("Safari 15.4 (macOS 12.3.1)")
short+=("safari_154_osx_1231")
@ -2527,6 +2626,30 @@ names+=("Opera 66 (Win 10)")
requiresSha2+=(false)
current+=(true)
names+=("Safari 18.4 (macOS 15.4)")
short+=("safari_184_osx_154")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA:AES128-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("1603010200010001fc03030886edd4c7a1345a2b57e1347f15efb7f45836169c7a3e9e87cb6c367b7b34f120b6c43e3e84fa7512a421ee16950e3761d8450ff386426a720b38c3d8574a5ebe002aeaea130113021303c02cc02bcca9c030c02fcca8c00ac009c014c013009d009c0035002fc008c012000a01000189caca00000000000f000d00000a7465737473736c2e736800170000ff01000100000a000c000a6a6a001d001700180019000b000201000010000e000c02683208687474702f312e31000500050100000000000d001600140403080404010503080508050501080606010201001200000033002b00296a6a000100001d00206e8b7b1b4414a23dfd02fa6aa6ad54e97838fb1b9a787335d1c5b58e637d9d7d002d00020101002b000b0afafa0304030303020301001b00030200017a7a000100001500c6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("HTTP")
curves+=("x25519:secp256r1:secp384r1:secp521r1")
minDhBits+=(1024)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
requiresSha2+=(false)
ja3+=("773906b0efdefa24a7f2b8eb6985bf37")
ja4+=("t13d2014h2_a09f3c656075_e42f34c56612")
current+=(true)
names+=("Apple ATS 9 iOS 9")
short+=("apple_ats_9_ios9")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA")
@ -2611,16 +2734,16 @@ names+=("Opera 66 (Win 10)")
requiresSha2+=(false)
current+=(true)
names+=("Java 8b132")
short+=("java_8b132")
ch_ciphers+=("ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA:ECDH-ECDSA-AES128-SHA:ECDH-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:ECDHE-ECDSA-RC4-SHA:ECDHE-RSA-RC4-SHA:RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA:ECDH-ECDSA-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:RC4-MD5")
names+=("Java 8u31")
short+=("java_8u31")
ch_ciphers+=("ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA:ECDH-ECDSA-AES128-SHA:ECDH-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA:ECDH-ECDSA-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:ECDHE-ECDSA-RC4-SHA:ECDHE-RSA-RC4-SHA:RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:RC4-MD5")
ciphersuites+=("")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030300e7010000e303035319a4a6c3909b598b7f5c0923999b7fa67cf6e79f73a016ea39a221c6989eeb000046c023c027003cc025c02900670040c009c013002fc004c00e00330032c007c0110005c002c00cc02bc02f009cc02dc031009e00a2c008c012000ac003c00d00160013000400ff01000074000a0034003200170001000300130015000600070009000a0018000b000c0019000d000e000f001000110002001200040005001400080016000b00020100000d001a001806030601050305010403040103030301020302010202010100000014001200000f7777772e73736c6c6162732e636f6d")
protos+=("-no_ssl2")
handshakebytes+=("16030300e7010000e3030354c21168512b37f2a7410028c16673626ff931146918c7b29f78150b7339e5af000046c023c027003cc025c02900670040c009c013002fc004c00e00330032c02bc02f009cc02dc031009e00a2c008c012000ac003c00d00160013c007c0110005c002c00c000400ff01000074000a0034003200170001000300130015000600070009000a0018000b000c0019000d000e000f001000110002001200040005001400080016000b00020100000d001a001806030601050305010403040103030301020302010202010100000014001200000f6465762e73736c6c6162732e636f6d")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0300")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0303")
service+=("ANY")
minDhBits+=(-1)
@ -2653,6 +2776,50 @@ names+=("Opera 66 (Win 10)")
requiresSha2+=(false)
current+=(false)
names+=("Java 8b132")
short+=("java_8b132")
ch_ciphers+=("ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA:ECDH-ECDSA-AES128-SHA:ECDH-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:ECDHE-ECDSA-RC4-SHA:ECDHE-RSA-RC4-SHA:RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA:ECDH-ECDSA-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:RC4-MD5")
ciphersuites+=("")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030300e7010000e303035319a4a6c3909b598b7f5c0923999b7fa67cf6e79f73a016ea39a221c6989eeb000046c023c027003cc025c02900670040c009c013002fc004c00e00330032c007c0110005c002c00cc02bc02f009cc02dc031009e00a2c008c012000ac003c00d00160013000400ff01000074000a0034003200170001000300130015000600070009000a0018000b000c0019000d000e000f001000110002001200040005001400080016000b00020100000d001a001806030601050305010403040103030301020302010202010100000014001200000f7777772e73736c6c6162732e636f6d")
protos+=("-no_ssl2")
tlsvers+=("-tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0300")
highest_protocol+=("0x0303")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(2048)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("prime256v1:sect163k1:sect163r2:prime192v1:secp224r1:sect233k1:sect233r1:sect283k1:sect283r1:secp384r1:sect409k1:sect409r1:secp521r1:sect571k1:sect571r1:secp160k1:secp160r1:secp160r2:sect163r1:secp192k1:sect193r1:sect193r2:secp224k1:sect239k1:secp256k1")
requiresSha2+=(false)
current+=(false)
names+=("Java 8u442 (OpenJDK)")
short+=("java_80442")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA")
ciphersuites+=("TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030301a6010001a2030374d4c01ca363612e1b39dc3c31378291205ad678e0b05546c2e99cefbc1039482001be25d1468ebbe036e971467705df1181608bb965d7651d2eef4539e510c557003e130213011303c02cc02bcca9c030cca8c02f009fccaa009ec024c028c023c027006b0067c00ac014c009c01300390033009d009c003d003c0035002f00ff0100011b0000000f000d00000a7465737473736c2e7368000500050100000000000a00160014001d001700180019001e01000101010201030104000b00020100001100090007020004000000000017000000230000000d00220020040305030603080708080804080508060809080a080b04010501060103030301002b00050403040303002d00020101003200220020040305030603080708080804080508060809080a080b040105010601030303010033006b0069001d0020c0398cbcaacf48f9d7b2fa72d763e6b553ed2b5cd62bbc6d5ca776e7a3e75f7b001700410405dc76951174b4136b565f531bfb748c7cd13b4e8254f4db86b2e936dbc604831d63b0cbad1ff9cda6fe7ff6295d24c6996d4f01431dc66c23ebf9ce58e7e2fe")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2")
lowest_protocol+=("0x0303")
highest_protocol+=("0x0304")
service+=("ANY")
minDhBits+=(1024)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(224)
curves+=("x25519:secp256r1:secp384r1:secp521r1:x448:ffdhe2048:ffdhe3072:ffdhe4096:ffdhe6144:ffdhe8192")
requiresSha2+=(true)
ja3+=("60f3e2285bc991c380f822c6ac51f947")
ja4+=("t13d311200_e8f1e7e78f70_6077d120928a")
current+=(true)
names+=("Java 8u161")
short+=("java_8u161")
ch_ciphers+=("ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:AES256-SHA256:ECDH-ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:AES256-SHA:ECDH-ECDSA-AES256-SHA:ECDH-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA:ECDH-ECDSA-AES128-SHA:ECDH-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA:ECDH-ECDSA-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA")
@ -2672,27 +2839,6 @@ names+=("Opera 66 (Win 10)")
minEcdsaBits+=(-1)
curves+=("prime256v1:secp384r1:secp521r1:sect283k1:sect283r1:sect409k1:sect409r1:sect571k1:sect571r1:secp256k1")
requiresSha2+=(false)
current+=(true)
names+=("Java 8u31")
short+=("java_8u31")
ch_ciphers+=("ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA:ECDH-ECDSA-AES128-SHA:ECDH-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA:ECDH-ECDSA-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:ECDHE-ECDSA-RC4-SHA:ECDHE-RSA-RC4-SHA:RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:RC4-MD5")
ciphersuites+=("")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030300e7010000e3030354c21168512b37f2a7410028c16673626ff931146918c7b29f78150b7339e5af000046c023c027003cc025c02900670040c009c013002fc004c00e00330032c02bc02f009cc02dc031009e00a2c008c012000ac003c00d00160013c007c0110005c002c00c000400ff01000074000a0034003200170001000300130015000600070009000a0018000b000c0019000d000e000f001000110002001200040005001400080016000b00020100000d001a001806030601050305010403040103030301020302010202010100000014001200000f6465762e73736c6c6162732e636f6d")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0303")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(2048)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("prime256v1:sect163k1:sect163r2:prime192v1:secp224r1:sect233k1:sect233r1:sect283k1:sect283r1:secp384r1:sect409k1:sect409r1:secp521r1:sect571k1:sect571r1:secp160k1:secp160r1:secp160r2:sect163r1:secp192k1:sect193r1:sect193r2:secp224k1:sect239k1:secp256k1")
requiresSha2+=(false)
current+=(false)
names+=("Java 9.0.4")
@ -2717,7 +2863,7 @@ names+=("Opera 66 (Win 10)")
current+=(false)
names+=("Java 11.0.2 (OpenJDK)")
short+=("java1102")
short+=("java_1102")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:AES256-SHA256:ECDH-ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:AES256-SHA:ECDH-ECDSA-AES256-SHA:ECDH-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA:ECDH-ECDSA-AES128-SHA:ECDH-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384")
ch_sni+=("$SNI")
@ -2738,7 +2884,7 @@ names+=("Opera 66 (Win 10)")
current+=(true)
names+=("Java 12.0.1 (OpenJDK)")
short+=("java1201")
short+=("java_1201")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:DHE-DSS-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:AES256-SHA256:ECDH-ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:AES256-SHA:ECDH-ECDSA-AES256-SHA:ECDH-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA:ECDH-ECDSA-AES128-SHA:ECDH-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
@ -2759,7 +2905,7 @@ names+=("Opera 66 (Win 10)")
current+=(false)
names+=("Java 17.0.3 (OpenJDK)")
short+=("java1703")
short+=("java_1703")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA")
ciphersuites+=("TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
@ -2779,6 +2925,29 @@ names+=("Opera 66 (Win 10)")
requireseha2+=(true)
current+=(true)
names+=("Java 21.0.6 (OpenJDK)")
short+=("java_2106")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA")
ciphersuites+=("TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030301a6010001a203038da0a88f4801f5447e2f601f23f7740cd5651b8b28b1864aa45c02771a3fc65820e3d4299d4881b830a38a270692ae60dec3ff669d9532c63fe78aa879f0bf79c0003e130213011303c02cc02bcca9c030cca8c02f009fccaa009ec024c028c023c027006b0067c00ac014c009c01300390033009d009c003d003c0035002f00ff0100011b0000000f000d00000a7465737473736c2e7368000500050100000000000a00160014001d001700180019001e01000101010201030104000b00020100001100090007020004000000000017000000230000000d00220020040305030603080708080804080508060809080a080b04010501060103030301002b00050403040303002d00020101003200220020040305030603080708080804080508060809080a080b040105010601030303010033006b0069001d00206e5b5bd473c8dfedb7301139f2bafede2384dbad5c0a67d5b7d4d9ff8c54fc3e0017004104cc209affa50e199d7c390f02cc3d7fee774939ada41980e7060c6bdf776f0fb4fa21358ada730db1d0890b6771d38f7b24a5ef6e3d1a9f7a76de093431d2a026")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0304")
service+=("ANY")
minDhBits+=(1024)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(224)
curves+=("x25519:secp256r1:secp384r1:secp521r1:x448:ffdhe2048:ffdhe3072:ffdhe4096:ffdhe6144:ffdhe8192")
requiresSha2+=(true)
ja3+=("60f3e2285bc991c380f822c6ac51f947")
ja4+=("t13d311200_e8f1e7e78f70_6077d120928a")
current+=(true)
names+=("go 1.17.8")
short+=("go_1178")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA")
@ -2821,6 +2990,30 @@ names+=("Opera 66 (Win 10)")
minEcdsaBits+=(-1)
curves+=("X25519:secp256r1:secp384r1")
requiresSha2+=(false)
current+=(false)
names+=("LibreSSL 3.3.6 (macOS)")
short+=("libressl_336")
ch_ciphers+=("ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:GOST2012256-GOST89-GOST89:DHE-RSA-CAMELLIA256-SHA256:DHE-RSA-CAMELLIA256-SHA:GOST2001-GOST89-GOST89:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:CAMELLIA256-SHA256:CAMELLIA256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-CAMELLIA128-SHA256:DHE-RSA-CAMELLIA128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:CAMELLIA128-SHA256:CAMELLIA128-SHA:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:RC4-SHA:RC4-MD5:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:DES-CBC3-SHA")
ciphersuites+=("")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("160301012d0100012903036f634cebd1385dae7076b9c4fc379c9fec115f6bf6a1fdc906290baa9a084607209bb9a06fd1b08a52e5a1c745134db86e8b38e64818cbd1629a600e6fd39c17520062130313021301cca9cca8ccaac030c02cc028c024c014c00a009f006b0039ff8500c400880081009d003d003500c00084c02fc02bc027c023c013c009009e0067003300be0045009c003c002f00ba0041c011c00700050004c012c0080016000a00ff0100007e002b0009080304030303020301003300260024001d00202d52009bb008358c75a8715491c0123ad68d5bcf550abd0572e99fc4c3493e710000000f000d00000a7465737473736c2e7368000b00020100000a000a0008001d00170018001900230000000d0018001608060601060308050501050308040401040302010203")
protos+=("-no_ssl2 -no_ssl3")
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("x25519:secp256r1:secp384r1:secp521r1")
requiresSha2+=(false)
ja3+=("6de2ec44c1eaa7a8dc77095db71e25cf")
ja4+=("Rt13d490700_0d8feac7bc37_460f73f9cefb")
current+=(true)
names+=("OpenSSL 0.9.8y")
@ -2949,7 +3142,7 @@ names+=("Opera 66 (Win 10)")
minEcdsaBits+=(-1)
curves+=("X25519:secp256r1:secp521r1:secp384r1")
requiresSha2+=(false)
current+=(true)
current+=(false)
names+=("OpenSSL 1.1.1b (Debian)")
short+=("openssl_111b")
@ -3015,6 +3208,30 @@ names+=("Opera 66 (Win 10)")
minEcdsaBits+=(-1)
curves+=("X25519:secp256r1:x448:secp521r1:secp384r1")
requiresSha2+=(true)
current+=(false)
names+=("OpenSSL 3.0.15 (Debian)")
short+=("openssl_315")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA")
ciphersuites+=("TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030101370100013303036f9d8f9a79de979a60dbac5722c4a58be4b20b2342db4eda46c8195e8a217cfe208652a8cbfb13eec33fac6d45b34306d92639d9794222011a84e1a425feb976f3003e130213031301c02cc030009fcca9cca8ccaac02bc02f009ec024c028006bc023c0270067c00ac0140039c009c0130033009d009c003d003c0035002f00ff010000ac0000000f000d00000a7465737473736c2e7368000b000403000102000a00160014001d0017001e0019001801000101010201030104002300000016000000170000000d002a0028040305030603080708080809080a080b080408050806040105010601030303010302040205020602002b0009080304030303020301002d00020101003300260024001d0020324298346f49ce8830d64571f62b45f7a1d133cfbbbcbe4442902418f3539e74")
protos+=("-no_ssl2 -no_ssl3")
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("x25519:secp256r1:x448:secp521r1:secp384r1:ffdhe2048:ffdhe3072:ffdhe4096:ffdhe6144:ffdhe8192")
requiresSha2+=(true)
ja3+=("a3afc2c46ba4a7d7fbe1cfb7a3031c2f")
ja4+=("t13d311000_e8f1e7e78f70_1f22a2ca17c4")
current+=(true)
names+=("OpenSSL 3.5.0 (git)")

@ -1,6 +1,6 @@
The file `client-simulation.wiresharked.txt` contains client handshake data manually harvested from a network capture and displayed best with Wireshark.
The content needs to be added to `client-simulation.txt` which other part comes from the SSLlabs client API via `update_client_sim_data.pl`
The whole process is manual but not too difficult.
The file `client-simulation.wiresharked.txt` contains client handshake data manually harvested from a network capture and displayed by wireshark.
testssl.sh uses the file `client-simulation.txt`. Previously we queried the SSLlabs client API via `update_client_sim_data.pl` and added the data into `client-simulation.txt`. For quite some while we don't use the data from SSLlabs anymore as they haven't changed and they are outdated. That reduces the work to editing `client-simulation.wiresharked.txt` and `client-simulation.txt`.
## Instructions how to add a client simulation:
@ -9,18 +9,21 @@ The whole process is manual but not too difficult.
* Make sure the client traffic is specific: For just "Android" do not use an Android browser! Be also careful with factory installed Google Apps, especially on older devices as they might come with a different TLS stack.
* Stop recording.
* If needed sort for ClientHello.
* Look for the ClientHello which matches the source IP + destination you had in mind. Check the destination hostname in the SNI extension so that you can be sure, it's the right traffic.
* Edit `client-simulation.wiresharked.txt` and insert a new section, preferably by copying a previous version of the client from it.
* Edit the *names* accordingly and *short*. The latter must not contain blanks.
* Retrieve *handshakebytes* by marking the "TLS 1.x Record Layer" --> Copy --> As a hex stream.
* For *ch_ciphers* mark "Cipher Suites" --> Copy --> As a hex stream, remove any leading GREASE ciphers (?a?a) and supply it to `~/utils/hexstream2cipher.sh`. For consistency reasons it is preferred you remove the TLS 1.3 ciphers before which start with TLS\*.
* *ciphersuites* are TLS 1.3 ciphersuites. You can identify them as they currently are like 0x130?. Retrieve them from above see `~/utils/hexstream2cipher.sh`. They start with TLS\*.
* Look for the ClientHello which matches the source IP + destination you had in mind. Check the destination hostname in the SNI extension so that you can be sure it's the right traffic.
* Edit `client-simulation.wiresharked.txt` and insert a new section, preferably by copying a previous version of the client.
* Edit the *names* accordingly and the *short* description. The latter must not contain blanks.
* Retrieve *handshakebytes* by marking the *TLS 1.x Record Layer* --> Copy --> As a hex stream.
* For *ch_ciphers*: mark *Cipher Suites* --> Copy --> As a hex stream and supply it to `~/utils/hexstream2cipher.sh`. The last line contains the ciphers which you need to copy. For consistency reasons it is preferred you remove the TLS 1.3 ciphers before which start with TLS\*. . The GREASE "ciphers" (?a?a) which you may see in the very beginning don't show up here.
* *ciphersuites* are TLS 1.3 ciphersuites which you omitted previously. You can identify them as they currently are normallky like 0x13\*\*. Retrieve them from above see `~/utils/hexstream2cipher.sh`. As said, they start with TLS\*.
* For *curves* mark the *Supported Groups* TLS extension --> Copy --> As a hex stream, remove any leading GREASE ciphers (?a?a) and supply it to `~/utils/hexstream2curves.sh`. Copy the last line into *curves*.
* Figure out *protos* and *tlsvers* by looking at the *supported_versions* TLS extension (43=0x002b). May work only with recent clients. Be careful as some do not list all TLS versions here (OpenSSL 1.1.1 listed only TLS 1.2/1.3).
* Adjust *lowest_protocol* and *highest_protocol* accordingly.
* For *curves* mark the "supported groups" TLS extension --> Copy --> As a hex stream, remove any leading GREASE ciphers (?a?a) and supply it to `~/utils/hexstream2curves.sh`.
* Retrieve *alpn* by looking at the "alpn" TLS extension 16 (=0x0010).
* Adjust *lowest_protocol* and *highest_protocol* accordingly (0301=TLS 1.0, 0302=TLS 1.1, 0303=TLS 1.2, 0304=TLS 1.3)
* Review TLS extension 13 (=0x000d) "signature_algorithm" whether any SHA1 signature algorithm is listed. If not *requiresSha2* is true.
* Leave *maxDhBits*/*minDhBits* and *minRsaBits*/*maxRsaBit* at -1, unless you know for sure what the client can handle.
* Figure out the *services* by applying a good piece of human logic. A (modern) browser is probably "HTTP", OpenSSL or Java "ANY" whereas Thunderbird supports a variety of protocols.
* Retrieve *alpn* by looking at the *application_layer_protocol_negotiation* TLS extension 16 (=0x0010).
* When using wireshark, copy also the ja3 and ja4 values accordingly (copy --> value), see e.g. like *java_80442*. This could be used in the future.
* Figure out the *services* by applying a good piece of human logic. Or have a look at a different version of the client. Any (modern) browser is probably "HTTP", OpenSSL or Java "ANY" whereas mail clients as Thunderbird support a variety of protocols.
* When you're done copy your inserted section from `client-simulation.wiresharked.txt` into `client-simulation.txt`.
* Before submitting a PR: test it yourself! You can also watch it again via wireshark.

@ -93,6 +93,8 @@
requiresSha2+=(false)
current+=(true)
# Android 11+12 seems to be the same
names+=("Android 11 (native)")
short+=("android_11")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA")
@ -104,7 +106,7 @@
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
alpn+=("http/1.1")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(-1)
@ -113,6 +115,8 @@
minEcdsaBits+=(-1)
curves+=("X25519:secp256r1:secp384r1")
requiresSha2+=(false)
ja3+=("9b02ebd3a43b62d825e1ac605b621dc8")
ja4+=("t13d1713h1_5b57614c22b0_eca864cca44a")
current+=(true)
names+=("Android 12 (native)")
@ -126,7 +130,7 @@
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
alpn+=("http/1.1")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(-1)
@ -135,6 +139,58 @@
minEcdsaBits+=(-1)
curves+=("X25519:secp256r1:secp384r1")
requiresSha2+=(false)
ja3+=("9b02ebd3a43b62d825e1ac605b621dc8")
ja4+=("t13d1713h1_5b57614c22b0_eca864cca44a")
current+=(true)
# Android 13+14 seems to be the same
names+=("Android 13 (native)")
short+=("android_13")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030102330100022f0303564593a940b5d751d4cee7d4cd3ffbb68c310109b98a4a17e3ed6486d73dcee3202e82d4bbe870f4ad23988eee22f7b5c5036460e511edc31544211275bd9527960022130113021303c02bc02ccca9c02fc030cca8c009c00ac013c014009c009d002f0035010001c4000000180016000013706c61792e676f6f676c65617069732e636f6d00170000ff01000100000a00080006001d00170018000b00020100002300000010000b000908687474702f312e31000500050100000000000d00140012040308040401050308050501080606010201003300260024001d00205551dfbfb939959b7aa673d638cd80e0ee8d202623f1a78f87741ff7bfa0c619002d00020101002b000504030403030029011c00f700f1025680712b38fc90496ec3b53ffa0ae9e00eafdaa742879902bc71a8956410ca53915661cbc5c3e60649f278b1268a6a3dfcd9be7269ae0eda3974dbad73f6368d430867a8e1d540aad8c0b9024adabb10adc58864062a0984fc03d62ad39b25d176f8500e93232446663fa256733f9b08efbce336afd2eaa090d8e20f7e53ec0a4135a83bdff4383cd1db1905377e9a5d81f41e045e6fd97d316b05f954102e6bcd3b110b0b2c2ccd1891d90057e9fe6795f4430942437ce9cad68c7a7d77c1a49eb29d33d7700c7274a552f1015dff3569a1492d746e59b372a1ecdbae650eba8771b931c648414d133f7e0e0633376d1b715cca002120dc30aa42c9d3367cce7f2bafd591d04b95e6b11081345ebd56d47b65bf89266c")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2")
lowest_protocol+=("0x0303")
highest_protocol+=("0x0304")
alpn+=("http/1.1")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("x25519:secp256r1:secp384r1")
requiresSha2+=(false)
ja3+=("c67e9dc27d283f1f89b4ebb4b4670c21")
ja4+=("t13d1713h1_5b57614c22b0_352634941f3a")
current+=(true)
names+=("Android 14 (native)")
short+=("android_14")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030102330100022f0303564593a940b5d751d4cee7d4cd3ffbb68c310109b98a4a17e3ed6486d73dcee3202e82d4bbe870f4ad23988eee22f7b5c5036460e511edc31544211275bd9527960022130113021303c02bc02ccca9c02fc030cca8c009c00ac013c014009c009d002f0035010001c4000000180016000013706c61792e676f6f676c65617069732e636f6d00170000ff01000100000a00080006001d00170018000b00020100002300000010000b000908687474702f312e31000500050100000000000d00140012040308040401050308050501080606010201003300260024001d00205551dfbfb939959b7aa673d638cd80e0ee8d202623f1a78f87741ff7bfa0c619002d00020101002b000504030403030029011c00f700f1025680712b38fc90496ec3b53ffa0ae9e00eafdaa742879902bc71a8956410ca53915661cbc5c3e60649f278b1268a6a3dfcd9be7269ae0eda3974dbad73f6368d430867a8e1d540aad8c0b9024adabb10adc58864062a0984fc03d62ad39b25d176f8500e93232446663fa256733f9b08efbce336afd2eaa090d8e20f7e53ec0a4135a83bdff4383cd1db1905377e9a5d81f41e045e6fd97d316b05f954102e6bcd3b110b0b2c2ccd1891d90057e9fe6795f4430942437ce9cad68c7a7d77c1a49eb29d33d7700c7274a552f1015dff3569a1492d746e59b372a1ecdbae650eba8771b931c648414d133f7e0e0633376d1b715cca002120dc30aa42c9d3367cce7f2bafd591d04b95e6b11081345ebd56d47b65bf89266c")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2")
lowest_protocol+=("0x0303")
highest_protocol+=("0x0304")
alpn+=("http/1.1")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("x25519:secp256r1:secp384r1")
requiresSha2+=(false)
ja3+=("c67e9dc27d283f1f89b4ebb4b4670c21")
ja4+=("t13d1713h1_5b57614c22b0_352634941f3a")
current+=(true)
names+=("Edge 17 Win 10")
@ -181,6 +237,30 @@
requiresSha2+=(true)
current+=(true)
names+=("Edge 133 Win 11 23H2")
short+=("edge_133_win11_23h2")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030106d3010006cf0303a91b95c93b73955817dc10234ee30211ee47acba8e85d399ab36d39b76c7914d208e40fc084d95a77ffbcbac3a267e9e81d4ed2d6f4d14edc40f74781f648c41db00201a1a130113021303c02bc02fc02cc030cca9cca8c013c014009c009d002f0035010006663a3a00000012000000170000fe0d00da0000010001cb002012e6b30da36331d943fd044f7dc4c7fc9300f9d80d0d820ff89e5b0d1e260f4100b02ac49e517c37e5517a346ecdb73165a9c9d1e58d872168375b6addc9db40a2ba9a04191485fc3aed2323d71a5f4c4e15a818333166c3879ca54671f47b5d6bdf83bd8ce1931ea18d6e3d02b362f32b8f547a1d40f362c830893237e475dca57651d7aaaacd373251f91bd4e3e3d4e80e6e4f035dfb7eb9fa090e3d3616cbce2efe6d1005a0797043a2bdb86f6e193e0a756ae5d3aa962ab432195924b3005c51949b69777e8f7129bdcbc62fb122bdfc000500050100000000000a000c000a1a1a11ec001d00170018ff01000100002b0007067a7a03040303001b0003020002000b00020100446900050003026832003304ef04ed1a1a00010011ec04c0042c6dea9c7423c62ce0a529d8a69193341908775c19ac770843455151b792a39926ca9265794bb357689c435b7b4607d65174632c31c6aa40e3baade8fabe28fac8fccbba27277bfc389356d65e7823b3c305c3c50364f9e52786c60c12cccc2d6b9f736a74e3d93e9b925b2974808426b0bcd40a04a406f5c260c4d301fff9322e80a07ec768cd7b0bbe46488a902f533c1138447688b65e558481da18448d064f0eacc054e008380558b388af69ec25d7787071e6b3f197b483028c2be4b4d937044df36b837a6bbb97292fd9b70ba76e906ba123166ac40c00d6d78b0dcc60adf1caa918773af536a56936e703b011709b92716cb828406baa0231254e00ca81c0e9c565c373e21b6ed20019ff1249bcb9442a778e76fa434a24b28439263d6bad60fa7dc5747b65728d2e83c1edf94e910a4fcabcb70fb7b024d354daf127ec733b74427b0ca3448208205c7389094a495225308874a84dd92ff635b077329a3b734ce95566565a5480159f24333a55803d3d889c6796682df509ec22c44716387dfb8615066ccc49af994790f81431a563c06d8848272255cc4b91a7c237821c829d73b33a7c7867461206a6951f535481db2c73d1a986058cce44bd09db775e15ac95ba50603a25a2f6ab68829373aa21f46cbbd436a8e8d2c197e72d5a8810800a20ab88b83e1917f808a8cdbacc00c071db76cff6744f8ca407cbba57372a9d47f641a0d9a4ec8c295cf26289bbcc2b95574ae7769108a849a2494915a2252217f301693a257443387ff2ea9c80162cc3f3b159c3a1ab9804b3e7120d677a009cb8faf4870705a125890025815cfa305cbdeb33e547c08717ac3b601e8b625ba9a10a6ec08ee582b41e4412b5d452a33838a940892742c2330a291b999c27e5ac577079ece3cf02c8747d00659be25b344954cf8527bc16aabb904b848c71a6ec259f28cb10134f4c150eace0252f095e11acaccd0194b0e90f67d4a25e35cc0fba14f9d852c2913fa0117e8ce7334b4a0ae28c397ef662eea6c437ab3ddb8034e8135ad2002910927f647a787635267560284d40c48a359da33b35b1c883bdabb5609c5d6a18871e7a511ac80cc918b532fa2728819e8c6a86c3f522fda45e8b4a4b82dcc8cf248050b0cfcfc63228170df27c2a0a82a56d7cca25845b89d58759f615dbd573ddeb7ac4d3c76980ac995c7268d8c28357bb2e688abac551dc2246daa06559cb57fc53a20a00afdce949f65b378226a5998700ceb5a105918936795e00cd3a9a467e74eca608d682f1466d6396b9fe231963e721ac52768583145f8b84c0ab55ea906cdd307ada340ca4182d28007d9d98c793228dc91b9d20816227a8a33f3825aff603a65cc1f48c09e622a98b50c15719c0bcd5629bf678a97b2aabf3ae429c5a7526c6de810adde5777e715e820774d44b539e778f4156015418316df7647d0818d971c5d1351e40973e1754b690684934e94eb447385a5aa85c6081e9f210a466b9fd794f0a7248c691571ce42d9cb492837bbc831a7765d073f6203f83cac7ac6703aae678d15b8283c94365b22e0515b52c6ace887abd32320d1bf45f99ab5cacd124627925ff58869257904223bedc43846d9df9fb6954968bb8ddb29f94cf440e85f7c9d75d000d89b24a5664d64c461899864ffd3e27d7d4f6a468ff41f61c86bb8eedf1b90c963e186c7590ca89933b001d0020e35783261e99e6eb69d783c21f9e6c14f9d5976162986c365921daf17f5b1d39002d000201010010000e000c02683208687474702f312e3100230000000d00120010040308040401050308050501080606010000000f000d00000a7465737473736c2e7368aaaa000100")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2")
lowest_protocol+=("0x0303")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("HTTP")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(16384)
minEcdsaBits+=(-1)
curves+=("X25519MLKEM768:x25519:secp256r1:secp384r1")
requiresSha2+=(true)
ja3+=("f8e65281e2992dcf1d057bc9aaf430e4")
ja4+=("t13d1516h2_8daaf6152771_02713d6af862")
current+=(true)
names+=("Chrome 73 (Win 10)")
short+=("chrome_73_win10")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:DES-CBC3-SHA")
@ -291,6 +371,30 @@
requiresSha2+=(true)
current+=(true)
names+=("Chromium 137 (Win 11)")
short+=("chromium_137_win11")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030106b3010006af0303fbd2b110b1afbc69dac9202344caa14f56eb72252a02904c00395c3ada1716be20439b0a947c628db23f13d697fe4323f9a4929bf182cbc4c880fdc5f5315cc8080020eaea130113021303c02bc02fc02cc030cca9cca8c013c014009c009d002f0035010006464a4a000000230000fe0d00ba00000100012a002065b7614cfd41b624c0a9c508c7ba54ac2541edaa61b95dafb2259fcd96e87e1900909bd89d48d1da0991e630b47a90e6c64180c4b36628222dc07c6cb9c4ca7eb1ea231a7e59c6368d80cff26f76110099168eafa707e84a114cf659e73a8a024ac66ce1c7e7e590ee44ca26fb87d0c09014849cdbe0c3f6d6bad2a75fd2b8e688b9dce354df417166448d102089d991dcfcdcb7dbce6db4abfb410106fc45f1da80e26e6ca52617591858cf284281ec5545003304ef04ed9a9a00010011ec04c0874c762bd4a556587b5197c6439a914b176da4db56f67518ffe9285fd229aa9454b4b85dac193106f7494827c40a1b026a270f8f100876080a05114ae316861166c0790b7ed420546e7531ea281ae1eba8398b0850764995431045647c65b138247884f132a9ecf881c75b17186a15da2bbadf342ef87353cde900fa781f4e8c7924782a604769dae2810eba77b1a7a9433a9b22b937ad22490a14b169c999f2c3ccaa8029d0317e98c01edd6a740231aa9310a6d521330dd8a5f9473a5e7763416bc7d24c5d1d4a04436c352bba1ae83537abec638e04c9b71300d938180793060685462d4a0cc9e89be4ba29e17049f796c9db1130911908b8e213713857620401cda66f7274b97c61c61bb73cecd76d6af66630069c0e13be273b7d105ca594529fb8890bad0898c276591d3472f17cbd80a50bc20421a80c94b12357144205a7e577de0276514182554202e786a4d5c62bfd2c62a771805fe43cb40236d99078df6371071b1f36e10440c7b59e06172539326498c6a6f81887417b6c0c75fbf02b5a166e6b05bdc332c0e0265a21a76253c26a6af899949bce34c814b9ca39637810624b122a8a9afb2959e0ecb7d8f5b48924c0d9a1386ec910fdd01688e94103566717ac7784c0bcc31b199f1a4be5ea6b1e9760ecc16b55c0b9f498495272a8da99bb1e15c0e6b078d9c1163fca068ec7589279b22b293c76f40a40c52842c583e36173944b6bcd66a8fe30afe7c9453b393ac61848bd32cdfde28ec9469bca049f207c66b2dc5c001b134bfb565f45b7d3b3770762633f2b6113a90bcebc1edd29726d332b34b173ba672ab6fa0a2533ce7f43432a08bd1bab07e4d557d60c4cf2867f552ca4dadc93cd66950a5810dfb40123d2a0cf07c18d895a2158c751154d3f80855d112e39551ceabb42ed41c9e710a2b3f400bd5c386c703564b627817112f4ec6ab5024cf4ebcd6d3917df87c1d617377e5a1408f73bf0abb13ce64dd4c5a306f42660042d8694afc9371b4fe66170534bfde0362f591d21470e8514952a65525b9c48ba4438f024a9bd6a19319c80f90c2a53f42823132f8692869f7b4f28718eec265a51b7afd5c0c300c57930f694e451620ab6a09785357ab13c351289a54c426ee2a852c29ec9882ebeb985151b6bef462418501c00c76cc856a370f29e9cc5359a9a81fcd20553c4bfda10679f87c25662a158e08d07a2882c402bf4977822c8cd9094a926885a03c04911e0c5dbe16371aba9cdfb73343c7f1ef03a97864a29a2662868ae81b3cf772536a0783f0b5c9f145c0e2b1ab66c2b9eb006bc627b6496593722b02ddc648fbf0614f2808718e26b2d23575952ba3cdc335e1a68796281886604d5541acb02431665c7b9d156f52c6f902888cc5a156023c7fe017124a99f9b990085a343b0fa1d47817bff727b6ca09be31bbb86b726ef9a8119a34dadc83837330b63d955af60069062a34056751780a2f8f22dc72937743678dec3bdc9723121da056777ac1ddb472d93cb1b62a1bef7415f91598ac1146d00ba200b3edee7a21a78444c967d7d5b8af35645212a01eff213a7d51270d22059882abae856bb5c2383d5b1b55418f20978a0cb1140629848476bf18fa5c3a489b10aa6761be00fb58aa893e76983749ed10a2e6691389dac7bb12d5d2c51d549e868bf30d33b231a95651396e34a2167bf60c58e65ed5d001d002045abd03dc3f1716a957587e038b5114380a12b78c2b95967be7b326c12c32520002d00020101000500050100000000000d00120010040308040401050308050501080606010000000f000d00000a7465737473736c2e73680010000e000c02683208687474702f312e31002b000706dada03040303001700000012000044cd00050003026832000b00020100001b0003020002000a000c000a9a9a11ec001d00170018ff010001008a8a000100")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2")
lowest_protocol+=("0x0303")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("HTTP")
minDhBits+=(1024)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("X25519MLKEM768:x25519:secp256r1:secp384r1")
requiresSha2+=(true)
ja3+=("5d36bde6b6ce424c1972667ad9a6a732")
ja4+=("t13d1516h2_8daaf6152771_d8a2da3f94cd")
current+=(true)
names+=("Firefox 66 (Win 8.1/10)")
short+=("firefox_66_win")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA")
@ -357,8 +461,55 @@
requiresSha2+=(false)
current+=(true)
names+=("Firefox 137 (Win 11)")
short+=("firefox_137_win11")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030107620100075e0303a0b1ef8be287453f90ada3213b0b3fe24ab4724790b494fc370480cd7a924bec20faab9a25078ed312a24ff2134e59987ac478ea31c17509053c40c08d0799e4d00022130113031302c02bc02fcca9cca8c02cc030c00ac009c013c014009c009d002f0035010006f30000000f000d00000a7465737473736c2e736800170000ff01000100000a0010000e11ec001d00170018001901000101000b00020100002300000010000e000c02683208687474702f312e310005000501000000000022000a00080403050306030203001200000033052f052d11ec04c000534636761d96a91bff883cd3997146e37c10a2cbec183b1545046351711c2c14cb9bcee0b6c65fd18ac9139d375a94d7b69a92728dbfacbcc25b8fdf814d9bf1bce16bbaf8410bdce6b28d2b3ba2e58bd181c655db9d3adc763f88300ba4c9129b5798fc539eab8e41b2008919632a42bd51523593c41ef984801a972d2616a3db7a0cf4ba3248cc5ee88c26c30272d0d23e9bf4603916198938bd1fc69c7c4a9d26b7a57692932128b4c044612c958772c0bda2f897ae10661c9cacbfd99af871a84b79007b9bbc443439e7896ede49087c83564894b0a5f261d51bba447cabae5bb3c1781d36930233acc56f9bb2d23a7721d5b345a8a242a09ac1f64a20e863308a0cad7cb0eb9b0bc5bcb83cf4b0b71bae37a2919e25bd9f8a762454bb6fb5b477ba1f3eaa1a3f54010d61c5089b38a12bc65ffa37dd4aca76320221b60ff9cc466e3613b54c16bd94375f8bb8242b4fb648cebea0371271164f3858ea9029968234d421694a89519724c849e663970b22ea9708050879255195f07790f2f17c58d0972d175fad14718c25abfdf4b21911cfdbfb1677a78bf0da5b01675d16a06af896b4f61784df2bbe8d3799ba420ee83750c11a100053c8585a5ae83c815c2bc8f06627068316ef3b98c814468902534075370ab299d6c74a62ea5eef1a98192c1759bb43405ca4ea3cb2141a1c39029b088a72bbbb064b468192545df2f57d29dab260a74cfdd88ec7d2c916056814902dd6a326b92aa8fc046eb059aff0148078c0734fcc7474499db857a146fb4dace5bb75fa5deb4b1aed2386c48651b27971f6486e67d5113dd02e239a3d6c62bbd528745c4552a33814b6c59a04f997e0383edcf75f008a77ecc47e0e0883743a51d491c2cde26ded288d2c3c822d2a471fe24740c93bb8d320508b85bcf05c889b156877afba5117739a292ca047089cb7e20b3a9c8a0eaae61333d3c3c2f33d14a97f27e484a298c6ab71509fe39e0471162414cd07a8a439910e53460be373b650850ff33545739a0a4c470ea36288c6d21d0d3a7f88bc1ec278a1aeba97ec105f5bb4bee319cf115b94c161bde71cab324819d439982313194770842697a22fcaa7d6e16543d46ae178c2e7eb5e166a98ad213a92a67723aa8ad9328f8c32aefa4a319e355f051b511c079bce768a778067f92586c4786c4793b943c4821d8579ca919079829f3ffc30fcbcbff871bdd337826d6269e32063330891b2c6911da30f2e0b907027458b8589cd2526de20c894b6cca17a4c53704c661b6d5d153635bc47b8b0bbab47589690593f8206ec3c3f7d8cc1c119ba5963c6f0613151d5b8902b523979cbfe227cf8e45c0fa073007c78804883e3c23401b0ba5fd1b53d975aef94655dc1a06fbc714ab0c7a0f518dd117567376ce7e23ebd2a0126cb1e7d9a7f895aa60e65a16b651d468318eaec49b91bc046b99275f264c493037c9332fb261449f0320ad7698cd70866618ef2187ed42371123b0af8b0011e5844e09934efc5418f60aa31f39b91039f367b59514003c3f70fd3f813e8dbbe31ab0093863ab1a506138353915bacd626b42ed464334165d1c2aee1a2c6440b7a99e73b6e398ca02c623c999d7b7e9656b0af80a5a7a8195995542c8a33e3c896e02cd17946d139cbfa474ae2d0c88d43d8e8904566d7b22f1abd484976e9b92d69a023c108e0f4ade46e9078001d0020d0c88d43d8e8904566d7b22f1abd484976e9b92d69a023c108e0f4ade46e90780017004104c2def31a670b4a9655e66fe6f40faeca73f1087b0acb1595f15367f29536d7fec61d01d24f8dba47f7325b2a314ea96e3d7b27570213f8acfe8b246ab2c9d305002b00050403040303000d0018001604030503060308040805080604010501060102030201002d00020101001c00024001001b000706000100020003fe0d011900000100032b00209f461dcd898b13a5ae9cb6eda16db517723a0bd452637e628dd9f42684525a2e00efe1e6f2feae67133161ac996bcfb5f06cd1d1635099eecb70fbc50a9ba740551de7afa0c1d222d5b4073bc3e76079c9c33d87fef700870929d979dd2bf44e3c89e14aaac43f46d1e985d1be13ee29fd76820334c5d169d9dc50b49ad24919af9735baa27816394bed94a0f1640e8d6cf67268b58215fd2fcfda67c7203527903f6ed32b576cd5f4bb5d947b3b2aeb6e9eaa588f68c2c728b8f410c0cb67a5565478b28d3fce6f485bb80b2748b1f85166ecc9729f4f03e9c1cdd80f4ec2342b088d45161d8334a5dd4f57aa4fd3cc3b48c361b318147cc5b1270c172788d3674a854acb3a37fdd532d6a014d33acd68")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2")
lowest_protocol+=("0x0303")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("HTTP")
minDhBits+=(1023)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("X25519MLKEM768:x25519:secp256r1:secp384r1:secp521r1:ffdhe2048:ffdhe3072")
requiresSha2+=(false)
ja3+=("6f7889b9fb1a62a9577e685c1fcfa919")
ja4+=("t13d1717h2_5b57614c22b0_3cbfd9057e0d")
current+=(true)
names+=("Java 8u442 (OpenJDK)")
short+=("java_80442")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA")
ciphersuites+=("TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030301a6010001a2030374d4c01ca363612e1b39dc3c31378291205ad678e0b05546c2e99cefbc1039482001be25d1468ebbe036e971467705df1181608bb965d7651d2eef4539e510c557003e130213011303c02cc02bcca9c030cca8c02f009fccaa009ec024c028c023c027006b0067c00ac014c009c01300390033009d009c003d003c0035002f00ff0100011b0000000f000d00000a7465737473736c2e7368000500050100000000000a00160014001d001700180019001e01000101010201030104000b00020100001100090007020004000000000017000000230000000d00220020040305030603080708080804080508060809080a080b04010501060103030301002b00050403040303002d00020101003200220020040305030603080708080804080508060809080a080b040105010601030303010033006b0069001d0020c0398cbcaacf48f9d7b2fa72d763e6b553ed2b5cd62bbc6d5ca776e7a3e75f7b001700410405dc76951174b4136b565f531bfb748c7cd13b4e8254f4db86b2e936dbc604831d63b0cbad1ff9cda6fe7ff6295d24c6996d4f01431dc66c23ebf9ce58e7e2fe")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2")
lowest_protocol+=("0x0303")
highest_protocol+=("0x0304")
service+=("ANY")
minDhBits+=(1024)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(224)
curves+=("x25519:secp256r1:secp384r1:secp521r1:x448:ffdhe2048:ffdhe3072:ffdhe4096:ffdhe6144:ffdhe8192")
requiresSha2+=(true)
ja3+=("60f3e2285bc991c380f822c6ac51f947")
ja4+=("t13d311200_e8f1e7e78f70_6077d120928a")
current+=(true)
names+=("Java 11.0.2 (OpenJDK)")
short+=("java1102")
short+=("java_1102")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:AES256-SHA256:ECDH-ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:AES256-SHA:ECDH-ECDSA-AES256-SHA:ECDH-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA:ECDH-ECDSA-AES128-SHA:ECDH-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384")
ch_sni+=("$SNI")
@ -379,7 +530,7 @@
current+=(true)
names+=("Java 12.0.1 (OpenJDK)")
short+=("java1201")
short+=("java_1201")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:DHE-DSS-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:AES256-SHA256:ECDH-ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:AES256-SHA:ECDH-ECDSA-AES256-SHA:ECDH-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA:ECDH-ECDSA-AES128-SHA:ECDH-RSA-AES128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
@ -400,7 +551,7 @@
current+=(false)
names+=("Java 17.0.3 (OpenJDK)")
short+=("java1703")
short+=("java_1703")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA")
ciphersuites+=("TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
@ -420,6 +571,29 @@
requiresSha2+=(true)
current+=(true)
names+=("Java 21.0.6 (OpenJDK)")
short+=("java_2106")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA")
ciphersuites+=("TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030301a6010001a203038da0a88f4801f5447e2f601f23f7740cd5651b8b28b1864aa45c02771a3fc65820e3d4299d4881b830a38a270692ae60dec3ff669d9532c63fe78aa879f0bf79c0003e130213011303c02cc02bcca9c030cca8c02f009fccaa009ec024c028c023c027006b0067c00ac014c009c01300390033009d009c003d003c0035002f00ff0100011b0000000f000d00000a7465737473736c2e7368000500050100000000000a00160014001d001700180019001e01000101010201030104000b00020100001100090007020004000000000017000000230000000d00220020040305030603080708080804080508060809080a080b04010501060103030301002b00050403040303002d00020101003200220020040305030603080708080804080508060809080a080b040105010601030303010033006b0069001d00206e5b5bd473c8dfedb7301139f2bafede2384dbad5c0a67d5b7d4d9ff8c54fc3e0017004104cc209affa50e199d7c390f02cc3d7fee774939ada41980e7060c6bdf776f0fb4fa21358ada730db1d0890b6771d38f7b24a5ef6e3d1a9f7a76de093431d2a026")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0304")
service+=("ANY")
minDhBits+=(1024)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(224)
curves+=("x25519:secp256r1:secp384r1:secp521r1:x448:ffdhe2048:ffdhe3072:ffdhe4096:ffdhe6144:ffdhe8192")
requiresSha2+=(true)
ja3+=("60f3e2285bc991c380f822c6ac51f947")
ja4+=("t13d311200_e8f1e7e78f70_6077d120928a")
current+=(true)
names+=("go 1.17.8")
short+=("go_1178")
ch_ciphers+=("ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA")
@ -508,7 +682,7 @@
requiresSha2+=(false)
current+=(true)
names+=("LibreSSL 2.8.3 (Apple)")
names+=("LibreSSL 2.8.3 (macOS)")
short+=("libressl_283")
ch_ciphers+=("ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:GOST2012256-GOST89-GOST89:DHE-RSA-CAMELLIA256-SHA256:DHE-RSA-CAMELLIA256-SHA:GOST2001-GOST89-GOST89:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:CAMELLIA256-SHA256:CAMELLIA256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-CAMELLIA128-SHA256:DHE-RSA-CAMELLIA128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:CAMELLIA128-SHA256:CAMELLIA128-SHA:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:RC4-SHA:RC4-MD5:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:DES-CBC3-SHA")
ciphersuites+=("")
@ -528,6 +702,30 @@
minEcdsaBits+=(-1)
curves+=("X25519:secp256r1:secp384r1")
requiresSha2+=(false)
current+=(false)
names+=("LibreSSL 3.3.6 (macOS)")
short+=("libressl_336")
ch_ciphers+=("ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:GOST2012256-GOST89-GOST89:DHE-RSA-CAMELLIA256-SHA256:DHE-RSA-CAMELLIA256-SHA:GOST2001-GOST89-GOST89:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:CAMELLIA256-SHA256:CAMELLIA256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-CAMELLIA128-SHA256:DHE-RSA-CAMELLIA128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:CAMELLIA128-SHA256:CAMELLIA128-SHA:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:RC4-SHA:RC4-MD5:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:DES-CBC3-SHA")
ciphersuites+=("")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("160301012d0100012903036f634cebd1385dae7076b9c4fc379c9fec115f6bf6a1fdc906290baa9a084607209bb9a06fd1b08a52e5a1c745134db86e8b38e64818cbd1629a600e6fd39c17520062130313021301cca9cca8ccaac030c02cc028c024c014c00a009f006b0039ff8500c400880081009d003d003500c00084c02fc02bc027c023c013c009009e0067003300be0045009c003c002f00ba0041c011c00700050004c012c0080016000a00ff0100007e002b0009080304030303020301003300260024001d00202d52009bb008358c75a8715491c0123ad68d5bcf550abd0572e99fc4c3493e710000000f000d00000a7465737473736c2e7368000b00020100000a000a0008001d00170018001900230000000d0018001608060601060308050501050308040401040302010203")
protos+=("-no_ssl2 -no_ssl3")
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("x25519:secp256r1:secp384r1:secp521r1")
requiresSha2+=(false)
ja3+=("6de2ec44c1eaa7a8dc77095db71e25cf")
ja4+=("Rt13d490700_0d8feac7bc37_460f73f9cefb")
current+=(true)
names+=("OpenSSL 1.1.0j (Debian)")
@ -638,6 +836,30 @@
minEcdsaBits+=(-1)
curves+=("X25519:secp256r1:x448:secp521r1:secp384r1")
requiresSha2+=(true)
current+=(false)
names+=("OpenSSL 3.0.15 (Debian)")
short+=("openssl_315")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA")
ciphersuites+=("TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("16030101370100013303036f9d8f9a79de979a60dbac5722c4a58be4b20b2342db4eda46c8195e8a217cfe208652a8cbfb13eec33fac6d45b34306d92639d9794222011a84e1a425feb976f3003e130213031301c02cc030009fcca9cca8ccaac02bc02f009ec024c028006bc023c0270067c00ac0140039c009c0130033009d009c003d003c0035002f00ff010000ac0000000f000d00000a7465737473736c2e7368000b000403000102000a00160014001d0017001e0019001801000101010201030104002300000016000000170000000d002a0028040305030603080708080809080a080b080408050806040105010601030303010302040205020602002b0009080304030303020301002d00020101003300260024001d0020324298346f49ce8830d64571f62b45f7a1d133cfbbbcbe4442902418f3539e74")
protos+=("-no_ssl2 -no_ssl3")
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("ANY")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
curves+=("x25519:secp256r1:x448:secp521r1:secp384r1:ffdhe2048:ffdhe3072:ffdhe4096:ffdhe6144:ffdhe8192")
requiresSha2+=(true)
ja3+=("a3afc2c46ba4a7d7fbe1cfb7a3031c2f")
ja4+=("t13d311000_e8f1e7e78f70_1f22a2ca17c4")
current+=(true)
names+=("OpenSSL 3.5.0 (git)")
@ -771,6 +993,29 @@
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
requiresSha2+=(false)
current+=(false)
names+=("Safari 18.4 (iOS 18.4)")
short+=("safari_184_ios_184")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA:AES128-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
handshakebytes+=("1603010200010001fc0303eeadd8d7a16a2094961be3378d634db290ca80a727bbd1b6e9ba8738ff3fad4c20fc75d8ca4ca06f8ff1b6346ea1e212ae68dfd0aef24f7debde69478e64649b2a002a3a3a130113021303c02cc02bcca9c030c02fcca8c00ac009c014c013009d009c0035002fc008c012000a010001891a1a00000000000f000d00000a7465737473736c2e736800170000ff01000100000a000c000a6a6a001d001700180019000b000201000010000e000c02683208687474702f312e31000500050100000000000d001600140403080404010503080508050501080606010201001200000033002b00296a6a000100001d0020fd184de04a7fe5cdfd7317a41c36031805a53c2f45eb8f14634c10efae08db32002d00020101002b000b0ababa0304030303020301001b0003020001fafa000100001500c6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("HTTP")
curves+=("x25519:secp256r1:secp384r1:secp521r1")
minDhBits+=(-1)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
requiresSha2+=(false)
ja3+=("773906b0efdefa24a7f2b8eb6985bf37")
ja4+=("t13d2014h2_a09f3c656075_e42f34c56612")
current+=(true)
names+=("Safari 12.1 (macOS 10.13.6)")
@ -838,3 +1083,29 @@
minEcdsaBits+=(-1)
requiresSha2+=(false)
current+=(true)
names+=("Safari 18.4 (macOS 15.4)")
short+=("safari_184_osx_154")
ch_ciphers+=("ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA:AES128-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:DES-CBC3-SHA")
ciphersuites+=("TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256")
ch_sni+=("$SNI")
warning+=("")
handshakebytes+=("1603010200010001fc03030886edd4c7a1345a2b57e1347f15efb7f45836169c7a3e9e87cb6c367b7b34f120b6c43e3e84fa7512a421ee16950e3761d8450ff386426a720b38c3d8574a5ebe002aeaea130113021303c02cc02bcca9c030c02fcca8c00ac009c014c013009d009c0035002fc008c012000a01000189caca00000000000f000d00000a7465737473736c2e736800170000ff01000100000a000c000a6a6a001d001700180019000b000201000010000e000c02683208687474702f312e31000500050100000000000d001600140403080404010503080508050501080606010201001200000033002b00296a6a000100001d00206e8b7b1b4414a23dfd02fa6aa6ad54e97838fb1b9a787335d1c5b58e637d9d7d002d00020101002b000b0afafa0304030303020301001b00030200017a7a000100001500c6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
protos+=("-no_ssl3 -no_ssl2")
tlsvers+=("-tls1_3 -tls1_2 -tls1_1 -tls1")
lowest_protocol+=("0x0301")
highest_protocol+=("0x0304")
alpn+=("h2,http/1.1")
service+=("HTTP")
curves+=("x25519:secp256r1:secp384r1:secp521r1")
minDhBits+=(1024)
maxDhBits+=(-1)
minRsaBits+=(-1)
maxRsaBits+=(-1)
minEcdsaBits+=(-1)
requiresSha2+=(false)
ja3+=("773906b0efdefa24a7f2b8eb6985bf37")
ja4+=("t13d2014h2_a09f3c656075_e42f34c56612")
current+=(true)

@ -69,8 +69,8 @@
"FS_TLS12_sig_algs","testssl.sh/81.169.166.184","443","INFO","RSA-PSS-RSAE+SHA256 RSA-PSS-RSAE+SHA384 RSA-PSS-RSAE+SHA512 RSA+SHA256 RSA+SHA384 RSA+SHA512 RSA+SHA224","",""
"FS_TLS13_sig_algs","testssl.sh/81.169.166.184","443","INFO","RSA-PSS-RSAE+SHA256 RSA-PSS-RSAE+SHA384 RSA-PSS-RSAE+SHA512","",""
"HTTP_status_code","testssl.sh/81.169.166.184","443","INFO","200 OK ('/')","",""
"HTTP_clock_skew","testssl.sh/81.169.166.184","443","INFO","0 seconds from localtime","",""
"HTTP_headerTime","testssl.sh/81.169.166.184","443","INFO","1737570310","",""
"HTTP_clock_skew","testssl.sh/81.169.166.184","443","INFO","-8 seconds from localtime","",""
"HTTP_headerTime","testssl.sh/81.169.166.184","443","INFO","1744832281","",""
"HSTS_time","testssl.sh/81.169.166.184","443","OK","362 days (=31337000 seconds) > 15552000 seconds","",""
"HSTS_subdomains","testssl.sh/81.169.166.184","443","INFO","only for this domain","",""
"HSTS_preload","testssl.sh/81.169.166.184","443","INFO","domain is NOT marked for preloading","",""
@ -97,7 +97,7 @@
"SWEET32","testssl.sh/81.169.166.184","443","OK","not vulnerable","CVE-2016-2183 CVE-2016-6329","CWE-327"
"FREAK","testssl.sh/81.169.166.184","443","OK","not vulnerable","CVE-2015-0204","CWE-310"
"DROWN","testssl.sh/81.169.166.184","443","OK","not vulnerable on this host and port","CVE-2016-0800 CVE-2016-0703","CWE-310"
"DROWN_hint","testssl.sh/81.169.166.184","443","INFO","Make sure you don't use this certificate elsewhere with SSLv2 enabled services, see https://search.censys.io/search?resource=hosts&virtual_hosts=INCLUDE&q=5B4BC205947AED96ECB1879F2668F7F69D696C143BA8D1C69DBB4DC873C92AE9","CVE-2016-0800 CVE-2016-0703","CWE-310"
"DROWN_hint","testssl.sh/81.169.166.184","443","INFO","Make sure you don't use this certificate elsewhere with SSLv2 enabled services, see https://search.censys.io/search?resource=hosts&virtual_hosts=INCLUDE&q=AB09C02A41DFDF4E6ADC33909B9A6CBFECB91D9E1B26B0BC3798577E8A6E8DBD","CVE-2016-0800 CVE-2016-0703","CWE-310"
"LOGJAM","testssl.sh/81.169.166.184","443","OK","not vulnerable, no DH EXPORT ciphers,","CVE-2015-4000","CWE-310"
"LOGJAM-common_primes","testssl.sh/81.169.166.184","443","OK","--","CVE-2015-4000","CWE-310"
"BEAST_CBC_TLS1","testssl.sh/81.169.166.184","443","MEDIUM","ECDHE-RSA-AES256-SHA ECDHE-RSA-AES128-SHA DHE-RSA-CAMELLIA256-SHA DHE-RSA-CAMELLIA128-SHA DHE-RSA-AES256-SHA DHE-RSA-AES128-SHA AES256-SHA","CVE-2011-3389","CWE-20"
@ -105,39 +105,37 @@
"LUCKY13","testssl.sh/81.169.166.184","443","LOW","potentially vulnerable, uses TLS CBC ciphers","CVE-2013-0169","CWE-310"
"winshock","testssl.sh/81.169.166.184","443","OK","not vulnerable","CVE-2014-6321","CWE-94"
"RC4","testssl.sh/81.169.166.184","443","OK","not vulnerable","CVE-2013-2566 CVE-2015-2808","CWE-310"
"clientsimulation-android_60","testssl.sh/81.169.166.184","443","INFO","TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256","",""
"clientsimulation-android_70","testssl.sh/81.169.166.184","443","INFO","TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384","",""
"clientsimulation-android_81","testssl.sh/81.169.166.184","443","INFO","TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384","",""
"clientsimulation-android_90","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-android_X","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-android_11","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-android_12","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-chrome_79_win10","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-android_11_12","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-android_13_14","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-chrome_101_win10","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-firefox_66_win81","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-chromium_137_win11","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-firefox_100_win10","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-ie_6_xp","testssl.sh/81.169.166.184","443","INFO","No connection","",""
"clientsimulation-firefox_137_win11","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-ie_8_win7","testssl.sh/81.169.166.184","443","INFO","TLSv1.0 ECDHE-RSA-AES256-SHA","",""
"clientsimulation-ie_8_xp","testssl.sh/81.169.166.184","443","INFO","No connection","",""
"clientsimulation-ie_11_win7","testssl.sh/81.169.166.184","443","INFO","TLSv1.2 DHE-RSA-AES256-GCM-SHA384","",""
"clientsimulation-ie_11_win81","testssl.sh/81.169.166.184","443","INFO","TLSv1.2 DHE-RSA-AES256-GCM-SHA384","",""
"clientsimulation-ie_11_winphone81","testssl.sh/81.169.166.184","443","INFO","TLSv1.2 ECDHE-RSA-AES256-SHA","",""
"clientsimulation-ie_11_win10","testssl.sh/81.169.166.184","443","INFO","TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384","",""
"clientsimulation-edge_15_win10","testssl.sh/81.169.166.184","443","INFO","TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384","",""
"clientsimulation-edge_101_win10_21h2","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-safari_121_ios_122","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-safari_130_osx_10146","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-edge_133_win11_23h2","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-safari_184_ios_184","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-safari_154_osx_1231","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-safari_184_osx_154","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-java_7u25","testssl.sh/81.169.166.184","443","INFO","TLSv1.0 ECDHE-RSA-AES128-SHA","",""
"clientsimulation-java_8u161","testssl.sh/81.169.166.184","443","INFO","TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384","",""
"clientsimulation-java1102","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-java1703","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-java_80442","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-java_1102","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-java_1703","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-java_2106","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-go_1178","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-libressl_283","testssl.sh/81.169.166.184","443","INFO","TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384","",""
"clientsimulation-libressl_336","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-openssl_102e","testssl.sh/81.169.166.184","443","INFO","TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384","",""
"clientsimulation-openssl_110l","testssl.sh/81.169.166.184","443","INFO","TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384","",""
"clientsimulation-openssl_111d","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-openssl_303","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-openssl_315","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-openssl_350","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""
"clientsimulation-apple_mail_16_0","testssl.sh/81.169.166.184","443","INFO","TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384","",""
"clientsimulation-thunderbird_91_9","testssl.sh/81.169.166.184","443","INFO","TLSv1.3 TLS_AES_256_GCM_SHA384","",""

@ -1,5 +1,7 @@
#!/usr/bin/perl
### This is futile as the data haven't changed for an eternity
use strict;
use Data::Dumper;
use JSON;
@ -15,8 +17,8 @@ $ossl =~ s/\R//g; # remove LFs
die "Unable to open $ossl" unless -f $ossl;
my $ossl = "$ossl" . " ciphers -V 'ALL:COMPLEMENTOFALL:\@STRENGTH'";
# we get all data from here
my $json = `curl 'https://api.dev.ssllabs.com/api/v3/getClients'`;
# we got all data from here : 'https://api.dev.ssllabs.com/api/v3/getClients'. New URL is below but the output hasn't changed either
my $json = `curl 'https://api.ssllabs.com/api/v3/getClients'`;
foreach my $line ( split /\n/, `$ossl`) {
my @fields = split /\s+/, $line;