Sploitus

Exploit for test-certs-site

kitploit · 2026-09-05

Exploit Code

MARKDOWN91 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-LETSENCRYPT-TEST-CERTS-SITE
# test-certs-site

## Введение

Этот специально созданный веб-сервер предназначен для размещения тестовых страниц, необходимых для выполнения Базовых требований форума CA/Browser. Они содержат следующее требование:

> УЦ ОБЯЗАН размещать тестовые веб-страницы, позволяющие поставщикам прикладного программного обеспечения тестировать своё программное обеспечение с сертификатами абонентов, которые образуют цепочку к каждому публично доверенному корневому сертификату. Как минимум, УЦ ОБЯЗАН размещать отдельные веб-страницы с использованием сертификатов абонентов, которые являются действительными, отозванными и просроченными.

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

Из Базовых требований TLS форума CA/Browser:

Хотя этот инструмент был создан для Let's Encrypt, он должен быть пригоден для использования другими УЦ, работающими по протоколу ACME.

## Запуск test-certs-site

Это автономная программа на Go.

root@kitploit:~
    
    
    go run main.go -config [путь/к/config.json]
    

Смотрите `config/config.go` для схемы конфигурации и `config/testdata/test.json` для примера допустимой конфигурации. Конфигурация для интеграционного теста генерируется во время выполнения программой `integration/configgen`.

## Локальное тестирование

Мы предоставляем файл `docker-compose.yml` для локального тестирования. Он автоматически развернёт Pebble, тестовый УЦ. Выполните:

root@kitploit:~
    
    
    docker compose up --build
    

Затем откройте один из тестовых сайтов.

Они доступны по адресам:

  * https://valid.localhost:5001/
  * https://revoked.localhost:5001/
  * https://expired.localhost:5001/



Эти URL могут работать сразу, но если они не разрешаются в вашей системе, вы можете заставить curl разрешать их:

root@kitploit:~
    
    
    curl -k --resolve revoked.localhost:5001:127.0.0.1 'https://revoked.localhost:5001/'
    

Если вы хотите получить доступ к сайтам из браузера, отредактируйте файл `/etc/hosts`, добавив адреса тестовых сертификатов.

root@kitploit:~
    
    
    127.0.0.1 valid.localhost revoked.localhost expired.localhost
    

## Предотвращение инцидентов

Это программное обеспечение было вдохновлено несколькими инцидентами, которые мы наблюдали у других УЦ, а также сложностью нашего существующего решения с использованием готовых инструментов.

Некоторые категории инцидентов, которые мы наблюдали, включают:

  * Некорректное истечение срока действия сертификатов для сайтов с действительными и отозванными сертификатами.
  * Обслуживание неотозванных сертификатов на демонстрационных сайтах с отозванными сертификатами.



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

## Вызовы ACME

В настоящее время test-certs-site поддерживает только метод проверки TLS-ALPN-01. Для выполнения этого вызова и обслуживания тестовых сайтов программа прослушивает настраиваемый порт, который должен быть открыт как TLS-порт, :443.

Обратите внимание, что в тестовой конфигурации по умолчанию прослушивается порт :5001, что соответствует порту проверки по умолчанию для Pebble.

## Хранение ключей и сертификатов

В настоящее время test-certs-site хранит все ключевые материалы в виде путей на диске. Для упрощения запуска cert-test-program в облачных или эфемерных средах мы планируем реализовать поддержку механизма сохранения ключей в системе управления секретами.

За исключением хранения ключей и сертификатов, эта программа не имеет состояния.

## Наблюдаемость

Существует настраиваемый отладочный слушатель, который предоставляет /debug/pprof и /metrics. Логи выводятся в формате JSON в stderr.