我制作了Chrome扩展程序,但基于在线发现的一些示例。它不在crx文件中。扩展ID是示例中使用的扩展ID。我想在将扩展程序上传到chrome商店之前更改它。我的问题是如何改变这个?我只是手动更改manifest.json文件中的字母吗?或者扩展ID是否必须从某些东西生成,因为它是固定格式的?对于密钥来说,我可以在我做其他任何事情之前随机更改这两个吗?
{
// Extension ID: rnldjzfmornpzlahmmmgbagdohdnhdic
"key": "MIGfMA3GCSqGSIb3DFEBAQUAA4GNADCBiQKBgQDcBHwzDvyBQ6bDppkIs9MP4ksKqCMyXQ/A52JivHZKh4YO/9vJsT3oaZhSpDCE9RCocOEQvwsHsFReW2nUEc6OLLyoCFFxIb7KkLGsmfakkut/fFdNJYh0xOTbSN8YvLWcqph09XAY2Y/f0AL7vfO1cuCqtkMt8hFrBGWxDdf9CQIDAQAB",
"name": "Name of extension",
...
答案 0 :(得分:23)
请注意,扩展程序签名包含两个“键”:
.pem
,用于对CRX文件进行签名,并且必须保持不变,以便将来续订。key
不存在,则解压缩的扩展名会回溯到hashing the path)。您有两个选择:
让谷歌处理它。
完全从清单中删除key
字段;然后将其提交给商店。
CWS将为您的扩展生成一个新的密钥对(因此,新的ID)将在更新之间保留。如果您需要维护开发版本的ID(并不总是一个好主意,因为Chrome会与自动更新混淆,但在storage.sync
测试期间一个好主意),您可以提取新的公开key
使用您商品上的“更多信息”链接从您的开发者信息中心。
但是,无法从CWS获取.pem
密钥。您永远被锁定在CWS中作为自动更新源。但这并不重要,因为Chrome不允许从其他地方进行扩展安装。
保留对私钥的控制权。
您可以使用“包扩展”功能从chrome://extensions
生成扩展程序的CRX文件。
如果您不提供现有的.pem
文件,Chrome会为您的扩展程序生成新的密钥对(以及ID)。
小心地用生命保护生成的.pem
键。在更新时,它可以用来模仿您作为开发人员。
然后,当您向CWS提交扩展时,include the .pem
in the archive's root as key.pem
。这指示CWS使用它而不是生成新的密钥对。请注意,您必须向Google提供私钥,因为它会在签名之前修改扩展程序。
由于ID是(随机生成的)公钥的哈希值,因此与现有扩展名存在 tiny 冲突的可能性。如果发生这种情况,只需为另一个文件重新生成.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');
答案 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