Узнайте, как обслуживать подписанные обмены (SXG) с помощью Web Packager.
Подписанный обмен (SXG) — это механизм доставки, который позволяет аутентифицировать происхождение ресурса независимо от того, как он был доставлен. Следующие инструкции объясняют, как настроить подписанные обмены с помощью Web Packager . Инструкции включены как для самозаверяющих сертификатов, так и для сертификатов CanSignHttpExchanges
.
Обслуживание SXG с использованием самозаверяющего сертификата
Использование самозаверяющего сертификата для обслуживания SXG в основном используется в целях демонстрации и тестирования. SXG, подписанные самозаверяющим сертификатом, будут генерировать сообщения об ошибках в браузере при использовании вне сред тестирования и не должны передаваться сканерам.
Предварительные условия
Чтобы следовать этим инструкциям, вам необходимо, чтобы в вашей среде разработки были установлены openssl и Go .
Создать самозаверяющий сертификат
В этом разделе объясняется, как создать самозаверяющий сертификат, который можно использовать с подписанными обменами.
Инструкции
Сгенерируйте закрытый ключ.
openssl ecparam -out priv.key -name prime256v1 -genkey
Закрытый ключ будет сохранен в виде файла с именем
priv.key
.Создайте запрос на подпись сертификата (CSR).
openssl req -new -sha256 -key priv.key -out cert.csr -subj '/O=Web Packager Demo/CN=example.com'
Запрос на подпись сертификата — это блок закодированного текста, который передает информацию, необходимую для запроса сертификата у центра сертификации (ЦС) . Хотя вы не будете запрашивать сертификат у центра сертификации, создать запрос на подпись сертификата все равно необходимо.
Приведенная выше команда создает запрос на подпись сертификата для организации с именем
Web Packager Demo
с общим именемexample.com
. Общее имя должно представлять собой полное доменное имя сайта, содержащего контент, который вы хотите упаковать как SXG.В производственной настройке SXG это будет принадлежащий вам сайт. Однако в среде тестирования, подобной той, которая описана в этих инструкциях, это может быть любой сайт.
Создайте сертификат с расширением
CanSignHttpExchanges
.openssl x509 -req -days 90 -in cert.csr -signkey priv.key -out cert.pem -extfile <(echo -e "1.3.6.1.4.1.11129.2.1.22 = ASN1:NULL\nsubjectAltName=DNS:example.com")
Эта команда использует закрытый ключ и CSR, созданный на шагах 1 и 2, для создания файла сертификата
cert.pem
. Флаг-extfile
связывает сертификат с расширением сертификатаCanSignHttpExchanges
(1.3.6.1.4.1.11129.2.1.22
— это идентификатор объекта для расширенияCanSignHttpExchanges
). Кроме того, флаг-extfile
также определяетexample.com
как альтернативное имя субъекта .Если вам интересно содержимое
cert.pem
, вы можете просмотреть его с помощью следующей команды:openssl x509 -in cert.pem -noout -text
Вы закончили создание закрытых ключей и сертификатов. В следующем разделе вам понадобятся файлы
priv.key
иcert.pem
.
Настройте сервер Web Packager для тестирования.
Предварительные условия
Установите веб-упаковщик .
git clone https://github.com/google/webpackager.git
Создайте
webpkgserver
.cd webpackager/cmd/webpkgserver go build .
webpkgserver
— это специальный двоичный файл в проекте Web Packager.Убедитесь, что
webpkgserver
установлен правильно../webpkgserver --help
Эта команда должна возвращать информацию об использовании
webpkgserver
. Если это не сработает, первым шагом для устранения неполадок будет проверка правильности настройки GOPATH .
Инструкции
Перейдите в каталог
webpkgserver
(возможно, вы уже находитесь в этом каталоге).cd /path/to/cmd/webpkgserver
Создайте файл
webpkgsever.toml
, скопировав пример.cp ./webpkgserver.example.toml ./webpkgserver.toml
Этот файл содержит параметры конфигурации для
webpkgserver
.Откройте
webpkgserver.toml
в любом редакторе и внесите следующие изменения:- Измените строку
#AllowTestCert = false
наAllowTestCert = true
. - Измените строку
PEMFile = 'path/to/your.pem'
чтобы она отражала путь к созданному вами сертификату PEMcert.pem
. Не меняйте строку, в которой упоминаетсяTLS.PEMFile
— это другой вариант конфигурации. - Измените строку
KeyFile = 'priv.key'
чтобы она отражала путь к созданному вами закрытому ключуpriv.key
. Не меняйте строку, в которой упоминаетсяTLS.KeyFile
— это другой вариант конфигурации. - Измените строку
#CertURLBase = '/webpkg/cert'
наCertURLBase = 'data:'
.CertURLBase
указывает место обслуживания сертификата SXG. Эта информация используется для установки параметраcert-url
в заголовкеSignature
SXG. В производственных средахCertURLBase
используется следующим образом:CertURLBase = 'https://mysite.com/'
. Однако для локального тестирования можно использоватьCertURLBase = 'data:'
чтобы указатьwebpkgserver
использовать URL-адрес данных для встраивания сертификата в полеcert-url
. Для локального тестирования это наиболее удобный способ предоставления сертификата SXG. - Измените строку
Domain = 'example.org'
чтобы она отражала домен, для которого вы создали сертификат. Если вы дословно следовали инструкциям этой статьи, его следует изменить наexample.com
.webpkgserver
будет получать контент только из домена, указанного вwebpkgserver.toml
. Если вы попытаетесь получить страницы из другого домена без обновленияwebpkgserver.toml
, журналыwebpkgserver
покажутURL doesn't match the fetch targets
.
Необязательный
Если вы хотите включить или отключить предварительную загрузку подресурсов , актуальны следующие параметры конфигурации
webpkgserver.toml
:Чтобы иметь директивы вставки
webpkgserver
для предварительной загрузки подресурсов таблицы стилей и сценариев в виде SXG, измените строку#PreloadCSS = false
наPreloadCSS = true
. Кроме того, измените строку#PreloadJS = false
наPreloadJS = true
.В качестве альтернативы использованию этого параметра конфигурации вы можете вручную добавить заголовки
Link: rel="preload"
и теги<link rel="preload">
в HTML-код страницы.По умолчанию
webpkgserver
заменяет существующие теги<link rel="preload">
эквивалентными тегами<link>
, необходимыми для получения этого контента в формате SXG. При этомwebpkgserver
установит директивыallowed-alt-sxg
иheader-integrity
по мере необходимости — авторам HTML не нужно добавлять их вручную. Чтобы переопределить это поведение и сохранить существующие предварительные загрузки, отличные от SXG, измените#KeepNonSXGPreloads (default = false)
наKeepNonSXGPreloads = true
. Имейте в виду, что включение этой опции может сделать SXG неприемлемым для кэша Google SXG в соответствии с этими требованиями .
- Измените строку
Запустите
webpkgserver
../webpkgserver
Если сервер запустился успешно, вы должны увидеть следующие сообщения журнала:
shell Listening at 127.0.0.1:8080 Successfully retrieved valid OCSP. Writing to cache in /private/tmp/webpkg
Сообщения вашего журнала могут выглядеть немного иначе. В частности, каталог, который
webpkgserver
использует для кэширования сертификатов, зависит от операционной системы.Если вы не видите этих сообщений, первым делом следует дважды проверить
webpkgserver.toml
.Если вы обновляете
webpkgserver.toml
вам следует перезапуститьwebpkgserver
.Запустите Chrome с помощью следующей команды:
shell /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --user-data-dir=/tmp/udd \ --ignore-certificate-errors-spki-list=`openssl x509 -noout -pubkey -in cert.pem | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64`
Эта команда указывает Chrome игнорировать ошибки сертификата, связанные с
cert.pem
. Это позволяет тестировать SXG с использованием сертификата испытаний. Если Chrome запускается без этой команды, при проверке SXG в DevTools отобразится ошибкаCertificate verification error: ERR_CERT_INVALID
.Примечание:
Возможно, вам придется настроить эту команду, чтобы она отражала расположение Chrome на вашем компьютере, а также расположение
cert.pem
. Если вы все сделали правильно, под адресной строкой должно появиться предупреждение. Предупреждение должно быть примерно таким:You are using an unsupported command-line flag: --ignore-certificate-errors-spki-list=9uxADcgc6/ho0mJLRMBcOjfBaN21k0sOInoMchr9CMY=.
Если предупреждение не содержит хэш-строки, вы неправильно указали местоположение сертификата SXG.
Откройте вкладку « Сеть DevTools», затем перейдите по следующему URL-адресу:
http://localhost:8080/priv/doc/https://example.com
.Это делает запрос к экземпляру
webpackager
, работающему по адресуhttp://localhost:8080
для SXG, содержащего содержимоеhttps://example.com
./priv/doc/
— это конечная точка API по умолчанию, используемаяwebpackager
.На вкладке «Сеть» перечислены следующие ресурсы:
- Ресурс типа
signed-exchange
. Это SXG. - Ресурс типа
cert-chain+cbor
. Это сертификат SXG. Сертификаты SXG должны использовать форматapplication/cert-chain+cbor
. - Ресурс типа
document
. Это контент, который был доставлен через SXG.
Если вы не видите эти ресурсы, попробуйте очистить кеш браузера, а затем перезагрузить
http://localhost:8080/priv/doc/https://example.com
.Нажмите вкладку «Предварительный просмотр» , чтобы просмотреть дополнительную информацию о подписанном обмене и его подписи.
- Ресурс типа
Обслуживание подписанных обменов с использованием сертификата CanSignHttpExchanges
.
Инструкции в этом разделе объясняют, как обслуживать SXG с помощью сертификата CanSignHttpExchanges
. Для производственного использования SXG требуется сертификат CanSignHttpExchanges
.
Для краткости эти инструкции написаны с учетом того, что вы понимаете концепции, обсуждаемые в разделе «Настройка подписанных обменов с использованием самозаверяющего сертификата» .
Предварительные условия
У вас есть сертификат
CanSignHttpExchanges
. На этой странице перечислены центры сертификации, предлагающие этот тип сертификата.Если у вас нет сертификата, вы можете настроить свой веб-сервер на автоматическое получение сертификатов из вашего центра сертификации. Вы можете следовать инструкциям о том, что происходит в
webpkgserver.toml
на этой странице .Хотя это и не является обязательным требованием, настоятельно рекомендуется запускать
webpkgserver
на пограничном сервере. Если вы не используете пограничный сервер, вам необходимо настроить параметрыTLS.PEMFile
иTLS.KeyFile
вwebpkgserver.toml
. По умолчаниюwebpkgserver
работает через HTTP. Однако сертификаты SXG должны предоставляться через HTTPS, чтобы браузер считал их действительными. НастройкаTLS.PEMFile
иTLS.KeyFile
позволяетwebpkgserver
использовать HTTPS и, следовательно, передавать сертификат SXG непосредственно в браузер.
Инструкции
Создайте файл PEM, объединив сертификат SXG вашего сайта и сертификат CA вашего сайта. Дополнительные инструкции по этому поводу можно найти здесь .
PEM — это формат файла, который обычно используется в качестве «контейнера» для хранения нескольких сертификатов.
Создайте новый файл
webpkgsever.toml
, скопировав пример.cp ./webpkgserver.example.toml ./webpkgserver.toml
Откройте
webpkgserver.toml
в любом редакторе и внесите следующие изменения:- Измените строку
PEMFile = cert.pem
, чтобы она отражала расположение файла PEM, содержащего полную цепочку сертификатов. - Измените строку
KeyFile = 'priv.key'
чтобы отразить расположение закрытого ключа, соответствующего вашему файлу PEM. - Измените строку
Domain = 'example.org'
чтобы она отражала ваш сайт. - (Необязательно) Чтобы
webpkgserver
автоматически обновлял сертификат SXG каждые 90 дней (45 дней для Google), настройте параметры в разделе[SXG.ACME]
файлаwebpkgserver.toml
. Этот параметр применим только к сайтам с настроенной учетной записью DigiCert или Google ACME.
- Измените строку
Настройте свой пограничный сервер для пересылки трафика на экземпляр
webpkgserver
.Существует два основных типа запросов, обрабатываемых
webpkgserver
: запросы на SXG (которые обслуживаются конечной точкой/priv/doc/
) и запросы на сертификат SXG (которые обслуживаются конечной точкой/webpkg/cert/
). Правила перезаписи URL-адресов для каждого из этих типов запросов незначительно различаются. Дополнительные сведения см. в разделе Работа за интерфейсным пограничным сервером .Примечание:
По умолчанию
webpkgserver
обслуживает сертификат SXG по адресу/webpkg/cert/$CERT_HASH
— например,/webpkg/cert/-0QmE0gvoedn92gtwI3s7On9zPevJGm5pn2RYhpZxgY
. Чтобы сгенерировать$CERT_HASH
, выполните следующую команду:shell openssl base64 -in cert.pem -d | openssl dgst -sha256 -binary | base64 | tr /+ _- | tr -d =