获取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文档