获取Chrome扩展程序ID进行开发

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

在什么情况下,分机号码会改变?

也不

如何将我的zip存档上传到Chrome仪表板?

不过,我在问,如何在不使用Chrome仪表板的情况下获得扩展程序的密钥。 因此,我不认为这是这个问题的重复。

在Chrome扩展程序中使用Google Identity的文档声明需要将扩展​​程序的密钥复制到其清单文件中。

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

但是,当浏览到推荐目录 (… Google/Chrome/Default/Extensions )时,我看不到我的解包扩展名。 我意识到这是因为扩展没有安装为.crx文件 。 但是,这些文档明显是为了开发的目的而编写的:

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

我怎样才能避免打包我的扩展,并重新安装每次我做出改变? 如果我的开发扩展没有安装清单文件,我可以从中获取扩展的密钥,我可以从哪里获得?

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

如果您只想使用命令行工具生成扩展标识,则可以进一步查看。 我将使用OpenSSL,因为它是跨平台的。

首先,我们生成一个私钥。 保持这个私钥的秘密,不要松动它。 否则,您将无法创build具有相同扩展名的CRX文件。 在编写时,Chrome生成的私钥是PKCS#8格式的2048位RSA密钥 ( 直到2013年为1024位 )。 在整个答案中,我将这个私钥文件称为key.pem ,因为Chrome网上应用店期望私钥被称为key.pem

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

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

Linux / Mac

OpenSSL安装在大多数Linux发行版上。 如果没有,只需通过您最喜爱的软件包pipe理器安装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 ap 

我在每一行的开头都放了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 

我已经用openssl命令在每行的开始处放置了2>NUL ,以隐藏关于缺lessconfiguration文件的无害警告。

例子

这是在Linux上运行以前的命令的一个例子。 命令的相关输出是粗体的。 第一个命令创build一个文件,所以在shell中没有可见的输出。 请注意,第二个和第三个命令的输出不会以换行符结束,所以在行尾有一个“$”(不应该被复制)。

  $#创build名为key.pem的私钥
 $ 2> / dev / null openssl genrsa 2048 |  openssl pkcs8 -topk8 -nocrypt -out key.pem
 $#生成在manifest.json中用作“键”的string(输出到stdout)
 $ 2> / dev / null openssl rsa -in key.pem -pubout -outform DER |  openssl base64 -A
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8vj7SK0NZ6ak7K6m6KEAkfGaNfKUahqFFms6W8rq + voaW7nETrpsMqNyhmBQ + ea0KkyI / S5XIrDQPqDcNpvesYlg9lsmi7CQBZjJw7zNqKkvn0oYaP4SNtWZfZopBumqFbzFi5cst2PT + XU9CBitxXNtocRtcjOsa44W1gPA5xanmtlF258N6Nann + rSOAdhIWqSo / J6fj72cxTNfmqLkwAvhdS4Zyux4F87vxp4YTSwElfYXFsHZWi7h66uuuMzqyOyJz5grhCJ24rtTshMQUCxQWyhO2XT2J1tVfUN1YVw6xdKUz3aGyKZeXCuql5klHmlqE9PTlbKj / 1VMiIgCQIDAQAB $ 
 $#计算扩展ID(输出到标准输出)
 $ 2> / dev / null openssl rsa -in key.pem -pubout -outform DER |  sha256sum | 头-c32 |  tr 0-9a-f ap
 mfabfdnimhipcapcioneheloaehhoggk $ 
 $ cat key.pem#显示key.pem的完整内容
 -----开始私钥-----
 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 =
 -----结束私人密钥----- 

我发现这样做的最简单的方法是将Chrome扩展包装在开发模式中。

打包扩展程序:

打开扩展pipe理页面,进入这个URL: chrome:// extensions

确保选中右上angular的“开发者模式”checkbox。 点击打包扩展button。 出现一个对话框。

在扩展根目录字段中,指定扩展文件夹的path,例如~/mytodosextension 。 (忽略其他字段;首次打包特定扩展时,不要指定私钥文件。)

点击Package 。 包装商创build两个文件:

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

  • 和一个包含私钥的.pem文件。

在这里查看chrome文档