Подтвердить что ты не робот

Получение идентификатора расширения Chrome для разработки

Хотя это похоже на этот вопрос SO, я не спрашиваю:

При каких условиях изменяется идентификатор расширения?

ни

Как я могу загрузить свой zip-архив на панель инструментов Chrome?

Я спрашиваю, как получить ключ расширения без использования панели инструментов Chrome. Поэтому я не рассматриваю его как дубликат этого SO-вопроса.

Документация рекомендуемому каталогу (... Google/Chrome/Default/Extensions) Я не вижу идентификатор моего распакованного расширения. Я понимаю, что это расширение не было установлено как . Crx файл. Однако документация четко написана для целей разработки:

Скопируйте ключ в установленный manifest.json в свой манифест источника, поэтому что ваш идентификатор приложения останется постоянным во время разработки.

Как я могу избежать упаковки моего расширения и переустановки при каждом изменении? Если в моем расширении разработки нет установленного файла манифеста, из которого я могу получить ключ расширения, откуда я могу его получить?

4b9b3361

Ответ 1

Самый простой способ получить идентификатор расширения - это сгенерировать файл .pem и извлечь идентификатор расширения, используя шаги, описанные в этом ответе (прочтите приведенную ниже часть изображение).

Если вы хотите сгенерировать идентификатор расширения только с инструментами командной строки, посмотрите дальше. Я собираюсь использовать OpenSSL, потому что это кросс-платформенный.

Сначала мы создаем закрытый ключ. Храните секретный ключ в секрете и не теряйте его. В противном случае вы не сможете создать файл CRX с тем же идентификатором расширения. С момента написания секретные ключи, созданные Chrome, 2048-разрядные ключи RSA в формате PKCS # 8 (1024-бит до 2013 года). В течение всего ответа я буду ссылаться на этот файл закрытого ключа как key.pem, потому что веб-магазин Chrome ожидает, что закрытый ключ называется key.pem.

Во-вторых, я покажу, как создать значение для поля "key" файла манифеста. Это всего лишь открытый ключ, закодированный в формате base64.

Третья команда в моем ответе показывает, как вычислять идентификатор расширения, заданный открытым ключом (полученный из закрытого ключа).

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

Я положил 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

Я положил 2>NUL в начале каждой строки командой openssl, чтобы скрыть безобидное предупреждение о отсутствующем файле конфигурации.

Примеры

Вот пример запуска предыдущих команд в Linux. Соответствующий вывод команд выделен жирным шрифтом. Первая команда создает файл, поэтому в оболочке нет видимого вывода. Обратите внимание, что вывод второй и третьей команд не заканчивается разрывом строки, поэтому в конце строки есть "$" (который не следует копировать).

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

Ответ 2

Самый простой способ, который я нашел для этого, - упаковать расширение chrome в режиме разработки.

Чтобы упаковать расширение:

Поднимите страницу управления расширениями, перейдя по этому URL-адресу: хром://расширение

Убедитесь, что флажок "Режим разработчика установлен в верхнем правом углу. Нажмите кнопку Расширение пакета. Появится диалоговое окно.

В поле Корневой каталог расширения укажите путь к папке расширения - например, ~/mytodosextension. (Игнорируйте другое поле, вы не укажете файл закрытого ключа при первом подключении определенного расширения.)

Нажмите Пакет. Пакетщик создает два файла:

  • Файл .crx, который является фактическим расширением, которое можно установить,

  • и файл .pem, содержащий закрытый ключ.

См. документацию хрома здесь