Я использую следующую команду, чтобы показать всю цепочку сертификатов:

openssl s_client \
  -servername myServer.com \
  -connect myServer.com:443 \
  -prexit \
  -showcerts

Он работает правильно, но не показывает сертификат, принадлежащий ЦС (хэш между ----- BEGIN CERTIFICATE ----- и ----- BEGIN CERTIFICATE -----). Выступают те, которые принадлежат листу и промежуточному CA. Можете ли вы предложить мне, как получить Pem?

Мне интересен Балтиморский CyberTrust Root.

Спасибо.

1 ответ1

1

s_client -showcerts показывает все сертификаты, которые отправляет сервер ; это может опустить корневой сертификат и часто делает, в зависимости от программного обеспечения сервера и / или конфигурации. Смотрите rfc5246

certificate_list

  This is a sequence (chain) of certificates.  The sender's
  certificate MUST come first in the list.  Each following
  certificate MUST directly certify the one preceding it.  Because
  certificate validation requires that root keys be distributed
  independently, the self-signed certificate that specifies the root
  certificate authority MAY be omitted from the chain, under the
  assumption that the remote end must already possess it in order to
  validate it in any case.

слегка расслаблен rfc8446

... The sender's certificate MUST come in the first
CertificateEntry in the list.  Each following certificate SHOULD
directly certify the one immediately preceding it.  Because
certificate validation requires that trust anchors be distributed
independently, a certificate that specifies a trust anchor MAY be
omitted from the chain, provided that supported peers are known to
possess any omitted certificates.

Таким образом, обычно у клиента SSL-now-TLS уже должно быть хранилище доверенных сертификатов, содержащее корневые сертификаты (или, возможно, другие привязки), которые будут использоваться. Код OpenSSL будет использовать "файл CA" и / или "каталог CA", если он указан, включая системный каталог по умолчанию, если вы не укажете иное (что вы не указали), но OpenSSL upstream не предоставляет такие сертификаты. Во многих сборках или пакетах, например, во всех дистрибутивах Unix, которые я использовал, предусмотрены пакеты ca-certs или аналогичные, и конфигурируется openssl для их использования (также настраиваются другие программы, такие как Firefox / NSS и Java, для использования тех же сертификатов). Проект curl публикует порт доверенного хранилища Mozilla / Firefox в формате PEM / OpenSSL, который я использую, и в него входит "Балтимор CyberTrust Root". Мои системы Windows и Firefox (ы) также имеют его и могут экспортировать PEM. Обычно вы выбираете корневой сертификат из склада доверенных сертификатов, используя имя эмитента в подчиненном сертификате, здесь промежуточный сертификат CA и / или AuthorityKeyIdentifier.

Формат X.509/PKIX поддерживает поле расширения caIssuer в AuthorityInformationAccess, также известное как AIA, которое дает URL-адрес, на котором CA обещает обеспечить загрузку родительского сертификата. До недавнего времени AIA/caIssuer предоставлялся очень редко, но в настоящее время он стал более распространенным (CABforum делает это «должен»); Я не знаю конкретно о CyberTrust (который больше не Балтимор, а теперь фактически Digicert).

Выберите последний отправленный сертификат, который, как вы говорите, является вторым, путем вырезания и вставки или что-то вроде openssl s_client -showcerts ... | awk '/-----BEGIN CERT/{x++} x==2' >file затем openssl x509 -text -noout <file и найти расширение AuthorityInformationAccess.

Обратите внимание, что это не совсем безопасно; если ваше соединение было перехвачено, злоумышленник может отправить вам поддельный сертификат с поддельным caIssuer, который, когда вы используете его, получает поддельный корень. Чтобы предотвратить это, вам необходимо проверить сертификат промежуточного ЦС с помощью корневого ключа, но для этого у вас должен быть рут, и поэтому нет причин его получать.

Если у вас еще нет рута в хранилище доверенных сертификатов, а промежуточный продукт не дает вам caIssuer, вам нужно выполнить поиск, но это проще, поскольку "Прозрачность сертификатов" стала популярной; теперь вместо того, чтобы Google (или DDG и т. д.) давал вам несколько веб-сайтов, на которые вы должны смотреть и которые использовали человеческое мышление, вам нужно только взглянуть на один или несколько курируемых публичных журналов. Мне нравится https://crt.sh как внешний интерфейс (есть и другие), и он мгновенно находит https://crt.sh/?id=76 и предоставляет ссылку для скачивания (посмотрите вниз в левом столбце).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .