Google chrome extension 为Chrome扩展制作唯一的扩展id和密钥?

Google chrome extension 为Chrome扩展制作唯一的扩展id和密钥?,google-chrome-extension,Google Chrome Extension,我做了一个Chrome扩展,但它是基于网上的一些例子。它不在crx文件中。扩展ID是示例中使用的ID。我想在上传我的扩展到chrome商店之前更改它。我的问题是如何改变这一点?我是否只是手动更改manifest.json文件中的字母?或者扩展id必须从某个对象生成,因为它是固定格式的?钥匙也是一样,在我准备好做任何其他事情之前,我可以随意更改这两个吗 { // Extension ID: rnldjzfmornpzlahmmmgbagdohdnhdic "key": "MIGfMA3GC

我做了一个Chrome扩展,但它是基于网上的一些例子。它不在crx文件中。扩展ID是示例中使用的ID。我想在上传我的扩展到chrome商店之前更改它。我的问题是如何改变这一点?我是否只是手动更改manifest.json文件中的字母?或者扩展id必须从某个对象生成,因为它是固定格式的?钥匙也是一样,在我准备好做任何其他事情之前,我可以随意更改这两个吗

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

请注意,扩展签名由两个“键”组成:

  • 用于对CRX文件进行签名的私钥文件
    .pem
    ,在将来的更新中必须保持不变
  • 清单中生成的公钥-不能用于签署未来的更新(而是用于验证签名),但可以用于强制未打包扩展的特定ID,因为该ID是作为公钥的哈希派生的。(对于那些好奇的人,如果
    不存在,则会返回到未打包的扩展)
您有两种选择:

  • 让谷歌来处理吧

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

    CWS将为您的扩展生成一个新的密钥对(并因此生成一个新ID),该密钥对将在更新之间保留。如果您需要维护开发版本的ID(这不一定是个好主意,因为Chrome会与自动更新混淆,但在
    storage.sync
    测试期间是个好主意),您可以使用项目上的“More info”链接从开发者仪表板中提取新的公共
    密钥

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

  • 保留对私钥的控制

    注意:这种方法现在可能已经被弃用了,没有太多实际的理由使用它。

    您可以从
    chrome://extensions
    使用“包装扩展”功能

    如果您不提供现有的
    .pem
    文件,Chrome将为您的扩展名生成一个新的密钥对(从而生成ID)

    小心地用你的生命保护产生的
    .pem
    键。当涉及到更新时,它可以用来模拟您作为开发人员

    然后,当您向CWS提交扩展时,(注意:已从文档中删除;链接到存档版本)。这将指示CWS使用它,而不是生成新的密钥对。请注意,您必须向Google提供私钥,因为它会在签名之前修改扩展名

    由于ID是(随机生成的)公钥的散列,因此与现有扩展冲突的可能性很小。如果出现这种情况,只需为另一个文件重新生成
    .pem
    文件

  • 在这两种情况下:上传时不要在清单中包含
    字段,否则CWS可能会拒绝它


    另外,不要在任何地方硬编码扩展ID。可以使用以下功能之一进行访问:

    chrome.runtime.getManifest().id//给出“youridehere”
    chrome.runtime.getURL(“某物”)//提供“chrome”-extension://youridhere/something"
    
    在CSS文件中,您可以使用
    \uuuu MSG\u@@extension\u id\uuuu
    作为宏:

    背景图像:url('chrome-extension://__MSG_@@扩展名_id_u_/background.png');
    
    您可以为清单创建自己的密钥和扩展ID:

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

    关键:

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

    扩展ID:

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


    “无法从CWS获得.pem密钥”回答了我的问题。谢谢你的信息!这有助于我在开发和更新期间使用唯一id。谢谢。设置您自己id的一个实际原因是,如果您想将未发布的扩展加载到electron应用程序中。这是使用session.defaultSession.loadExtension(path_to_扩展名)完成的,path_to_扩展名包含扩展名id。如果安装未打包的扩展名而不设置自己的id,这将是随机的。如果您的系统没有shasum,但有xxd,则可以使用
    openssl dgst-sha256-binary | xxd-p
    而不是
    shasum-a 256