为Chrome扩展程序制作唯一的扩展程序ID和密钥?

时间:2016-05-19 08:25:28

标签: google-chrome-extension

我制作了Chrome扩展程序,但基于在线发现的一些示例。它不在crx文件中。扩展ID是示例中使用的扩展ID。我想在将扩展程序上传到chrome商店之前更改它。我的问题是如何改变这个?我只是手动更改manifest.json文件中的字母吗?或者扩展ID是否必须从某些东西生成,因为它是固定格式的?对于密钥来说,我可以在我做其他任何事情之前随机更改这两个吗?

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

2 个答案:

答案 0 :(得分:23)

请注意,扩展程序签名包含两个“键”:

  • 私钥文件.pem,用于对CRX文件进行签名,并且必须保持不变,以便将来续订。
  • 清单中生成的公钥 - 不能用于签署未来的更新(用于验证签名),但可用于强制解析扩展程序的特定ID ,因为ID被导出为公钥的哈希。 (对于那些好奇的人,如果key不存在,则解压缩的扩展名会回溯到hashing the path)。

您有两个选择:

  1. 让谷歌处理它。

    完全从清单中删除key字段;然后将其提交给商店。

    CWS将为您的扩展生成一个新的密钥对(因此,新的ID)将在更新之间保留。如果您需要维护开发版本的ID(并不总是一个好主意,因为Chrome会与自动更新混淆,但在storage.sync测试期间一个好主意),您可以提取新的公开key使用您商品上的“更多信息”链接从您的开发者信息中心。

    但是,无法从CWS获取.pem密钥。您永远被锁定在CWS中作为自动更新源。但这并不重要,因为Chrome不允许从其他地方进行扩展安装。

  2. 保留对私钥的控制权。

    您可以使用“包扩展”功能从chrome://extensions生成扩展程序的CRX文件。

    如果您不提供现有的.pem文件,Chrome会为您的扩展程序生成新的密钥对(以及ID)。

    小心地用生命保护生成的.pem。在更新时,它可以用来模仿您作为开发人员。

    然后,当您向CWS提交扩展时,include the .pem in the archive's root as key.pem。这指示CWS使用它而不是生成新的密钥对。请注意,您必须向Google提供私钥,因为它会在签名之前修改扩展程序。

    由于ID是(随机生成的)公钥的哈希值,因此与现有扩展名存在 tiny 冲突的可能性。如果发生这种情况,只需为另一个文件重新生成.pem文件。

  3. 在任何一种情况下:上传时不要在清单中包含key字段,否则CWS可能拒绝该字段。

    此外,请勿在任何地方对扩展程序中的扩展程序ID进行硬编码。可以使用以下功能之一访问它:

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

    在CSS文件中,您可以将__MSG_@@extension_id__用作宏:

    background-image:url('chrome-extension://__MSG_@@extension_id__/background.png');
    

答案 1 :(得分:11)

您可以为清单创建自己的密钥和扩展ID:

  

openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -out key.pem

     

键:

     

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

     

分机ID:

     

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