Я пытаюсь проверить цепочку для flo2cash.com, openssl выдает мне это:
openssl s_client -showcerts -connect flo2cash.com:443
CONNECTED(00000003) depth=3 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority depth=1 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Domain Validation Secure Server CA depth=0 OU = Domain Control Validated, OU = Hosted by FreeParking Ltd, OU = COMODO SSL, CN = flo2cash.com
Указывает, что корнем является «AddTrust External CA Root». И Chrome, и Firefox показывают только 3 уровня в цепочке с сертификатом, корнем которого является «COMODO RSA Certification Authority».
Если я проверю последний сертификат в цепочке, то получу следующее:
subject= /C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority issuer= /C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root notBefore=May 30 10:48:38 2000 GMT notAfter=May 30 10:48:38 2020 GMT
Этот сертификат действительно старый.
Вот что находится в пакетах CA, которые я могу найти на своем компьютере (Fedora 25, пропатченная до последней версии), а также в браузерах:
subject= /C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority issuer= /C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority notBefore=Jan 19 00:00:00 2010 GMT notAfter=Jan 18 23:59:59 2038 GMT
Этот старый сертификат, должно быть, откуда-то взялся.
решение1
На моем ноутбуке Mint естьстарыйсертификат:
$ openssl x509 -noout -subject -issuer -in /usr/share/ca-certificates/mozilla/COMODO_RSA_Certification_Authority.crt
subject= /C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
issuer= /C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
openssl s_client
возвращает наивысший сертификат CA, COMODO RSA Certification Authority
подписанный указанным выше корнем:
$ openssl s_client -connect flo2cash.com:443
CONNECTED(00000003)
depth=3 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
verify return:1
depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority
verify return:1
depth=1 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Domain Validation Secure Server CA
verify return:1
depth=0 OU = Domain Control Validated, OU = Hosted by FreeParking Ltd, OU = COMODO SSL, CN = flo2cash.com
verify return:1
---
Отредактируйте /etc/ca-certificates.conf
и отмените выбор строки, содержащей указанный выше корневой сертификат CA ( mozilla/AddTrust_External_Root.crt
):
#
# line begins with # is comment.
# line begins with ! is certificate filename to be deselected.
#
mozilla/ACCVRAIZ1.crt
mozilla/ACEDICOM_Root.crt
!mozilla/AC_Raíz_Certicámara_S.A..crt
mozilla/Actalis_Authentication_Root_CA.crt
!mozilla/AddTrust_External_Root.crt
mozilla/AddTrust_Low-Value_Services_Root.crt
mozilla/AddTrust_Public_Services_Root.crt
mozilla/AddTrust_Qualified_Certificates_Root.crt
Запустите update-ca-certificates
, чтобы восстановить кэш.
После этого вы получите ту же цепочку, что и ваш браузер:
$ openssl s_client -connect flo2cash.com:443 -showcerts
CONNECTED(00000003)
depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Certification Authority
verify return:1
depth=1 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO RSA Domain Validation Secure Server CA
verify return:1
depth=0 OU = Domain Control Validated, OU = Hosted by FreeParking Ltd, OU = COMODO SSL, CN = flo2cash.com
verify return:1
---
Путь, который клиент выстраивает от сертификата конечного объекта до корневого сертификата CA, зависит от логики, запрограммированной в клиенте. Это не определено в спецификациях, поэтому подлежит интерпретации разработчиков каждого конкретного клиента.
При включении обоих корневых сертификатов CA в OpenSSL он выбирает первый показанный путь. Ваши браузеры выбрали другой, потому что они могут.
решение2
Какой старый сертификат?мостсертификат для Comodo RSA Certification Authority из AddTrust Внешний CA Root отправляется сервером.кореньсертификат для AddTrust Внешнийдолжен поступать из хранилища доверия вашей системы; он не отправляется сервером, и даже если бы это было так, OpenSSL правильно отбрасывает любой root, полученный с сервера, и доверяет только root, который находит в локальном хранилище доверия. Я не использую Fedora, но мой CentOS имеет его в /etc/pki/tls/certs/ca-bundle.crt
установленном from ca-certificates
(и, предположительно, RHEL то же самое).
Да, этот корень AddTrust — один из старых корневых центров CA, все еще активных. Хотя сертификат моста не былBefore 2000-05-30 10:48:38 идеально (и нереалистично) согласован со своим родителем, я уверен, что это было сделано задним числом; он подписан с помощью SHA384, но FIPS180-2 не был опубликован до 2002 года, а тем более не был широко внедрен. (Например, Windows XP не реализовывала сертификаты, подписанные с помощью SHA2, до SP3 в 2008 году.)
Собственный корень Comodo RSAне до 2010-01-19 00:00:00, но вполне может быть и задним числом, или же он некоторое время лежал на полке; он также подписан с помощью SHA384, но AIR ни один из публичных центров сертификации не начал выпускать SHA2 и цепочки до начала 2014 года (вторая попытка NIST крайнего срока), и большинство не до конца 2015 года, когда CABforum и некоторые основные браузеры начали жаловаться на SHA1. Я не помню, где Comodo оказался в этом спектре, но единственное хранилище доверия, которое я могу легко отследить с течением времени, Oracle-ранее-Sun Java, не добавлялось comodorsaca
до 8u51 в 2015-06. (Он имел addtrustexternalca
заднююпо меньшей мерепо 6u7 в 2008-06 гг.; данных за более ранний период у меня нет.)
По крайней мере одна часть веб-сайта Comodoпо-прежнему отображает цепочку доверия через сертификат моста к AddTrust как правильную, хотя срок ее действия истекает менее чем через 3 года.