【问题标题】:Making a unique extension id and key for Chrome extension?为 Chrome 扩展程序制作唯一的扩展程序 ID 和密钥?
【发布时间】:2016-05-19 08:25:28
【问题描述】:

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

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

【问题讨论】:

    标签: google-chrome-extension


    【解决方案1】:

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

    • 私钥文件.pem,用于对 CRX 文件进行签名,并且必须保持不变以供将来更新。
    • 清单中生成的公钥 - 不能用于签署未来的更新(用于验证签名),但可用于强制特定 ID 用于解压扩展,因为ID 是作为公钥的散列派生的。 (对于那些好奇的人,如果 key 不存在,则未打包的扩展名会退回到 hashing the path)。

    你有两个选择:

    1. 让 Google 处理。

      从清单中完全删除 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 是(随机生成的)公钥的散列,因此与现有扩展发生冲突的可能性很小。如果发生这种情况,只需为另一个文件重新生成 .pem 文件。

    无论哪种情况:上传时不要在清单中包含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');
    

    【讨论】:

    • “无法从 CWS 获取 .pem 密钥”回答了我的问题。感谢您的信息!
    • 这有助于我在开发和更新期间使用唯一 ID。谢谢。
    • 设置自己的 id 的一个实际原因是,如果您想将未发布的扩展加载到电子应用程序中。这是使用 session.defaultSession.loadExtension(path_to_extension) 完成的,并且 path_to_extension 包含扩展 ID。如果你安装一个解压后的扩展而不设置你自己的 id,这将是随机的。
    【解决方案2】:

    您可以为清单创建自己的密钥和扩展 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 |沙萨姆-a 256 |头 -c32 | tr 0-9a-f a-p

    【讨论】:

    • 如果你的系统没有 shasum 但有 xxd 你可以使用openssl dgst -sha256 -binary | xxd -p 而不是shasum -a 256
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    相关资源
    最近更新 更多