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

Ken*_*ams 12 google-chrome-extension

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

{
  // Extension ID: rnldjzfmornpzlahmmmgbagdohdnhdic
  "key": "MIGfMA3GCSqGSIb3DFEBAQUAA4GNADCBiQKBgQDcBHwzDvyBQ6bDppkIs9MP4ksKqCMyXQ/A52JivHZKh4YO/9vJsT3oaZhSpDCE9RCocOEQvwsHsFReW2nUEc6OLLyoCFFxIb7KkLGsmfakkut/fFdNJYh0xOTbSN8YvLWcqph09XAY2Y/f0AL7vfO1cuCqtkMt8hFrBGWxDdf9CQIDAQAB",
  "name": "Name of extension",
...
Run Code Online (Sandbox Code Playgroud)

Xan*_*Xan 26

请注意,扩展签名包含两个"密钥":

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

你有2个选择:

  1. 让谷歌处理它.

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

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

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

  2. 保留对私钥的控制.

    您可以chrome://extensions使用"包扩展"功能生成扩展的CRX文件.

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

    保护生成的.pem密钥与你的生活小心.在更新时,它可以用来模仿您作为开发人员.

    然后,当您将扩展名提交给CWS时,请将.pem其作为存档的根目录包含在内key.pem.这指示CWS使用它而不是生成新的密钥对.请注意,您必须向Google提供私钥,因为它会在签名之前修改扩展程序.

    由于ID是(随机生成的)公钥的哈希值,因此与现有扩展名碰撞的可能性很小.如果发生这种情况,只需.pem为不同的文件重新生成文件即可.

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


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

chrome.runtime.getManifest().id // gives "youridehere"
chrome.runtime.getURL("something") // gives "chrome-extension://youridhere/something"
Run Code Online (Sandbox Code Playgroud)

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

background-image:url('chrome-extension://__MSG_@@extension_id__/background.png');
Run Code Online (Sandbox Code Playgroud)


Dav*_*han 14

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

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

键:

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

分机号码:

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