Eclipse Temurin 发布版本包含 GPG 签名,您可以使用它来验证下载内容的真实性,确保其自构建以来未被篡改。本页说明如何验证这些签名。
什么是 GPG 签名?
GPG 签名是一种密码学过程,使用私钥/公钥对来确认文件自发布到交付给您之间未被篡改。Adoptium 使用私钥生成与 OpenJDK 二进制文件一起分发的签名文件。您可以获取相应的公钥,并使用它验证签名是否有效,从而证明文件的完整性,并确认它由 Adoptium 签名且未被第三方修改。
为什么使用 GPG 签名而不是 SHA-256 校验和?
虽然 SHA-256 校验和可以验证下载内容在传输过程中未损坏,但它们也可能在中间人攻击中被破坏。GPG 签名通过使用单独认证的签名避免了这一问题,您可以独立信任该签名,然后据此验证后续下载。
获取签名
每个二进制文件的 GPG 签名可通过 Adoptium API 元数据获取。以下示例使用 JDK 25,您可以调整 API 调用以适用于其他版本。
下载发布元数据:
curl 'https://api.adoptium.net/v3/assets/feature_releases/25/ga' > adopt.json
使用 jq 命令行 JSON 工具提取二进制下载链接及其对应的签名链接。相关信息位于 binaries[].package.link 和 binaries[].package.signature_link 字段中。
例如,下载 Linux x64 JDK 及其签名:
jq '.[0].binaries[] | select(.architecture=="x64") | select (.os=="linux") | select (.image_type=="jdk") .package.link' adopt.json | xargs curl -LO
jq '.[0].binaries[] | select(.architecture=="x64") | select (.os=="linux") | select (.image_type=="jdk") .package.signature_link' adopt.json | xargs curl -LO
您也可以从元数据中获取 SHA-256 校验和:
jq '.[0].binaries[] | select(.architecture=="x64") | select (.os=="linux") | select (.image_type=="jdk") .package.checksum' adopt.json
将 SHA-256 校验和与以下命令之一的输出进行比较验证:
-
Linux:
sha256sum <file> -
macOS:
shasum -a 256 <file> -
Windows:
certUtil -hashfile <file> SHA256
验证签名
您需要安装 gpg 工具。运行验证命令,提供签名文件和对应的二进制文件:
gpg --verify <binary_filename>.sig <binary_filename>
如果您还没有 Adoptium 的公共签名密钥,您将看到类似以下的消息:
gpg: Signature made Mon Jul 4 18:20:31 2022 UTC
gpg: using RSA key 3B04D753C9050D9A5D343F39843C48A565F8F04B
gpg: Can't check signature: No public key
导入 Adoptium 公钥
从受信任的 GPG 密钥服务器下载密钥:
gpg --keyserver keyserver.ubuntu.com --recv-keys 3B04D753C9050D9A5D343F39843C48A565F8F04B
再次运行验证命令。您将看到签名有效,但密钥尚未被信任:
gpg: Good signature from "Adoptium GPG Key (DEB/RPM Signing Key) <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
信任密钥
要完全信任该密钥并消除警告,请运行以下命令并按提示授予最终信任:
gpg --edit-key 3B04D753C9050D9A5D343F39843C48A565F8F04B trust
此后验证应成功:
gpg: Signature made Mon Jul 4 18:20:31 2022 UTC
gpg: using RSA key 3B04D753C9050D9A5D343F39843C48A565F8F04B
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: Good signature from "Adoptium GPG Key (DEB/RPM Signing Key) <[email protected]>" [ultimate]

