По-прежнему в ходу RC4/3DES/TLS 1.0 и сертификаты на сотни лет. Анализ сотен миллионов SSL-рукопожатий


Если посмотреть на набор данных с 350 млн SSL-соединений, сразу возникает несколько вопросов:

  • кто выдал эти сертификаты
  • какая там криптография
  • каково их время жизни

Let's Encrypt выдал сертификаты почти для 30% доменов


Наш сервер (leebutterman.com) автоматически получает сертификаты Let's Encrypt — это самый популярный центр сертификации в интернете! Свыше 47 миллионов доменов защищены сертификатами Let's Encrypt, то есть почти 30% нашей выборки.

352,3 млн доменов смогли установить 158,7 млн соединений с указанием сертификата и эмитента. Первая десятка:

47,2 млн Let's Encrypt
28,9 млн DigiCert
13,8 млн Comodo
10,1 млн Google
7,2 млн  GoDaddy
7,1 млн  Sectigo
7,0 млн  Cpanel
6,1 млн  GlobalSign
3,4 млн  CloudFlare0
2,5 млн  Amazon
2,1 млн  (анонимная самоподпись)
1,1 млн  Plesk

Более 100 тыс. раз встречается такой совокупный issuer_dn s:
193590544 null 47237383 C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3 13367305 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 High Assurance Server CA 13092572 C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Domain Validation Secure Server CA 10081610 C=US, O=Google Trust Services, CN=Google Internet Authority G3 7048258 C=US, ST=TX, L=Houston, O=cPanel, Inc., CN=cPanel, Inc. Certification Authority 6772537 C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA 4946970 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=RapidSSL RSA CA 2018 3926261 C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO ECC Domain Validation Secure Server CA 2 3727005 C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certs.godaddy.com/repository/, CN=Go Daddy Secure Certificate Authority — G2 3483129 C=US, ST=Arizona, L=Scottsdale, O=Starfield Technologies, Inc., OU=http://certs.starfieldtech.com/repository/, CN=Starfield Secure Certificate Authority — G2 3404488 C=US, ST=CA, L=San Francisco, O=CloudFlare, Inc., CN=CloudFlare Inc ECC CA-2 2523036 C=US, O=Amazon, OU=Server CA 1B, CN=Amazon 2498667 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=Thawte TLS RSA CA G1 2431104 C=BE, O=GlobalSign nv-sa, CN=GlobalSign Domain Validation CA — SHA256 — G2 2422131 C=BE, O=GlobalSign nv-sa, CN=AlphaSSL CA — SHA256 — G2 2310140 C=US, O=DigiCert Inc, CN=DigiCert SHA2 Secure Server CA 1791127 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=Encryption Everywhere DV TLS CA — G1 1298054 C=GB, ST=Greater Manchester, L=Salford, O=COMODO CA Limited, CN=COMODO RSA Organization Validation Secure Server CA 1019337 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=GeoTrust RSA CA 2018 853367 C=US, O=DigiCert Inc, CN=DigiCert ECC Secure Server CA 842994 C=US, ST=Someprovince, L=Sometown, O=none, OU=none, CN=localhost, emailAddress=webmaster@localhost 828175 C=CH, L=Schaffhausen, O=Plesk, CN=Plesk, emailAddress=info@plesk.com 800601 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=Thawte RSA CA 2018 736336 C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA — SHA256 — G2 679798 C=FR, ST=Paris, L=Paris, O=Gandi, CN=Gandi Standard SSL CA 2 648187 OU=Default Web server, CN=www.example.com, emailAddress=postmaster@example.com 572342 C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=server.ab-archive.net, emailAddress=root@server.ab-archive.net 546456 C=DE, ST=Bayern, L=Muenchen, O=ispgateway, CN=webserver.ispgateway.de, emailAddress=hostmaster@ispgateway.de 501592 C=US, ST=Virginia, L=Herndon, O=Parallels, OU=Parallels Panel, CN=Parallels Panel, emailAddress=info@parallels.com 501093 C=US, ST=California, O=DreamHost, CN=sni.dreamhost.com 480468 C=CN, O=TrustAsia Technologies, Inc., OU=Domain Validated SSL, CN=TrustAsia TLS RSA CA 468190 C=BE, O=GlobalSign nv-sa, CN=GlobalSign CloudSSL CA — SHA256 — G3 464242 C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=localhost.localdomain, emailAddress=root@localhost.localdomain 455067 C=PL, O=home.pl SA, CN=Certyfikat SSL 445550 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=Encryption Everywhere DV TLS CA — G2 417062 C=PL, O=Unizeto Technologies SA, OU=Certum Certification Authority, CN=Certum Domain Validation CA SHA2 416966 C=JP, ST=Tokyo, L=Chiyoda-ku, O=Gehirn Inc., CN=Gehirn Managed Certification Authority — RSA DV 384480 C=IT, ST=Bergamo, L=Ponte San Pietro, O=Actalis SpA/03358520967, CN=Actalis Organization Validated Server CA G2 368708 C=JP, ST=OSAKA, L=OSAKA, O=SecureCore, CN=SecureCore RSA DV CA 353716 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=RapidSSL TLS RSA CA G1 343034 C=US, O=DigiCert Inc, CN=DigiCert Global CA G2 278170 C=PL, O=nazwa.pl sp. z oo, OU=http://nazwa.pl, CN=nazwaSSL 267784 C=US, ST=Illinois, L=Chicago, O=Trustwave Holdings, Inc., CN=Trustwave Organization Validation SHA256 CA, Level 1, emailAddress=ca@trustwave.com 251987 C=IT, ST=Bergamo, L=Ponte San Pietro, O=Actalis SpA/03358520967, CN=Actalis Domain Validation Server CA G2 244273 C=JP, O=Cybertrust Japan Co., Ltd., CN=Cybertrust Japan Public CA G3 236608 C=US, ST=Washington, L=Seattle, O=Odin, OU=Plesk, CN=Plesk, emailAddress=info@plesk.com 228615 C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Organization Validation Secure Server CA 202529 C=US, O=DigiCert Inc, OU=www.digicert.com, CN=GeoTrust TLS RSA CA G1 184627 C=US, ST=MI, L=Ann Arbor, O=Internet2, OU=InCommon, CN=InCommon RSA Server CA 184276 C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=© 2012 Entrust, Inc. — for authorized use only, CN=Entrust Certification Authority — L1K 177315 C=NL, ST=Noord-Holland, L=Amsterdam, O=TERENA, CN=TERENA SSL CA 3 171469 C=LV, L=Riga, O=GoGetSSL, CN=GoGetSSL RSA DV CA 168933 C=US, O=GeoTrust Inc., CN=RapidSSL SHA256 CA 150830 C=RU, ST=Moscow, L=Moscow, O=Odin, OU=Odin Automation, CN=odin.com, emailAddress=webmaster@odin.com 122399 C=JP, O=Japan Registry Services Co., Ltd., CN=JPRS Domain Validation Authority — G2 118029 C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo ECC Domain Validation Secure Server CA 109435 C=GB, ST=Berkshire, L=Newbury, O=My Company Ltd 108309 C=US, ST=Washington, L=Redmond, O=Microsoft Corporation, OU=Microsoft IT, CN=Microsoft IT TLS CA 2 108016 C=US, O=GeoTrust Inc., CN=RapidSSL SHA256 CA — G3 107719 C=--, ST=SomeState, L=SomeCity, O=SomeOrganization, OU=SomeOrganizationalUnit, CN=ns546485.ip-158-69-252.net, emailAddress=root@ns546485.ip-158-69-252.net 106164 C=US, ST=DE, L=Wilmington, O=Corporation Service Company, CN=Trusted Secure Certificate Authority DV 104634 CN=localhost

В схеме zgrab это .data.tls.server_certificates.certificate.parsed.issuer_dn, результаты можно воспроизвести с помощью zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_certificates.certificate.parsed.issuer_dn | sort | uniq -c zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_certificates.certificate.parsed.issuer_dn | sort | uniq -c zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_certificates.certificate.parsed.issuer_dn | sort | uniq -c

Срок действия сертификатов Let's Encrypt составляет три месяца, стимулируя регулярный цикл обновлений, но сегодня в интернете остаётся множество древних методов безопасности.

Почти три миллиона доменов с RC4 или 3DES



Из 160 млн соединений более 150 млн использовали эллиптические кривые, протокол Диффи — Хеллмана и AES. Следующим по популярности набором шифров стал RSA с RC4, а почти 1,8% соединений использовали RC4 или 3DES, и даже DES на шести доменах! (zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_hello.cipher_suite.name | sort | uniq -c zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_hello.cipher_suite.name | sort | uniq -c)

120457325	TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
16750820	TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
13808304	TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
2393679		TLS_RSA_WITH_RC4_128_SHA
1768423		TLS_RSA_WITH_AES_256_CBC_SHA
1653084		TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
1397638		TLS_RSA_WITH_AES_128_CBC_SHA
373383		TLS_ECDHE_RSA_WITH_RC4_128_SHA
157929		TLS_RSA_WITH_3DES_EDE_CBC_SHA
17663		TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
4041		TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
2794		TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
458		TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
205		TLS_RSA_WITH_RC4_128_MD5
115		TLS_DH_RSA_WITH_AES_128_CBC_SHA
28		неизвестный
6		TLS_RSA_WITH_DES_CBC_SHA
1		TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

Обратите внимание, что последний Chrome не может принять RC4, но принимает 3DES (спасибо, badssl.com!)

Более четырёх миллионов доменов с устаревшим TLS


По умолчанию пакет TLS в go не использует TLS 1.3 — кажется, что набор данных собирали с zgrab, который не использует TLS 1.3 (наверное, лучше обновить его к следующим запускам). Серверы большинства доменов использовали TLS 1.2, но более четырёх миллионов работают на TLS 1.0 (zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_hello.version.name | sort | uniq -c zcat 2019-08-01-ssl-*.gz | parallel --pipe jq -r .data.tls.server_hello.version.name | sort | uniq -c).

154500876 TLSv1.2
4263887   TLSv1.0
19352     TLSv1.1
1781      SSLv3

TLS 1.0 до сих пор разрешён в Chrome.

Сотни тысяч сертификатов доменов истекают после 2099 года


В соответствии с лучшими практиками от Let’s Encrypt, срок службы SSL-сертификатов должен быть 90 дней.

Но лучшие практики не запрещают альтернативные практики!


Фото Рика Голдвасера из Флагстаффа, Аризона, США [CC BY 2.0], via Wikimedia Commons

В дикой природе встречаются сертификаты с тысячелетним сроком жизни, как эти остистые сосны.

Тысячи сертификатов истекают после 3000 года


Более 3000 сертификатов не истекают в этом тысячелетии. Свыше 8000 сертификатов истекают после 2200 года. Более 200 000 сертификатов — после 2100 года (более 1,5 млн — только в 2040-х годах!)

Так, в одном 2117 году истекает срок действия более 100 000 сертификатов, а в 3017-м — более тысячи. Возможно, именно в 2017 году что-то внушало доверие к долгоживущим сертификатам?

Миллионы сертификатов уже истекли


У почти 1,6 млн доменов сертификат истёк недавно (в июле, месяце сканирования). У почти 3,7 млн доменов сертификат истёк в 2019 году. Свыше 9,6 млн доменов работают с сертификатом, срок действия которого вышел в 2010-е годы!

Сотни обслуживаемых сертификатов ещё не действительны


Более того, у более ста тысяч сертификатов срок действия истекает до начала срока их действия!

Исследуйте сами


Дайте знать, что вы думаете! Проанализируйте этот набор данных и поделитесь результатами!

Комментарии (28)


  1. urands
    09.09.2019 11:53

    Правильно я понимаю, летс энкрипт может расшифровать 30% https трафика в интернете?


    1. interprise
      09.09.2019 12:08

      Перевыпустив ваш сертификат, да. Справедливости ради, стоит сказать, что по сути тоже самое может сделать любая структура которая имеет корневой сертификат.


    1. ky0
      09.09.2019 12:54

      Нет, не может — приватный ключ не покидает сервер клиента. Перевыпустить сертификат и сделать затем mitm — да, может. Частично от этого может защитить HPKP и CAA-записи в DNS.


    1. Tufed
      09.09.2019 17:39
      +1

      Если во время генерации они сохраняли бы себе приватный ключ — то да, MITM осуществим с использованием оного. Однако в текущей ситуации даже при пере-выпуске сертификата MITM не осуществим до тех пор, пока ваш сайт не начнёт использовать новый сгенерированный сертификат. Корневой же сертификат используется для проверки «кто выдал», но никак не поможет в расшифровке траффика, зашифрованного уже выданным дочерним сертификатом. Поправьте те, кто знает спецификацию сертификации лучше меня.


      1. Tufed
        09.09.2019 18:20

        добавлю ссылку на эту статью, подробно рассказывающую как это работает.


    1. gotch
      09.09.2019 20:27

      Forward Secrecy для того и придумали, чтобы нет? Если в tls сессии был использован DH, то имея ее полный дамп и закрытый ключ сервера, расшифровать ее не получится.
      Возможно не-дилетанты в криптографии меня поправят.


      1. gotch
        09.09.2019 20:37

        Даже если ваш ключ сгенерирован сторонним сайтом, что иногда делают на шареных хостингах, где let's encrypt не работает из коробки.


  1. am-habr
    09.09.2019 12:07

    Имел возможность получить опыт настройки сертификата у letsencrypt. Всегда хочется по-быстрому настроить, особенно если доменов несколько, лень ведь читать простыни текста.
    Всё просто, скачал бота, поверил большей части настроек. Опа — сертификат готов, всё работает. Через время смотришь лог.

    • Сертификаты не хочет проверять, слишком много доменов за раз.
    • Слишком частые запросы делаете, мы вас забанили на пару дней.
    • Напортачил с правами, удалил сертификат, неотозвав — у вас много действующих сертификатов, теперь подождите ещё пару дней.
    • Домен не проходит валидацию — неправильно настроена папка .well-known/acme-challenge.
    • Для acme-challenge нужен порт 80, только 443 не пойдёт.
    • Обновил ядро, питон законил и ещё его нужно подкрутить.

    Чтобы настроить, нужно было прочитать все их простыни документации и форумы, общими знаниями не обошлось. После прочтения всё кажется логичным.
    Читаешь их форум и 100500 людей наступают на теже самые грабли.

    letsencrypt — очень хорошая и правильная инициатива.

    Но за бесплатно нужно хорошенько разобраться, как работают механизмы. Лучше всего ещё потестировать весь цикл: сертификаты нагенерировать, отозвать, снова сгенерировать, проверить все логи сервера.


    1. ky0
      09.09.2019 12:59

      Как обычно говорят в таких случаях на Тостере — «наймите админа» :)


      1. chupasaurus
        09.09.2019 14:57

        Мой ответ двухлетней давности всё ещё актуален и легко делается без docker compose. Сильно удивился, увидев ваш вариант с предложением выпускать сертификаты через certbot-auto (это инсталлятор certbot, если что).


    1. kemko
      10.09.2019 09:17
      +1

      Вы могли не ждать 3 месяца, а сначала оттестировать процесс получения и обновления сертификатов на тестовом эндпоинте, а затем уже переходить на боевой.


    1. m1kc
      10.09.2019 10:18
      +2

      Просто пользуйтесь тестовыми серверами во время начальной настройки, там лимиты во много раз выше: certbot --test-cert.


      1. am-habr
        10.09.2019 10:43

        Спасибо! Взял на заметку.


    1. 0xd34df00d
      10.09.2019 17:17

      О да, особенно по последнему пункту. Постоянно отваливающийся certbot уже почти заставил меня написать альтернативный клиент на чем-нибудь компилируемом.


    1. Revertis
      12.09.2019 23:00

      Лучше использовать acme.sh, и подтверждать через DNS.
      Не нужен ни питон, ни 80-й порт, ни .well-known.


  1. webviktor
    09.09.2019 12:22
    +1

    Интересно.
    А как можно получить сертификат от Летс хотя бы на 1,2,3 года?


    1. jaiprakash
      09.09.2019 12:46

      Вроде никак. Специально задумано чтобы настраивали автообновление.


    1. farcaller
      09.09.2019 13:37

      Прямо в статье же ссылка есть почему никак.


      1. webviktor
        09.09.2019 13:42

        И прямо под этой ссылкой текст:

        Но лучшие практики не запрещают альтернативные практики!


        Что явно указывает на то, что есть возможность сделать сертификат на больший срок.


        1. rogoz
          09.09.2019 14:18

          2,1 млн (анонимная самоподпись)
          Вот эта возможность.


        1. stork_teadfort
          09.09.2019 16:25

          Купите у DigiCert и т.п.


  1. sintech
    09.09.2019 19:29
    +1

    Интересно, много ли из 100-1000-летних сертификатов не самоподписанные? И кто их выдает?


  1. eStellar
    10.09.2019 10:05

    Если всё настроено хорошо и правильно, то всё работает. Exim + Debian + Cisco ipv6, как перешли, так уже второй год само, даже без вмешательств.

    Мне же достался криво настроенный Эксчендж, где обновляться не хотело ни в какую, внезапно, после полугода нормальной работы. Точнее обновилось, потом появилась ошибка — ждите, слишком много повторных запросов. Итогом была: возня в течении двух рабочих дней по 12 часов двух специалистов, простой внешней почты у всей организации всё это время, оплата из своего кармана работы второго специалиста и увольнение с испытательного срока. Купили Эксчендж, а на сертификате сэкономили. Заплатил бы столько-же денег из своих за платный сертификат, возможно работал бы дальше у них.


    1. tlv
      10.09.2019 13:17

      Так может не в letsencrypt или платности дело, а в том, что серитфикат пошли обновлять сразу перед/после его истечения? Почему с платным было бы по другому? Тот же letsencrypt рекомендует обновлять сертификат за месяц, и в этом случае у вас есть месяц на решение возможных проблем.


      1. eStellar
        10.09.2019 14:26

        Дело в том что он и обновился заранее. Но в итоге с новым сертификатом потребовалась работа полностью по ipv6 и обнаружилось это тогда когда старый истёк, а новый отказался работать. Разумеется, генерация нового сертификата ругалась что он уже выполнен. А по коду ошибок на форумах было несколько решений, которые надо было попробовать последовательно пока не выяснится в чём-же дело. У продавцов платных решений на этот счёт есть как минимум техподдержка и ответственность. В частности потеря времени на перебор и поиск решения заняла фатальное (для меня) время, в то время как правило о том что работать будет всё это только по ipv6 инициировала Letsencrypt. Возможно моему предшественнику приходили какие-то сообщения, но он о них умолчал или забыл/забил. А я ранее не сталкивался т.к. на прежнем месте всё по умолчанию было настроено через ipv6 и данная проблема не имела прецедента.


    1. Tufed
      10.09.2019 14:59

      С другой стороны может даже лучше что сразу увольнение, чем мучаться с таким отношением и влетететь позже но на более большой проблеме.


      1. eStellar
        10.09.2019 16:58

        В данном случае справедливо. Но только в организациях, где всё настроено не ванильно-красиво, по канонам, замечаешь массу подводных камней, которые идут в копилку опыта.


        1. Tufed
          11.09.2019 15:12

          Вопрос не про то как как оно настроено, а в отношении руководства к остановкам по задачам. Если образовалась проблема, то нужно определить по чьей вине. Ошибки админа или ошибки кривого софта — это разные вещи. За второе админ не отвечает, не он писал этот софт. Ошибки админа — тоже допускаю, но если ему не была выдана подробная инструкция «как это делать» — то какой смысл с него спрашивать правильное выполнение и увольнять за неправильное? В РФ часто забивают болт на инструкции и обучение сотрудника, но при этом требуют чтобы знал и умел, в противном случае угрозы увольнения.