Chrome-extensie-ID verkrijgen voor ontwikkeling

Hoewel vergelijkbaar met deze SO-vraag, ik stel niet:

Onder welke voorwaarden verandert de ID van een extensie?

noch

Hoe kan ik mijn zip-archief uploaden naar het Chrome Dashboard?

Ik vraag me echter af hoe ik de sleutel van een extensie kan verkrijgen zonder het Chrome Dashboard te gebruiken. Daarom beschouw ik het niet als een duplicaat van deze SO-vraag.

In de documentatie voor het gebruik van Google Identityin een Chrome-extensie staat dat het nodig is om een extensions’ sleutel tot zijn manifest bestand.

Om uw applicatie-ID constant te houden, moet u de sleutel kopiëren in de
manifest.json geïnstalleerd in uw bronmanifest.

Bij het navigeren naar de aanbevolen directory(… Google/Chrome/Default/Extensions) Ik zie de ID van mijn uitgepakte extensie niet. Ik realiseer me dat dit komt omdat de extensie niet is geïnstalleerd als .crx-bestand. De documentatieis echter duidelijk geschreven met het oog op ontwikkeling:

Kopieer de sleutel in het geïnstalleerde manifest.json naar uw bronmanifest, dus
dat uw applicatie-ID constant blijft tijdens de ontwikkeling.

Hoe kan ik voorkomen dat ik mijn extensie inpakt en elke keer als ik een wijziging aanbreng opnieuw installeer?
Als mijn ontwikkelingsextensie geen geïnstalleerd manifestbestand heeft waaruit ik de sleutel van de extensie kan halen, waar kan ik die dan vandaan halen?


Antwoord 1, autoriteit 100%

De gemakkelijke manier

De gemakkelijkste manier om een ​​extensie-ID te krijgen, is door het bestand .pemte genereren en de extensie-ID uit te pakken met behulp van de stappen die worden beschreven in mijn ander antwoord(lees het gedeelte onder de afbeelding).

Op de commandoregel

De rest van dit antwoord is bedoeld voor degenen die de extensie-ID alleen met opdrachtregelprogramma’swillen genereren. Ik ga OpenSSLgebruiken omdat het platformonafhankelijk is.

Eerst genereren we een privésleutel. Houd deze privésleutel geheim en verlies deze niet. Anders kunt u geen CRX-bestand maken met dezelfde extensie-ID. Op het moment van schrijven zijn de privésleutels die door Chrome worden gegenereerd 2048-bits RSA-sleutelsin PKCS #8-indeling (1024-bit tot 2013). In het hele antwoord zal ik naar dit privésleutelbestand verwijzen als key.pem, omdat de Chrome Web Store verwacht dat de privésleutel key.pemwordt genoemd.

Ten tweede laat ik zien hoe u de waarde genereert voor de "key"veld van het manifestbestand. Dit is alleen de openbare sleutel, gecodeerd in base64-indeling.

De derde opdracht in mijn antwoord laat zien hoe je de extensie-ID kunt berekenen die is gegeven aan een openbare sleutel (afgeleid van een privésleutel).

Linux / Mac

OpenSSL is op de meeste Linux-distributies geïnstalleerd. Zo niet, installeer dan gewoon opensslvia je favoriete pakketbeheerder.

# Create private key called key.pem
2>/dev/null openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -out key.pem
# Generate string to be used as "key" in manifest.json (outputs to stdout)
2>/dev/null openssl rsa -in key.pem -pubout -outform DER | openssl base64 -A
# Calculate extension ID (outputs to stdout)
2>/dev/null openssl rsa -in key.pem -pubout -outform DER |  shasum -a 256 | head -c32 | tr 0-9a-f a-p

Ik heb 2>/dev/nullaan het begin van elke regel gezet om te voorkomen dat “het schrijven van een RSA-sleutel” wordt uitgevoerd naar de console.

Vensters

Als je geen OpenSSL hebt, kun je een voorgecompileerd binair bestand krijgen van deze mirror.

@echo off
:: Assuming that you have installed OpenSSL in this directory
SET PATH=%PATH%;C:\OpenSSL-Win32\bin
:: Create private key called key.pem
2>NUL openssl genrsa -out priv.tmp 2048
2>NUL openssl pkcs8 -topk8 -in priv.tmp -nocrypt -out key.pem
del priv.tmp
:: Generate string to be used as "key" in manifest.json
2>NUL openssl rsa -in key.pem -pubout -outform DER -out pub.tmp
2>NUL openssl base64 -A -in pub.tmp
del pub.tmp
:: Calculate extension ID
2>NUL openssl rsa -in key.pem -pubout -outform DER -out pub.tmp
2>NUL openssl dgst -sha256 -out checksum.tmp pub.tmp
SET /p EXTID=<checksum.tmp
SET EXTID=%EXTID:* =%
SET EXTID=%EXTID:~0,32%
SET EXTID=%EXTID:f=p%
SET EXTID=%EXTID:e=o%
SET EXTID=%EXTID:d=n%
SET EXTID=%EXTID:c=m%
SET EXTID=%EXTID:b=l%
SET EXTID=%EXTID:a=k%
SET EXTID=%EXTID:9=j%
SET EXTID=%EXTID:8=i%
SET EXTID=%EXTID:7=h%
SET EXTID=%EXTID:6=g%
SET EXTID=%EXTID:5=f%
SET EXTID=%EXTID:4=e%
SET EXTID=%EXTID:3=d%
SET EXTID=%EXTID:2=c%
SET EXTID=%EXTID:1=b%
SET EXTID=%EXTID:0=a%
echo %EXTID%
del checksum.tmp pub.tmp
@echo on

Ik heb 2>NULaan het begin van elke regel gezet met de opdracht opensslom een ​​ongevaarlijke waarschuwing over een ontbrekend configuratiebestand te verbergen.

Voorbeelden

Hier is een voorbeeld van het uitvoeren van de vorige opdrachten op Linux. De relevante uitvoer van de opdrachten is vetgedrukt. Het eerste commando maakt een bestand aan, dus er is geen zichtbare uitvoer in de shell. Merk op dat de uitvoer van het tweede en derde commando niet eindigen met een regeleinde, dus er staat een “$” aan het einde van de regel (die niet gekopieerd mag worden).

$ # Maak een privésleutel met de naam key.pem
$ 2>/dev/null openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -out key.pem
$ # Genereer string om te gebruiken als "sleutel" in manifest.json (uitvoer naar stdout)
$ 2>/dev/null openssl rsa -in key.pem -pubout -outform DER | openssl base64 -A
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8vj7SK0NZ6ak7K6m6KEAkfGaNfKUahqFFms6W8rq + voaW7nETrpsMqNyhmBQ + ea0KkyI / S5XIrDQPqDcNpvesYlg9lsmi7CQBZjJw7zNqKkvn0oYaP4SNtWZfZopBumqFbzFi5cst2PT + XU9CBitxXNtocRtcjOsa44W1gPA5xanmtlF258N6Nann + rSOAdhIWqSo / J6fj72cxTNfmqLkwAvhdS4Zyux4F87vxp4YTSwElfYXFsHZWi7h66uuuMzqyOyJz5grhCJ24rtTshMQUCxQWyhO2XT2J1tVfUN1YVw6xdKUz3aGyKZeXCuql5klHmlqE9PTlbKj / 1VMiIgCQIDAQAB $
$ # Bereken extensie-ID (uitvoer naar stdout)
$ 2>/dev/null openssl rsa -in key.pem -pubout -outform DER | sha256sum | hoofd -c32 | tr 0-9a-f a-p
mfabfdnimhipcapcioneheloaehhoggk$
$ cat key.pem # Toon inhoud van key.pem voor volledigheid van deze demo
-----BEGIN PRIVÉSLEUTEL -----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDy+PtIrQ1npqTs
rqbooQCR8Zo18pRqGoUWazpbyur6+hpbucROumwyo3KGYFD55rQqTIj9LlcisNA+
oNw2m96xiWD2WyaLsJAFmMnDvM2oqS+fShho/hI21Zl9mikG6aoVvMWLlyy3Y9P5
dT0IGK3Fc22hxG1yM6xrjhbWA8DnFqea2UXbnw3o1qef6tI4B2EhapKj8np+PvZz
FM1+aouTAC+F1LhnK7HgXzu/GnhhNLASV9hcWwdlaLuHrq664zOrI7InPmCuEInb
iu1OyExBQLFBbKE7ZdPYnW1V9Q3VhXDrF0pTPdobIpl5cK6qXmSUeaWoT09OVsqP
/VUyIiAJAgMBAAECggEAIztFPKmTOwdn/MXqf+rwqTjuUopFSQllaPXNdYf8AL6J
Wema9IuFquYWcjO/Ki1wzH1ik8vHaMlYuOwcYnLBnN69x5s6AKFukNEx2IclDyLR
O/jDh13oCDl600KqVk1Fk3dW8cHPAxyfnRmJ6wWhFPOC3yUbdabWhpYI66mJrDhN
ZpN04RmH7DIlhlBpvq/OMVodhRtqb4/EVJYghTxUsrsv/I+3t3zl/o/c0DiOjiVZ
pEBYzn0rrHP8BAEhJWagGNgvotHPaVKAjoYcUiOUTMM4P1Js034XKjP4MHE1pMbN
VlVnQMz3/6CXFL+wU1QqfohdChmcnc4QwM+vCFK47QKBgQD/FjHxhCJco0rNqNua
B0inGx2Jfb4b+FWwLyNobaYey11o0MjpkpAvYcfe3zW8DQtmepDxGL8CpORoWtFg
sVnmhAir0I6bxdZLMwKcp4T+kHW3n/ae3z8tPvMvclCnARGEp+ccyDH9X2iyaSd5 
8DeJ6ND32+jr+vLgyyK/JW1z5wKBgQDz167cLe+xoRUqlKdJq8lzmij30lGVUT2D
5Fn+2YUKIMeVEM7PlEmu9UmpN5HMA+LSNeiMZ1uhW5YQovXlXZCWoRqieeI4LMoM
M335hsAWpS8pFRdlXMy885w5FUC5v4Ji0RUI37WON6fxNd8zFVqAMOcAANG716RI
MWfblCJOjwKBgQDV8BKBIbYEBfv10poja9p2NFqodqpcIQIU2uQScGvzxdIY14q5
wu9kndiYxpH1nuch0sf/PSbuG8do8kpKk1P37mKrXyZL5TgeJ7EYG7OCITxpfiLE
Ci6dTv98mp6kAlRj8sH1tL2gaEWR5Hl0XpDl/DpOtsefUcAj4prIv6Y1nwKBgGUk
obNSmonjdxQidQFp8DWzTCr/Yje9ava6UVoUf8qjriV2w1H3AFlCBTvbgO5O7laj
ZcJXXPqhMq3T6ospNEBGsvWR+PO0IFrPQQGvkx3Rhq5TwVCaHZKCudozppVlin/S
mhcENBq5mz/CSMK3qMJjhm3J6+dmmw4W8C10VIahAoGARf4zus0TQIxRlix1Oaaz
sM5yANLcLivoeJDVOLUFUWgeSUc6Yma8T/FYlAkEVyyK+/nCWNERTS2yOzXEff01
n8F0h1DJ4K5zxt0OhGUIUAGgR/kqpub0omqTJcJndLv2qgzofwK21Uih6yQzDeus
lJsf3m3tuax5kcmhnDojbtE=
-----EINDE PRIVÉSLEUTEL -----

Antwoord 2, autoriteit 14%

De gemakkelijkste manier die ik heb gevonden om dit te doen, is door de Chrome-extensie in te pakkenin de ontwikkelingsmodus.

Een extensie inpakken:

Breng de pagina Extensiesbeheer weer door naar deze URL te gaan:
chrome://extensions

Zorg ervoor dat het selectievakje “Ontwikkelaarsmodus”in de rechterbovenhoek is aangevinkt.
Klik op de knop Verpakkingsextensie. Er verschijnt een dialoogvenster.

Geef in het veld Extensie root directory het pad op naar de map van de extensie, bijvoorbeeld ~/mytodosextension. (Negeer het andere veld; u geeft geen privésleutelbestand op wanneer u voor het eerst een bepaalde extensie in een pakket plaatst.)

Klik op Pakket. De verpakker maakt twee bestanden:

  • een .crx-bestand, de daadwerkelijke extensie die kan worden geïnstalleerd,

  • en een .pem-bestand, dat de persoonlijke sleutelbevat.

Bekijk hier

de Chrome-documentatie


Antwoord 3, autoriteit 5%

ID van de uitgepakte Chrome-extensie wordt gegenereerd op basis van het pad van de directory. Voor een uitgepakte extensie kun je de id op de volgende manier genereren (code in Python):

import hashlib
m = hashlib.sha256()
m.update(bytes(PATH.encode('utf-8')))
EXTID = ''.join([chr(int(i, base=16) + ord('a')) for i in m.hexdigest()][:32])

waar PATH het genormaliseerde pad naar de extensie is, bijv.:

PATH = os.path.dirname(os.path.realpath(__file__))

Other episodes