获取用于开发的Chrome扩展ID

Jac*_*ack 46 google-chrome-extension

虽然类似于这个问题,但我不是问:

在什么条件下,分机的ID会发生变化?

也不

如何将我的zip存档上传到Chrome控制台?

不过我问,如何在不使用Chrome控制台的情况下获取扩展程序的密钥.因此,我不认为这是这个问题的重复.

在Chrome扩展程序中使用Google身份文档说明需要将扩展​​程序的密钥复制到其清单文件中.

要使应用程序ID保持不变,您需要将已安装的manifest.json中的密钥复制到源清单.

但是,当导航到推荐目录(... Google/Chrome/Default/Extensions)时,我看不到解压缩扩展名的ID.我意识到这是因为扩展名没有安装为.crx文件.但是,为了开发目的,文档清楚地写了:

将已安装的manifest.json中的密钥复制到源清单,以便您的应用程序ID在开发期间保持不变.

如何在每次更改时避免打包扩展程序并重新安装?如果我的开发扩展没有安装的清单文件,我可以从中获取扩展的密钥,我在哪里可以获取它?

Rob*_*b W 73

获取扩展ID的最简单方法是.pem使用此答案中描述的步骤生成文件并提取扩展ID (请阅读图像下方的部分).

如果您只想使用命令行工具生成扩展ID ,请进一步查看.我将使用OpenSSL,因为它是跨平台的.

首先,我们生成一个私钥.保密这个私钥,不要丢失它.否则,您将无法创建具有相同扩展ID的CRX文件.在编写时,Chrome生成的私钥是PKCS#8格式的2048位RSA密钥(直到2013年为1024位).在整个答案中,我将此私钥文件称为key.pem,因为Chrome Web Store期望调用私钥key.pem.

其次,我将展示如何为"key"清单文件字段生成值.这只是以base64格式编码的公钥.

我的答案中的第三个命令显示了如何计算给定公钥的扩展ID(从私钥派生).

Linux/Mac

OpenSSL安装在大多数Linux发行版上.如果没有,只需openssl通过您最喜欢的包管理器安装.

# Create private key called key.pem
2>/dev/null openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -out key.pem

# Generate string to be used as "key" in manifest.json (outputs to stdout)
2>/dev/null openssl rsa -in key.pem -pubout -outform DER | openssl base64 -A

# Calculate extension ID (outputs to stdout)
2>/dev/null openssl rsa -in key.pem -pubout -outform DER |  shasum -a 256 | head -c32 | tr 0-9a-f a-p
Run Code Online (Sandbox Code Playgroud)

我已经放在2>/dev/null每一行的开头,以防止"写入RSA密钥"输出到控制台.

视窗

如果您没有OpenSSL,则可以从此镜像中获取预编译的二进制文件.

@echo off
:: Assuming that you have installed OpenSSL in this directory
SET PATH=%PATH%;C:\OpenSSL-Win32\bin

:: Create private key called key.pem
2>NUL openssl genrsa -out priv.tmp 2048
2>NUL openssl pkcs8 -topk8 -in priv.tmp -nocrypt -out key.pem
del priv.tmp

:: Generate string to be used as "key" in manifest.json
2>NUL openssl rsa -in key.pem -pubout -outform DER -out pub.tmp
2>NUL openssl base64 -A -in pub.tmp
del pub.tmp

:: Calculate extension ID
2>NUL openssl rsa -in key.pem -pubout -outform DER -out pub.tmp
2>NUL openssl dgst -sha256 -out checksum.tmp pub.tmp
SET /p EXTID=<checksum.tmp
SET EXTID=%EXTID:* =%
SET EXTID=%EXTID:~0,32%
SET EXTID=%EXTID:f=p%
SET EXTID=%EXTID:e=o%
SET EXTID=%EXTID:d=n%
SET EXTID=%EXTID:c=m%
SET EXTID=%EXTID:b=l%
SET EXTID=%EXTID:a=k%
SET EXTID=%EXTID:9=j%
SET EXTID=%EXTID:8=i%
SET EXTID=%EXTID:7=h%
SET EXTID=%EXTID:6=g%
SET EXTID=%EXTID:5=f%
SET EXTID=%EXTID:4=e%
SET EXTID=%EXTID:3=d%
SET EXTID=%EXTID:2=c%
SET EXTID=%EXTID:1=b%
SET EXTID=%EXTID:0=a%
echo %EXTID%
del checksum.tmp pub.tmp

@echo on
Run Code Online (Sandbox Code Playgroud)

我已经2>NUL在每行的开头添加了openssl命令,以隐藏有关丢失配置文件的无害警告.

例子

以下是在Linux上运行以前命令的示例.命令的相关输出以粗体显示.第一个命令创建一个文件,因此shell中没有可见的输出.请注意,第二个和第三个命令的输出不以换行符结束,因此行末尾有一个"$"(不应复制).

$ # Create private key called key.pem
$ 2>/dev/null openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -out key.pem
$ # Generate string to be used as "key" in manifest.json (outputs to stdout)
$ 2>/dev/null openssl rsa -in key.pem -pubout -outform DER | openssl base64 -A
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8vj7SK0NZ6ak7K6m6KEAkfGaNfKUahqFFms6W8rq+voaW7nETrpsMqNyhmBQ+ea0KkyI/S5XIrDQPqDcNpvesYlg9lsmi7CQBZjJw7zNqKkvn0oYaP4SNtWZfZopBumqFbzFi5cst2PT+XU9CBitxXNtocRtcjOsa44W1gPA5xanmtlF258N6Nann+rSOAdhIWqSo/J6fj72cxTNfmqLkwAvhdS4Zyux4F87vxp4YTSwElfYXFsHZWi7h66uuuMzqyOyJz5grhCJ24rtTshMQUCxQWyhO2XT2J1tVfUN1YVw6xdKUz3aGyKZeXCuql5klHmlqE9PTlbKj/1VMiIgCQIDAQAB$ 
$ # Calculate extension ID (outputs to stdout)
$ 2>/dev/null openssl rsa -in key.pem -pubout -outform DER | sha256sum | head -c32 | tr 0-9a-f a-p
mfabfdnimhipcapcioneheloaehhoggk$ 
$ cat key.pem   # Show content of key.pem for completeness of this demo
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDy+PtIrQ1npqTs
rqbooQCR8Zo18pRqGoUWazpbyur6+hpbucROumwyo3KGYFD55rQqTIj9LlcisNA+
oNw2m96xiWD2WyaLsJAFmMnDvM2oqS+fShho/hI21Zl9mikG6aoVvMWLlyy3Y9P5
dT0IGK3Fc22hxG1yM6xrjhbWA8DnFqea2UXbnw3o1qef6tI4B2EhapKj8np+PvZz
FM1+aouTAC+F1LhnK7HgXzu/GnhhNLASV9hcWwdlaLuHrq664zOrI7InPmCuEInb
iu1OyExBQLFBbKE7ZdPYnW1V9Q3VhXDrF0pTPdobIpl5cK6qXmSUeaWoT09OVsqP
/VUyIiAJAgMBAAECggEAIztFPKmTOwdn/MXqf+rwqTjuUopFSQllaPXNdYf8AL6J
Wema9IuFquYWcjO/Ki1wzH1ik8vHaMlYuOwcYnLBnN69x5s6AKFukNEx2IclDyLR
O/jDh13oCDl600KqVk1Fk3dW8cHPAxyfnRmJ6wWhFPOC3yUbdabWhpYI66mJrDhN
ZpN04RmH7DIlhlBpvq/OMVodhRtqb4/EVJYghTxUsrsv/I+3t3zl/o/c0DiOjiVZ
pEBYzn0rrHP8BAEhJWagGNgvotHPaVKAjoYcUiOUtMM4P1Js034XKjP4MHE1pMbN
VlVnQMz3/6CXFL+wU1QqfohdChmcnc4QwM+vCFK47QKBgQD/FjHxhCJco0rNqNua
B0inGx2Jfb4b+FWwLyNobaYey11o0MjpkpAvYcfe3zW8DQtmepDxGL8CpORoWtFg
sVnmhAir0I6bxdZLMwKcp4T+kHW3n/ae3z8tPvMvclCnARGEp+ccyDH9X2iyaSd5
8DeJ6ND32+yr+vLgyyK/JW1z5wKBgQDz167cLe+xoRUqlKdJq8lzmij30lGVUT2D
5Fn+2YUKIMeVEM7PlEmu9UmpN5HMA+LSNeiMZ1uhW5YQovXlXZCWoRqieeI4LMoM
M335hsAWpS8pFRdlXMy885w5FUC5v4Ji0RUI37WON6fxNd8zFVqAMOcAANg716RI
MWfblCJOjwKBgQDV8BKBIbYEBfv10poja9p2NFqodqpcIQIU2uQScGvzxdIY14q5
wu9kndiYxpH1nuch0sf/PSbuG8do8kpKk1P37mKrXyZL5TgeJ7EYG7OCITxpfiLE
Ci6dTv98mp6kAlRj8sH1tL2gaEWR5Hl0XpDl/DpOtsefUcAj4prIv6Y1nwKBgGUk
obNSmonjdxQidQFp8DWzTCr/Yje9ava6UVoUf8qjriV2w1H3AFlCBTvbgO5O7laj
ZcJXXPqhMq3T6ospNEBGsvWR+PO0IFrPQQGvkx3Rhq5TwVCaHZKCudozppVlin/S
mhcENBq5mz/CSMK3qMJjhm3J6+dmmw4W8C10VIahAoGARf4zus0TQIxRlix1Oaaz
sM5yANLcLivoeJDVOlUFUWgeSUc6Yma8T/FYlAkEVyyK+/nCWNErTS2yOzXEff01
n8F0h1DJ4K5zxt0OhGUIUAGgR/kqpub0omqTJcJndLv2qgzofwK21Uih6yQzDeus
lJsf3m3tuax5kcmhnDojbtE=
-----END PRIVATE KEY-----

  • 对于那些在OSX上得到"sha256sum:command not found"错误的人,你可以用mac上的`shasum -a 256`替换它.使用完整的命令行:```2>/dev/null openssl rsa -in key.pem -poutout -outform DER | shasum -a 256 | 头-c32 | tr 0-9a-f ap``` (4认同)
  • 对于OSX上的任何其他人在执行`s Step 3`SSL指令时得到`sha256sum:command not found`,这条评论为我修好了:http://stackoverflow.com/a/8497894/556006 (3认同)

yak*_*xxx 8

解压后的 Chrome 扩展 ID 是根据其目录路径生成的。对于解压的扩展,您可以通过以下方式生成 id(Python 中的代码):

import hashlib

m = hashlib.sha256()
m.update(bytes(PATH.encode('utf-8')))
EXTID = ''.join([chr(int(i, base=16) + ord('a')) for i in m.hexdigest()][:32])
Run Code Online (Sandbox Code Playgroud)

其中 PATH 是扩展的规范化路径,即:

PATH = os.path.dirname(os.path.realpath(__file__))
Run Code Online (Sandbox Code Playgroud)


kin*_*chu 7

我发现这样做的最简单方法是在开发模式下打包 chrome扩展.

打包扩展程序:

转到此网址,打开Extensions管理页面: chrome:// extensions

确保选中右上角的"开发者模式"复选框.单击包扩展按钮.出现一个对话框.

在"扩展根目录"字段中,指定扩展名文件夹的路径 - 例如,~/mytodosextension.(忽略其他字段;第一次打包特定扩展名时,不指定私钥文件.)

单击.打包器创建两个文件:

  • .crx文件,这是可以安装的实际扩展,

  • 和.PEM文件,其中包含私有密钥.

请参阅此处的 chrome文档

  • 获得公钥/私钥后,我们如何处理它们? (3认同)
  • @AlexanderMills您可以使用私钥在manifest.json中设置`key`字段.它将确保始终生成相同的chrome扩展ID. (3认同)