Asset

Jednoznacznie identyfikuje zasób.

Zasób cyfrowy to możliwy do zidentyfikowania i adresowy podmiot online, który zwykle udostępnia niektóre usługi lub treści. Przykładowe zasoby to witryny, aplikacje na Androida, kanały na Twitterze i strony plus.

Zapis JSON
{
  // Union field, only one of the following:
  "web": {
    object(WebAsset)
  },
  "androidApp": {
    object(AndroidAppAsset)
  },
}
Nazwa pola Typ Opis
Unia Europejska – tylko jedno z tych pól:
web object(WebAsset) Ustaw, jeśli jest to zasób internetowy.
androidApp object(AndroidAppAsset) Ustaw, jeśli jest to komponent aplikacji na Androida.

Zasób internetowy

Opisuje zasób internetowy.

Zapis JSON
{
  "site": string,
}
Nazwa pola Typ Opis
site string

Zasoby internetowe są identyfikowane na podstawie adresu URL zawierającego tylko schemat, nazwę hosta i części portów. Format to

http[s]://<hostname>[:<port>]

Nazwy hostów muszą być w pełni kwalifikowane: muszą kończyć się jednym znakiem („.”).

Obecnie dozwolone są tylko schematy „http” i „https”.

Numery portów podawane są w postaci numeru dziesiętnego i trzeba je pominąć, jeśli są używane standardowe numery portów: 80 dla http i 443 dla https.

Ten ograniczony adres URL nazywamy „witryną”. Wszystkie adresy URL z tym samym schematem, nazwą hosta i portem są uznawane za część witryny i są częścią zasobu internetowego.

Przykład: zasób z witryną https://www.google.com zawiera wszystkie te adresy URL:

  • https://www.google.com/
  • https://www.google.com:443/
  • https://www.google.com/foo
  • https://www.google.com/foo?bar
  • https://www.google.com/foo#bar
  • https://user@password:www.google.com/

Nie zawiera on jednak tych adresów URL:

  • http://www.google.com/ (niewłaściwy schemat)
  • https://google.com/ (nazwa hosta się nie zgadza)
  • WYMAGANY https://www.google.com:444/ (port nie pasuje)

Komponent AndroidAppAsset

Opisuje zasób aplikacji na Androida.

Zapis JSON
{
  "packageName": string,
  "certificate": {
    object(CertificateInfo)
  },
}
Nazwa pola Typ Opis
packageName string Zasoby aplikacji na Androida są w naturalny sposób identyfikowane przez nazwę pakietu Java. Na przykład aplikacja Mapy Google używa nazwy pakietu com.google.android.apps.maps. WYMAGANE
certificate object(CertificateInfo)

Nie ma globalnego egzekwowania unikalności nazwy pakietu, dlatego wymagamy również certyfikatu podpisywania, który w połączeniu z nazwą pakietu jednoznacznie identyfikuje aplikację.

Klucze podpisywania niektórych aplikacji są poddawane rotacji, więc z czasem mogą być podpisywane przez różne klucze. Są one traktowane jako oddzielne zasoby, ponieważ używamy unikalnego identyfikatora (nazwa pakietu, certyfikat). Nie powinno to zwykle powodować żadnych problemów, ponieważ obie wersje aplikacji zawierają te same lub podobne stwierdzenia. Inne zasoby z wyrażeniami na temat aplikacji będą jednak wymagać aktualizacji po rotacji klucza.

(Pamiętaj, że składnia używana do publikowania i zapytań związanych z informacjami zawiera cukier składowy, co pozwala łatwo rozpoznawać aplikacje znane z wielu certyfikatów). WYMAGANE

Informacje o certyfikacie

Opisuje certyfikat X509.

Zapis JSON
{
  "sha256Fingerprint": string,
}
Nazwa pola Typ Opis
sha256Fingerprint string

Odcisk cyfrowy dużego certyfikatu SHA-265. Certyfikat PEM można uzyskać w ten sposób:

$ keytool -printcert -file $CERTFILE | grep SHA256:
SHA256: 14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83: \
    42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5

lub tak:

$ openssl x509 -in $CERTFILE -noout -fingerprint -sha256
SHA256 Fingerprint=14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64: \
    16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5

W tym przykładzie będzie to 14:6D:E9:83:C5:73: 06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF: 44:E5.

Jeśli te narzędzia nie są dla Ciebie dostępne, możesz przekonwertować certyfikat PEM na format DER, oblicz hasz SHA-256 tego ciągu i przedstaw wynik w postaci szesnastkowej (czyli szesnastkowych wartościach reprezentujących każdy oktet, rozdzielonych dwukropkiem).