2016-05-19 30 views
5

Ho un'estensione di Chrome che ho creato, ma basata su alcuni esempi trovati online. Non è in un file CRX. L'ID estensione è quello utilizzato nell'esempio. Vorrei cambiarlo prima di caricare la mia estensione nel Chrome Store. La mia domanda è come posso cambiare questo? Devo cambiare manualmente le lettere nel mio file manifest.json? O l'ID dell'est deve essere generato da qualcosa perché è in un formato fisso? Lo stesso per la chiave, posso cambiare questi due in modo casuale prima di fare qualsiasi altra cosa ora che sono pronto?Fare un ID di estensione univoco e una chiave per l'estensione di Chrome?

{ 
    // Extension ID: rnldjzfmornpzlahmmmgbagdohdnhdic 
    "key": "MIGfMA3GCSqGSIb3DFEBAQUAA4GNADCBiQKBgQDcBHwzDvyBQ6bDppkIs9MP4ksKqCMyXQ/A52JivHZKh4YO/9vJsT3oaZhSpDCE9RCocOEQvwsHsFReW2nUEc6OLLyoCFFxIb7KkLGsmfakkut/fFdNJYh0xOTbSN8YvLWcqph09XAY2Y/f0AL7vfO1cuCqtkMt8hFrBGWxDdf9CQIDAQAB", 
    "name": "Name of extension", 
... 

risposta

11

Nota che firma l'estensione è costituito da due "chiavi":

  • Il file della chiave privata, .pem, che viene utilizzato per firmare i file CRX e deve rimanere lo stesso per gli aggiornamenti futuri.
  • La chiave pubblica risultante nel manifest non può essere utilizzata per firmare gli aggiornamenti futuri (utilizzati per verificare invece la firma), ma può essere utilizzata per forzare un particolare ID per le estensioni decompresse poiché l'ID viene derivato come hash della chiave pubblica. (Per chi è curioso, se key non è presente un'estensione scompattata torna a hashing the path).

Hai 2 opzioni:

  1. Let Google gestirlo.

    Rimuovere completamente il campo key dal manifest; quindi inviarlo al negozio.

    CWS genererà una nuova coppia di chiavi per l'estensione (e, di conseguenza, un nuovo ID), che verrà conservata tra gli aggiornamenti. Se hai bisogno di mantenere l'ID per la tua versione di sviluppo (non sempre una buona idea, dato che Chrome si confonderà con gli aggiornamenti automatici, ma è una buona idea durante il test storage.sync), puoi estrarre il nuovo pubblico key dal Dashboard degli sviluppatori usando "Altre informazioni "link sul tuo articolo.

    Tuttavia, non è possibile ottenere la chiave .pem da CWS. Sei sempre bloccato in CWS come fonte di aggiornamento automatico. Ciò non dovrebbe avere importanza, poiché Chrome non consente l'installazione di estensioni da altrove.

  2. Conservare il controllo della chiave privata.

    È possibile generare un file CRX del proprio interno da chrome://extensions utilizzando la funzione "Estensione pacchetto".

    Se non si fornisce un file .pem esistente, Chrome genererà una nuova coppia di chiavi (e quindi ID) per l'estensione.

    Guardare il tasto risultante con la tua vita con attenzione. Può essere usato per impersonare te come sviluppatore quando si tratta di aggiornamenti.

    Quindi, quando si invia l'estensione a CWS, include the .pem in the archive's root as key.pem. Questo ordina a CWS di usarlo invece di generare una nuova coppia di chiavi. Tieni presente che devi fornire la tua chiave privata a Google, poiché modifica le estensioni prima della firma.

    Poiché l'ID è un hash di una chiave pubblica (generata a caso), esiste una probabilità piccola di di collisione con un'estensione esistente.Se ciò accade, ri-generare il file .pem per uno diverso.

In entrambi i casi: non includono il campo key nel manifesto durante il caricamento, o CWS può respingerla.


Inoltre, non eseguire l'hardcode dell'ID di estensione nella propria estensione. E 'accessibile utilizzando una di quelle funzioni:

chrome.runtime.getManifest().id // gives "youridehere" 
chrome.runtime.getURL("something") // gives "chrome-extension://youridhere/something" 

E nel file CSS, è possibile utilizzare [email protected]@extension_id__ come macro:

background-image:url('chrome-extension://[email protected]@extension_id__/background.png'); 
+0

"nessun modo per ottenere la chiave .pem da CWS" ha risposto alla mia domanda. Grazie per le informazioni! – cxw

3

È possibile creare il proprietario di Key e l'estensione ID per il manifesto:

openssl genrsa 2048 | OpenSSL PKCS8 -topk8 -nocrypt -out key.pem

chiave:

openssl rsa -in key.pem -pubout -outform DER | OpenSSL base64 -A

ID Estensione:

openssl rsa -in key.pem -pubout -outform DER | shasum -a 256 | testa -c32 | tr 0-9a-f a-p