Dowiedz się, jak wyświetlać strony w technologii Signed Exchange (SXG) za pomocą systemu zarządzania pakietami internetowymi.
Signed Exchange (SXG) to mechanizm dostarczania, który umożliwia uwierzytelnianie pochodzenia zasobu niezależnie od sposobu jego dostarczenia.
Z tych instrukcji dowiesz się, jak skonfigurować strony w technologii Signed Exchange za pomocą Web Packager. Zawiera on instrukcje dotyczące zarówno certyfikatów podpisanych samodzielnie, jak i CanSignHttpExchanges.
Wyświetlanie SXG za pomocą certyfikatu podpisanego samodzielnie
Korzystanie z certyfikatu z podpisem własnym 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 (CSR). - 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, która ma wspólną nazwę- example.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. Jednak 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 certyfikatu- CanSignHttpExchanges(- 1.3.6.1.4.1.11129.2.1.22to identyfikator obiektu rozszerzenia- CanSignHttpExchanges). Dodatkowo flaga- -extfiledefiniuje- example.comjako nazwa alternatywna podmiotu.- Jeśli chcesz sprawdzić zawartość pliku - cert.pem, możesz to zrobić za pomocą tego polecenia:- openssl x509 -in cert.pem -noout -text- Utworzono klucze prywatne i certyfikaty. W następnej sekcji będziesz potrzebować plików - priv.keyi- cert.pem.
Konfigurowanie serwera Web Packager na potrzeby testowania
Wymagania wstępne
- Zainstaluj Web Packager. - git clone https://github.com/google/webpackager.git
- Kompilacja - webpkgserver.- cd webpackager/cmd/webpkgserver go build .- webpkgserverto konkretny plik binarny w projekcie Web Packager.
- Sprawdź, czy aplikacja - webpkgserverzostała prawidłowo zainstalowana.- ./webpkgserver --help- To polecenie powinno zwrócić informacje o użyciu - 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.tomlw dowolnym edytorze i wprowadź te zmiany:- Zmień linię #AllowTestCert = falsenaAllowTestCert = true.
- Zmień wiersz PEMFile = 'path/to/your.pem', aby odzwierciedlał ścieżkę do utworzonego przez Ciebie certyfikatu PEMcert.pem. Nie zmieniaj wiersza zawierającegoTLS.PEMFile– to inna opcja konfiguracji.
- Zmień linię KeyFile = 'priv.key', aby odzwierciedlała ścieżkę utworzonego przez Ciebie klucza prywatnegopriv.key. Nie zmieniaj wiersza z wartościąTLS.KeyFile– to inna opcja konfiguracji.
- Zmień linię #CertURLBase = '/webpkg/cert'naCertURLBase = 'data:'.CertURLBasewskazuje lokalizację wyświetlania certyfikatu SXG. Te informacje służą do ustawienia parametrucert-urlw nagłówku SXG (Signature). W środowiskach produkcyjnychCertURLBasejest używany w ten sposób:CertURLBase = 'https://mysite.com/'. Jednak na potrzeby testowania lokalnego można użyć elementuCertURLBase = 'data:', aby polecić elementowiwebpkgserveruż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.webpkgserverbędzie pobierać treści tylko z domeny wskazanej przezwebpkgserver.toml. Jeśli spróbujesz pobrać strony z innej domeny bez aktualizowania plikuwebpkgserver.toml, w logachwebpkgserverpojawi 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 - webpkgserverwstawiała dyrektywy dotyczące wstępnego wczytania szablonu i podzasobów skryptu jako SXG, zmień wiersz- #PreloadCSS = falsena- PreloadCSS = true. Dodatkowo zmień wiersz- #PreloadJS = falsena- PreloadJS = 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 tag - webpkgserverzastępuje istniejące tagi- <link rel="preload">równoważnymi tagami- <link>, które są potrzebne do pobierania tych treści w formacie SXG. W tym celu- webpkgserverustawia dyrektywy- allowed-alt-sxgi- header-integrityodpowiednio do potrzeb. Autorzy kodu HTML nie muszą dodawać ich ręcznie. Aby zignorować to zachowanie i zachować istniejące wstępne załadowania, które nie są związane z SXG, zmień wartość parametru- #KeepNonSXGPreloads (default = false)na- KeepNonSXGPreloads = 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ę 
- Rozpocznij - 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 logowania mogą wyglądać nieco inaczej. W szczególności katalog, którego - webpkgserveruż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łąd- Certificate verification error: ERR_CERT_INVALID.- Uwaga: - Może być konieczne dostosowanie tego polecenia, aby odzwierciedlało lokalizację Chrome na Twoim komputerze oraz lokalizację - cert.pem. Jeśli wszystko przebiegnie prawidłowo, pod paskiem adresu powinno pojawić się ostrzeżenie. Ostrzeżenie powinno wyglądać 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.- Wysyła żądanie do instancji - webpackageruruchomionej pod adresem- http://localhost:8080w celu pobrania SXG zawierającego zawartość- https://example.com.- /priv/doc/to domyślny punkt końcowy interfejsu API używany przez- webpackager. - 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 
Wyświetlanie wymian podpisanych za pomocą certyfikatu CanSignHttpExchanges
Z instrukcji w tej sekcji dowiesz się, jak wyświetlać pliki SXG przy użyciu certyfikatu CanSignHttpExchanges. Korzystanie z SXG w produkcji wymaga posiadania 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 - webpkgserverza pomocą serwera peryferyjnego. Jeśli nie używasz serwera brzegowego, musisz skonfigurować opcje- TLS.PEMFilei- TLS.KeyFilew- webpkgserver.toml. Domyślnie- webpkgserverdziała przez HTTP. Aby przeglądarka uznała certyfikaty SXG za ważne, muszą one być jednak udostępniane przez protokół HTTPS. Konfiguracja- TLS.PEMFilei- TLS.KeyFileumożliwia- webpkgserverkorzystanie z HTTPS, a tym samym wyświetlanie certyfikatu 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, który jest często 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 plik - webpkgserver.tomlw 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 certyfikat SXG był automatycznie odnawiany co 90 dni (45 dni w przypadku Google), skonfiguruj opcje w sekcji [SXG.ACME]wwebpkgserver.toml.webpkgserverTa opcja dotyczy tylko witryn z ustawionym kontem DigiCert lub Google ACME.
 
- Zmień wiersz 
- Skonfiguruj serwer peryferyjny tak, aby przekierowywał ruch do instancji - webpkgserver.- webpkgserverobsł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/). Zasady przekształcania adresów URL w przypadku każdego z tych typów żądań różnią się nieznacznie. Więcej informacji znajdziesz w artykule Uruchamianie usługi na serwerze front-endu.- Uwaga: - Domyślnie - webpkgserverudostę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 =
