是否可以仅使用 CLI (Ubuntu-server) 在服务器上使用密钥 (*.pem) 打包 chrome 扩展?
问问题
9225 次
2 回答
24
更新:chrome 现在使用第 3 版,而 google 发布的脚本仅适用于第 2 版
在https://developer.chrome.com/extensions/crx#scripts中列出了版本 2 的官方打包脚本——一个在 Bash 中,一个在 Ruby 中。谷歌现在希望他们为网上商店打包应用程序。
但是,这是一个用于打包 CRX3 包的修改后的脚本:
# Purpose: Pack a Chromium extension directory into crx format
if test $# -ne 2; then
echo "Usage: crxmake.sh <extension dir> <pem path>"
exit 1
fi
dir=$1
key=$2
name=$(basename "$dir")
crx="$name.crx"
pub="$name.pub"
sig="$name.sig"
zip="$name.zip"
tosign="$name.presig"
binary_crx_id="$name.crxid"
trap 'rm -f "$pub" "$sig" "$zip" "$tosign" "$binary_crx_id"' EXIT
# zip up the crx dir
cwd=$(pwd -P)
(cd "$dir" && zip -qr -9 -X "$cwd/$zip" .)
#extract crx id
openssl rsa -in "$key" -pubout -outform der | openssl dgst -sha256 -binary -out "$binary_crx_id"
truncate -s 16 "$binary_crx_id"
#generate file to sign
(
# echo "$crmagic_hex $version_hex $header_length $pub_len_hex $sig_len_hex"
printf "CRX3 SignedData"
echo "00 12 00 00 00 0A 10" | xxd -r -p
cat "$binary_crx_id" "$zip"
) > "$tosign"
# signature
openssl dgst -sha256 -binary -sign "$key" < "$tosign" > "$sig"
# public key
openssl rsa -pubout -outform DER < "$key" > "$pub" 2>/dev/null
crmagic_hex="43 72 32 34" # Cr24
version_hex="03 00 00 00" # 3
header_length="45 02 00 00"
header_chunk_1="12 AC 04 0A A6 02"
header_chunk_2="12 80 02"
header_chunk_3="82 F1 04 12 0A 10"
(
echo "$crmagic_hex $version_hex $header_length $header_chunk_1" | xxd -r -p
cat "$pub"
echo "$header_chunk_2" | xxd -r -p
cat "$sig"
echo "$header_chunk_3" | xxd -r -p
cat "$binary_crx_id" "$zip"
) > "$crx"
echo "Wrote $crx"
该脚本根据源代码中的信息进行了修改:
以及标头的序列化文档。
这个脚本可以很容易地在 docker 容器中使用以实现自动化:
FROM alpine:3.9
RUN apk add --no-cache git openssl zip vim
COPY scripts/crxmake.sh /usr/local/bin/crxmake
于 2013-09-10T00:52:03.850 回答
23
您可以使用应用程序开关--pack-extension
并--pack-extension-key
按照文档中的说明进行操作。
基本上,在 Windows 上,您将在终端中运行以下命令:
chrome.exe --pack-extension=c:\myext --pack-extension-key=c:\myext.pem
它也适用于 Mac:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --pack-extension=./myext --pack-extension-key=./myext.pem
在 Ubuntu 上应该是类似的。
省略--pack-extension-key
会自动为您创建一个密钥。
于 2013-09-09T16:13:54.610 回答