MySQL 8.0 安全部署指南  /  第 3 章验证包完整性

第 3 章验证包完整性

下载 MySQL 包后,在尝试安装之前,请确保包完好无损且未被篡改。MySQL Linux 通用二进制包的完整性检查有两种方法:MD5 ChecksumSignature Checking Using GnuPG。此部署中使用了 使用 GnuPG 的签名检查。

MySQL 使用GnuPG (GNU Privacy Guard) 对其可下载的包进行签名 。大多数 Linux 发行版都默认安装了GnuPG 。否则,请参阅http://www.gnupg.org/以获取有关GnuPG以及如何获取和安装它的更多信息。

  1. 要验证 MySQL 下载包的签名,请获取 MySQL 公共 GPG 构建密钥的副本,您可以从http://pgp.mit.edu/下载。键名为mysql-build@oss.oracle.com

    1. 在您的浏览器中,导航至 http://pgp.mit.edu/

    2. 搜索字符串字段中,输入密钥名称,mysql-build@oss.oracle.com然后单击执行搜索!

      返回此搜索结果:

      Type bits/keyID     Date       User ID
      -----------------------------------------------------------------------------------------------
      pub  4096R/3A79BD29 2021-12-14 MySQL Release Engineering <mysql-build@oss.oracle.com>
      
      pub  1024D/5072E1F5 2003-02-03 MySQL Release Engineering <mysql-build@oss.oracle.com>
                                     MySQL Package signing key (www.mysql.com) <build@mysql.com>
    3. 单击keyID链接,复制密钥,并将其保存到名为 的文件 mysql_pubkey.asc中,例如。 keyID 3A79BD29适用于 MySQL 8.0.28 及更高版本。 keyID 5072E1F5适用于早期的 MySQL 版本。

      或者,您可以直接从 MySQL 参考手册中复制并粘贴密钥。请参阅 使用 GnuPG 检查签名

  2. 要将构建密钥导入您的个人公共 GPG 密钥环,请使用gpg --import命令。例如,如果您将密钥保存到名为 的文件 mysql_pubkey.asc中,则导入命令如下所示:

    $> gpg --import mysql_pubkey.asc
    gpg: key 5072E1F5: public key "MySQL Release Engineering
    <mysql-build@oss.oracle.com>" imported
    gpg: Total number processed: 1
    gpg:               imported: 1
    gpg: no ultimately trusted keys found
  3. .asc导入公共构建密钥后,将您创建的公共构建密钥文件放在与 MySQL 下载包中包含 的签名文件相同的目录中 。

    签名文件与分发文件同名并带有.asc扩展名,如下表所示。

    表 3.1 源文件的 MySQL 包和签名文件

    文件类型 文件名
    分发文件 mysql-commercial-8.0.xx-linux-glibc2.12-x86_64.tar.xz
    签名文件 mysql-commercial-8.0.xx-linux-glibc2.12-x86_64.tar.xz.asc

  4. 运行此命令以验证分发文件的签名:

    $> gpg --verify mysql-commercial-8.0.xx-linux-glibc2.12-x86_64.tar.xz.asc

    如果下载的包有效,则验证返回类似于以下内容的“Good signature”消息:

    $> gpg --verify mysql-commercial-8.0.xx-linux-glibc2.12-x86_64.tar.xz.asc
    gpg: Signature made Tue 01 Feb 2011 02:38:30 AM CST using DSA key ID 5072E1F5
    gpg: Good signature from "MySQL Release Engineering <mysql-build@oss.oracle.com>"

    Good signature消息表明文件签名有效,但您可能还会看到警告:

    $> gpg --verify mysql-commercial-8.0.xx-linux-glibc2.12-x86_64.tar.xz.asc
    gpg: Signature made Wed 23 Jan 2013 02:25:45 AM PST using DSA key ID 5072E1F5
    gpg: checking the trustdb
    gpg: no ultimately trusted keys found
    gpg: Good signature from "MySQL Release Engineering <mysql-build@oss.oracle.com>"
    gpg: WARNING: This key is not certified with a trusted signature!
    gpg:          There is no indication that the signature belongs to the owner.
    Primary key fingerprint: A4A9 4068 76FC BD3C 4567  70C8 8C71 8D3B 5072 E1F5

    遇到警告是正常的,因为它们取决于您的设置和配置。以下是对警告的解释:

    • gpg: no ultimately trusted keys found:这意味着特定密钥不是您或您 的信任网络“最终信任”的,这对于验证文件签名是可以的。

    • 警告:此密钥未经可信签名认证!没有迹象表明签名属于所有者。:这是指您相信您拥有我们的真实公钥的信任程度。这是个人决定。理想情况下,MySQL 开发人员会亲自将密钥交给您,但更常见的是,您下载了它。下载是否被篡改?可能不是,但这个决定取决于你。建立 信任网是信任他们的一种方法。

如果 GPG 签名不匹配,请尝试再次下载相应的包。

有关 GnuPG 签名检查的其他信息,请参阅 使用 GnuPG 进行签名检查