Dowiedz się, jak obsługiwać Signed Exchange (SXG) za pomocą narzędzia do pakietów internetowych.
Signed Exchange (SXG) to mechanizm dostarczania, który umożliwia uwierzytelnianie źródła zasobu niezależnie od sposobu jego dostarczenia.
Poniżej znajdziesz instrukcje konfigurowania Signed Exchange za pomocą narzędzia Web Packager. Instrukcje są zawarte zarówno w przypadku certyfikatów podpisanych samodzielnie, jak i certyfikatów CanSignHttpExchanges
.
Obsługa SXG z użyciem certyfikatu podpisanego samodzielnie
Używanie samodzielnie podpisanego certyfikatu do obsługi SXG jest używane głównie do celów demonstracyjnych i testowania. SXG podpisane samodzielnie wygenerują komunikaty o błędach w przeglądarce, gdy będą używane poza środowiskami testowymi, i nie powinny być wyświetlane robotom.
Wymagania wstępne
Aby wykonać te instrukcje, musisz mieć zainstalowane w środowisku programistycznym narzędzia openssl i Go.
Generowanie samodzielnie podpisanego certyfikatu
Z tej sekcji dowiesz się, jak wygenerować samopodpisane certyfikaty, które można używać z wymianami podpisanymi.
Instrukcje
Wygeneruj klucz prywatny.
openssl ecparam -out priv.key -name prime256v1 -genkey
Klucz prywatny zostanie zapisany jako plik o nazwie
priv.key
.Utwórz żądanie podpisania certyfikatu.
openssl req -new -sha256 -key priv.key -out cert.csr -subj '/O=Web Packager Demo/CN=example.com'
Żądanie podpisania certyfikatu to blok zakodowanego tekstu, który zawiera informacje potrzebne do złożenia prośby o certyfikat do urzędu certyfikacji (CA). Chociaż nie będziesz prosić urzędu certyfikacji o certyfikat, musisz utworzyć żądanie podpisania certyfikatu.
Powyższe polecenie tworzy żądanie podpisania certyfikatu dla organizacji o nazwie
Web Packager Demo
o wspólnej nazwieexample.com
. Wspólna nazwa powinna być pełną i jednoznaczną nazwą domeny witryny zawierającej treści, które chcesz spakować jako SXG.W produkcyjnej konfiguracji SXG jest to witryna, która należy do Ciebie. W środowisku testowym takim jak opisane w tych instrukcjach może to być dowolna witryna.
Utwórz certyfikat z rozszerzeniem
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")
To polecenie używa klucza prywatnego i żądania podpisania certyfikatu (CSR) utworzonego w kroku 1 i 2, aby utworzyć plik certyfikatu
cert.pem
. Flaga-extfile
łączy certyfikat z rozszerzeniem certyfikatuCanSignHttpExchanges
(1.3.6.1.4.1.11129.2.1.22
to identyfikator obiektu rozszerzeniaCanSignHttpExchanges
). Dodatkowo flaga-extfile
definiujeexample.com
jako alternatywną nazwę podmiotu.Jeśli chcesz sprawdzić zawartość pliku
cert.pem
, możesz to zrobić za pomocą tego polecenia:openssl x509 -in cert.pem -noout -text
To już koniec tworzenia kluczy prywatnych i certyfikatów. W następnej sekcji będą potrzebne pliki
priv.key
icert.pem
.
Konfigurowanie serwera Web Packager na potrzeby testowania
Wymagania wstępne
Zainstaluj program pakietu internetowego.
git clone https://github.com/google/webpackager.git
Kompilacja
webpkgserver
.cd webpackager/cmd/webpkgserver go build .
webpkgserver
to konkretny plik binarny w projekcie Web Packager.Sprawdź, czy aplikacja
webpkgserver
została prawidłowo zainstalowana../webpkgserver --help
To polecenie powinno zwrócić informacje o użyciu funkcji
webpkgserver
. Jeśli to nie zadziała, pierwszym krokiem w rozwiązywaniu problemu powinno być sprawdzenie, czy zmienna GOPATH jest prawidłowo skonfigurowana.
Instrukcje
Przejdź do katalogu
webpkgserver
(być może jesteś już w tym katalogu).cd /path/to/cmd/webpkgserver
Utwórz plik
webpkgsever.toml
, kopiując przykład.cp ./webpkgserver.example.toml ./webpkgserver.toml
Ten plik zawiera opcje konfiguracji
webpkgserver
.Otwórz plik
webpkgserver.toml
w wybranym edytorze i wprowadź te zmiany:- Zmień linię
#AllowTestCert = false
naAllowTestCert = true
. - Zmień wiersz
PEMFile = 'path/to/your.pem'
, aby odzwierciedlał ścieżkę do utworzonego certyfikatu PEM (cert.pem
). Nie zmieniaj wiersza zawierającegoTLS.PEMFile
– to inna opcja konfiguracji. - Zmień wiersz
KeyFile = 'priv.key'
, by odzwierciedlał ścieżkę utworzonego przez Ciebie klucza prywatnego (priv.key
). Nie zmieniaj wiersza zawierającegoTLS.KeyFile
– to inna opcja konfiguracji. - Zmień linię
#CertURLBase = '/webpkg/cert'
naCertURLBase = 'data:'
.CertURLBase
wskazuje lokalizację udostępniania certyfikatu SXG. Te informacje służą do ustawienia parametrucert-url
w nagłówku SXG (Signature
). W środowiskach produkcyjnychCertURLBase
jest używany w ten sposób:CertURLBase = 'https://mysite.com/'
. Jednak na potrzeby testowania lokalnego można użyć elementuCertURLBase = 'data:'
, aby polecić elementowiwebpkgserver
użycie adresu URL danych w celu umieszczenia certyfikatu w polucert-url
. W przypadku testów lokalnych jest to najwygodniejszy sposób udostępniania certyfikatu SXG. - Zmień wiersz
Domain = 'example.org'
, aby odzwierciedlał domenę, dla której został utworzony certyfikat. Jeśli instrukcje w tym artykule zostały wykonane dokładnie, wartość ta powinna być równaexample.com
.webpkgserver
będzie pobierać treści tylko z domeny wskazanej przezwebpkgserver.toml
. Jeśli spróbujesz pobrać strony z innej domeny bez aktualizowania plikuwebpkgserver.toml
, w dziennikachwebpkgserver
pojawi się komunikat o błędzieURL doesn't match the fetch targets
.
Opcjonalny
Jeśli chcesz włączyć lub wyłączyć wstępne pobieranie zasobów podrzędnych, możesz użyć tych opcji konfiguracji
webpkgserver.toml
:Aby dodać dyrektywy wstawiania
webpkgserver
do wstępnego wczytywania arkusza stylów i zasobów podrzędnych skryptu jako SXG, zmień wiersz#PreloadCSS = false
naPreloadCSS = true
. Dodatkowo zmień wiersz#PreloadJS = false
naPreloadJS = true
.Zamiast tej opcji konfiguracji możesz ręcznie dodać nagłówki
Link: rel="preload"
i tagi<link rel="preload">
do kodu HTML strony.Domyślnie
webpkgserver
zastępuje istniejące tagi<link rel="preload">
równoważnymi tagami<link>
, które są potrzebne do pobierania tych treści jako SXG. W tym celuwebpkgserver
ustawia dyrektywyallowed-alt-sxg
iheader-integrity
odpowiednio do potrzeb. Autorzy kodu HTML nie muszą dodawać ich ręcznie. Aby zignorować to zachowanie i zachować istniejące wstępnie załadowane pliki, które nie są w formacie SXG, zmień wartość parametru#KeepNonSXGPreloads (default = false)
naKeepNonSXGPreloads = true
. Pamiętaj, że włączenie tej opcji może spowodować, że SXG nie będzie kwalifikować się do umieszczenia w pamięci podręcznej Google SXG zgodnie z tymi wymaganiami.
- Zmień linię
Uruchom
webpkgserver
../webpkgserver
Jeśli serwer został uruchomiony, powinieneś zobaczyć te komunikaty w dzienniku:
shell Listening at 127.0.0.1:8080 Successfully retrieved valid OCSP. Writing to cache in /private/tmp/webpkg
Komunikaty dziennika mogą wyglądać nieco inaczej. W szczególności katalog, którego
webpkgserver
używa do przechowywania w pamięci podręcznej certyfikatów, różni się w zależności od systemu operacyjnego.Jeśli nie widzisz tych komunikatów, pierwszym krokiem rozwiązywania problemów jest ponowne sprawdzenie
webpkgserver.toml
.Jeśli zaktualizujesz
webpkgserver.toml
, musisz ponownie uruchomićwebpkgserver
.Uruchom Chrome za pomocą tego polecenia:
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`
To polecenie instruuje Chrome, aby zignorował błędy certyfikatu związane z
cert.pem
. Umożliwia to testowanie SXG za pomocą certyfikatu testowego. Jeśli Chrome zostanie uruchomiony bez tego polecenia, podczas sprawdzania SXG w Narzędziach deweloperskich pojawi się błądCertificate verification error: ERR_CERT_INVALID
.Uwaga:
Może być konieczne dostosowanie tego polecenia, aby odzwierciedlało lokalizację Chrome na komputerze oraz lokalizację
cert.pem
. Jeśli wszystko się uda, pod paskiem adresu powinno pojawić się ostrzeżenie. Ostrzeżenie powinno wyglądać mniej więcej tak:You are using an unsupported command-line flag: --ignore-certificate-errors-spki-list=9uxADcgc6/ho0mJLRMBcOjfBaN21k0sOInoMchr9CMY=.
Jeśli ostrzeżenie nie zawiera ciągu haszowania, nieprawidłowo wskazano lokalizację certyfikatu SXG.
Otwórz kartę Sieć w Narzędziach deweloperskich, a następnie otwórz adres URL
http://localhost:8080/priv/doc/https://example.com
.Spowoduje to wysłanie do instancji
webpackager
uruchomionej pod adresemhttp://localhost:8080
żądania SXG zawierającego zawartośćhttps://example.com
./priv/doc/
to domyślny punkt końcowy interfejsu API używany przezwebpackager
.Na karcie Sieć znajdziesz te zasoby:
- Zasób typu
signed-exchange
. To jest SXG. - Zasób typu
cert-chain+cbor
. To jest certyfikat SXG. Certyfikaty SXG muszą mieć formatapplication/cert-chain+cbor
. - Zasób typu
document
. To są treści dostarczone za pomocą SXG.
Jeśli nie widzisz tych zasobów, wyczyść pamięć podręczną przeglądarki, a następnie przeładuj
http://localhost:8080/priv/doc/https://example.com
.Aby wyświetlić więcej informacji o podpisanym wymianie i jej podpisie, kliknij kartę Podgląd.
- Zasób typu
Udostępnianie podpisanej wymiany za pomocą certyfikatu CanSignHttpExchanges
Z instrukcji w tej sekcji dowiesz się, jak wyświetlać pliki SXG przy użyciu certyfikatu CanSignHttpExchanges
. Użycie w środowisku produkcyjnym SXG wymaga certyfikatu CanSignHttpExchanges
.
Aby skrócić te instrukcje, zakładamy, że rozumiesz pojęcia omówione w sekcji Konfigurowanie Signed Exchange za pomocą samodzielnie podpisanego certyfikatu.
Wymagania wstępne
Masz certyfikat
CanSignHttpExchanges
. Na tej stronie znajdziesz listę urzędów certyfikacji, które oferują ten typ certyfikatu.Jeśli nie masz certyfikatu, możesz skonfigurować serwer webpkgserver tak, aby automatycznie pobierał certyfikaty z urzędu certyfikacji. Możesz postępować zgodnie z instrukcjami dotyczącymi tego, co należy umieścić w sekcji
webpkgserver.toml
, podanymi na tej stronie.Chociaż nie jest to wymagane, zdecydowanie zalecamy uruchamianie
webpkgserver
za serwerem brzegowym. Jeśli nie używasz serwera brzegowego, musisz skonfigurować opcjeTLS.PEMFile
iTLS.KeyFile
wwebpkgserver.toml
. Domyślniewebpkgserver
działa przez HTTP. Aby jednak przeglądarka uznała certyfikaty SXG za ważne, muszą one być udostępniane przez protokół HTTPS. Jeśli skonfigurujeszTLS.PEMFile
iTLS.KeyFile
,webpkgserver
będzie używać HTTPS i tym samym udostępniać certyfikat SXG bezpośrednio w przeglądarce.
Instrukcje
Utwórz plik PEM, łącząc certyfikat SXG witryny z certyfikatem CA witryny. Więcej instrukcji znajdziesz tutaj.
PEM to format pliku powszechnie używany jako „kontener” do przechowywania wielu certyfikatów.
Utwórz nowy plik
webpkgsever.toml
, kopiując przykład.cp ./webpkgserver.example.toml ./webpkgserver.toml
Otwórz
webpkgserver.toml
w wybranym edytorze i wprowadź te zmiany:- Zmień wiersz
PEMFile = cert.pem
, aby odzwierciedlał lokalizację pliku PEM zawierającego pełny łańcuch certyfikatów. - Zmień wiersz
KeyFile = 'priv.key'
, aby odpowiadał lokalizacji klucza prywatnego odpowiadającego plikowi PEM. - Zmień wiersz
Domain = 'example.org'
, aby pasował do Twojej witryny. - (Opcjonalnie) Aby usługa
webpkgserver
automatycznie odnawiała certyfikat SXG co 90 dni (45 dni w przypadku Google), skonfiguruj opcje w sekcji[SXG.ACME]
w narzędziuwebpkgserver.toml
. Ta opcja dotyczy tylko witryn z ustawionym kontem DigiCert lub Google ACME.
- Zmień wiersz
Skonfiguruj serwer brzegowy tak, aby przekierowywał ruch do instancji
webpkgserver
.webpkgserver
obsługuje 2 główne typy żądań: żądania SXG (które są obsługiwane przez punkt końcowy/priv/doc/
) i żądania certyfikatu SXG (które są obsługiwane przez punkt końcowy/webpkg/cert/
). Reguły przekształcania adresów URL w przypadku poszczególnych typów żądań różnią się nieznacznie. Więcej informacji znajdziesz w artykule Uruchamianie usługi na serwerze frontendu.Uwaga:
Domyślnie
webpkgserver
udostępnia certyfikat SXG pod adresem/webpkg/cert/$CERT_HASH
, np./webpkg/cert/-0QmE0gvoedn92gtwI3s7On9zPevJGm5pn2RYhpZxgY
. Aby wygenerować$CERT_HASH
, uruchom to polecenie:shell openssl base64 -in cert.pem -d | openssl dgst -sha256 -binary | base64 | tr /+ _- | tr -d =