获取Chrome扩展程序ID进行开发 [英] Obtaining Chrome Extension ID for development

查看:152
本文介绍了获取Chrome扩展程序ID进行开发的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

虽然与,我不问:


在什么情况下,扩展的ID改变?


也不是


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


然而,我不知道如何在不使用Chrome仪表板的情况下获得扩展程序的密钥。因此,我不认为它是




$ b $在扩展程序中使用Google身份验证文档
/ apps / app_identity#copy_keyrel =noreferrer>使用Google身份验证文档 b


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


但是,当导航到推荐目录(... Google / Chrome / Default / Extensions )我看不到我的解包扩展名。我意识到这是因为扩展没有安装为 .crx文件。但是,文档明确是为开发的目的而编写的。 :
$ b


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


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

解决方案

获取扩展ID的最简单方法是生成 .pem 文件,并使用这个答案(请阅读图片下方的部分)。



如果您只想使用命令行工具生成扩展名 ,然后再看。我打算使用 OpenSSL ,因为它是跨平台的。



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

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



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

Linux / Mac



OpenSSL安装在大多数Linux发行版上。如果没有,只需通过您最喜爱的软件包管理器安装 openssl $ b

 #创建名为key.pem的私钥
2> / dev / null openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -out key.pem

#生成在manifest.json中用作key的字符串(输出到stdout)
2> / dev / null openssl rsa -in key.pem -pubout -outform DER | openssl base64 -A

#计算扩展ID(输出到stdout)
2> / dev / null openssl rsa -in key.pem -pubout -outform DER | shasum -a 256 |头-c32 | tr 0-9a-f ap

我已经把 2> / dev / null ,以防止写入RSA密钥输出到控制台。



Windows



如果您没有OpenSSL,您可以从获取预编译的二进制文件这个镜像

  @echo off 
::假设你已经在这个目录中安装了OpenSSL
SET PATH =%PATH%; C:\ OpenSSL-Win32\bin

::创建名为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

::生成要用作在manifest.json中输入key
2> NUL openssl rsa -in key.pem -pubout -outform DER -out pub.tmp
2> NUL openssl base64 -A -in pub.tmp
del pub.tmp

::计算扩展ID
2> NUL openssl rsa -in key.pem -pub out -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 = 1%
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 来隐藏无害警告关于丢失的配置文件。



示例



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

 $#创建名为key.pem的私钥
$ 2> / dev / null openssl genrsa 2048 | openssl pkcs8 -topk8 -nocrypt -out key.pem
$#在manifest.json中生成用作key的字符串(输出到stdout)
$ 2> / dev / null openssl rsa -in key.pem -pubout -outform DER | OpenSSL的BASE64 -A
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8vj7SK0NZ6ak7K6m6KEAkfGaNfKUahqFFms6W8rq + voaW7nETrpsMqNyhmBQ + ea0KkyI / S5XIrDQPqDcNpvesYlg9lsmi7CQBZjJw7zNqKkvn0oYaP4SNtWZfZopBumqFbzFi5cst2PT + XU9CBitxXNtocRtcjOsa44W1gPA5xanmtlF258N6Nann + rSOAdhIWqSo / J6fj72cxTNfmqLkwAvhdS4Zyux4F87vxp4YTSwElfYXFsHZWi7h66uuuMzqyOyJz5grhCJ24rtTshMQUCxQWyhO2XT2J1tVfUN1YVw6xdKUz3aGyKZeXCuql5klHmlqE9PTlbKj / 1VMiIgCQIDAQAB $
$#计算扩展ID(输出到stdout)
$ 2> / dev / null openssl rsa -in key.pem -pubout -outform DER | sha256sum |头-c32 | tr 0-9a-f ap
mfabfdnimhipcapcioneheloaehhoggk $
$ cat key.pem#显示本演示完整性的key.pem内容
----- 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 / FjHxhC Jco0rNqNua
B0inGx2Jfb4b + FWwLyNobaYey11o0MjpkpAvYcfe3zW8DQtmepDxGL8CpORoWtFg
sVnmhAir0I6bxdZLMwKcp4T + kHW3n / ae3z8tPvMvclCnARGEp + ccyDH9X2iyaSd5
8DeJ6ND32 +年+ 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 -----


Although similar to this SO question, I am not asking:

Under what conditions does an extension's ID change?

nor

How can I upload my zip archive to the Chrome Dashboard?

I am however asking, how I can obtain an extension's key without using the Chrome Dashboard. Therefore, I do not consider it a duplicate of this SO question.

The documentation for using Google Identity inside a Chrome extension states the need to copy an extensions's key to its manifest file.

To keep your application ID constant, you need to copy the key in the installed manifest.json to your source manifest.

However, when navigating to the recommended directory (...Google/Chrome/Default/Extensions) I do not see the ID of my unpacked extension. I realise this is because the extension was not installed as .crx file. However, the documentation is clearly written for the purposes of development:

Copy key in the installed manifest.json to your source manifest, so that your application ID will stay constant during development.

How can I avoid packaging my extension and reinstalling each time I make a change? If my development extension has no installed manifest file from which I can obtain the extension's key, where can I get it from?

解决方案

The easiest way to get an extension ID is to generate the .pem file and extract the extension ID using the steps described in this answer (read the part below the image).

If you want to generate the extension ID with command-line tools only, then look further. I'm going to use OpenSSL because it is cross-platform.

First, we generate a private key. Keep this private key secret and do not loose it. Otherwise you will not be able to create a CRX file with the same extension ID. As of writing, the private keys generated by Chrome are 2048-bit RSA keys in PKCS #8 format (1024-bit until 2013). Throughout the answer, I will refer to this private key file as key.pem, because the Chrome Web Store expects that the private key is called key.pem.

Second, I show how to generate the value for the "key" field of the manifest file. This is just the public key, encoded in base64 format.

The third command in my answer shows how to calculate the extension ID given a public key (derived from a private key).

Linux / Mac

OpenSSL is installed on most Linux distros. If not, just install openssl via your favorite package manager.

# 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

I've put 2>/dev/null at the start of each line to prevent "writing RSA key" from being output to the console.

Windows

If you don't have OpenSSL, you can get a precompiled binary from this mirror.

@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

I've put 2>NUL at the start of each line with the openssl command to hide a harmless warning about a missing config file.

Examples

Here is an example of running the previous commands on Linux. The relevant output of the commands are boldfaced. The first command creates a file, so there is no visible output in the shell. Note that the output of the second and third command do not end with a line break, so there is a "$" at the end of the line (which should not be copied).

$ # 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-----

这篇关于获取Chrome扩展程序ID进行开发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆