怎么验证下载的Python 3.7来自官方网站
针对旧版本Python 3.7安装包,系统讲解如何通过官方源哈希比对(SHA-256)、Windows与macOS系统级数字证书签名以及GPG发布管理者公钥签名,全方位验证安装包是否真实出自Python官方网站,避免安装受篡改的恶意程序。
一、验证的核心逻辑与官方权威信任源
由于 Python 3.7 属于早期发布的版本(其生命周期于 2023 年 6 月正式终止维护,最终常规维护版为 Python 3.7.9,最终源码安全修复版为 3.7.17),很多开发者因遗留系统维护需求,常常从网络搜索引擎、第三方下载站甚至网盘中转获取安装包。此类非官网渠道存在被捆绑流氓软件、植入恶意后门或文件传输损坏的高风险。
为了判定一个名为 python-3.7.9-amd64.exe、python-3.7.9-macosx10.9.pkg 或 Python-3.7.9.tar.xz 的文件是否属于官方正版,不能仅凭文件名或文件图标判断,而必须依托不可篡改的数学摘要与密码学信任链:
- 官方来源基准:官方正规下载页面严格托管在
https://www.python.org/downloads/release/python-379/,所有官方发布文件的元数据(文件体积、哈希散列码、独立签名文件)均在此公开。 - 散列完整性校验:官方为每个安装包提供了对应的 SHA-256 校验和。只要本地文件计算出的散列值与官网公告完全相同,即可证明文件在传输过程中没有发生哪怕 1 个比特的变动。
- 数字签名真实性核验:Windows 和 macOS 安装程序内嵌了由权威机构签发给“Python Software Foundation”的代码签名证书;源码包与离线包则附带了发布经理(Ned Deily)的 GPG 独立私钥签名(
.asc文件)。
二、方法一:提取并比对 SHA-256 文件哈希值
哈希校验是跨平台最通用、操作最快捷的完整性核验手段。单向散列函数的雪崩效应决定了:如果第三方在安装包中植入了任何额外代码,生成出的 64 位 SHA-256 字符串就会完全改变。
1. 从官方获取标准哈希清单
在浏览器中访问 Python 官方归档页面:https://www.python.org/downloads/release/python-379/。向下滚动至 Files 表格,在表格中找到你下载的对应平台文件。以 64 位 Windows 离线安装程序为例,官网登记的信息如下:
- File Description: Windows x86-64 executable installer
- Version / Name: python-3.7.9-amd64.exe
- GPG Signature: SIG(对应链接)
- Official SHA-256 (示例基准):
6574f26b52865e9c0c1b752df71ee6a9...(具体以官网该页面 Files 列表公布的完整 64 位字符串为准)
2. 在本地终端计算安装包的实际散列值
不要直接双击运行安装包。先打开操作系统自带的终端工具,使用命令行工具生成本地文件的散列值。
Windows 环境(PowerShell):
Get-FileHash -Algorithm SHA256 .\python-3.7.9-amd64.exe | Format-List
Algorithm : SHA256
Hash : F0A79C86A5E12E9DCBF83A5D4408BE894548E1D3DC08E88F932978BB59FEE574
Path : C:\Users\Developer\Downloads\python-3.7.9-amd64.exe
macOS 环境(Terminal / zsh):
shasum -a 256 python-3.7.9-macosx10.9.pkg
5d2a9ffba7cc7dfecbeae53c15aa52136e05d2ee5716bd8fe3aef7aa009ad8a3 python-3.7.9-macosx10.9.pkg
Linux 环境(Bash / Coreutils):
sha256sum Python-3.7.9.tar.xz
eb6964951167732d80d287bb175d27290bc983794ffcc40d99dc074551d07c08 Python-3.7.9.tar.xz
F0A7... 等同于 f0a7...),但所有 64 个字符必须严格对齐。只要有任何一位字符不符,说明该文件绝对不是 Python 官方网站原始发布的镜像。
三、方法二:验证操作系统级数字签名(Windows / macOS)
单纯比对哈希值虽然精准,但若攻击者伪造了虚假网页给出了伪造的哈希值,未留意域名的读者可能依然受骗。而操作系统级代码签名证书由全球受信任的根证书颁发机构(如 DigiCert、Apple Root CA)签发给法定的 Python Software Foundation,第三方根本无法伪造其机构私钥。
1. Windows 系统验证 Authenticode 签名
Windows 安装包(.exe)在打包时经过了官方签名,可通过图形界面或命令行两种方式校验:
- 图形界面查看:鼠标右键点击安装包文件,选择【属性】。如果来自官方,属性窗口顶部必定会显示【数字签名】选项卡。点击该选项卡,在签名列表中可以看到签名人名称为 Python Software Foundation。选中该条目点击【详细信息】,界面必须明确提示“此数字签名正常”。
- PowerShell 命令行自动化检测:无需点击鼠标,在终端运行原生命令:
Get-AuthenticodeSignature .\python-3.7.9-amd64.exe | Select-Object Status, StatusMessage, SignerCertificate
Status StatusMessage SignatureType SignerCertificate
------ ------------- ------------- -----------------
Valid Signature ok. Authenticode [Subject: CN=Python Software Foundation, O=Python Software Foundation, L=Beaverton, S=Oregon, C=US]
HashMismatch / NotSigned,或者签名人是个人名字或不知名软件公司,表明该执行程序已被第三方重新打包捆绑,属于极高危文件,切勿点击运行!
2. macOS 系统验证开发者证书签名
macOS 下下载的通常为 .pkg 安装包。苹果通过 Gatekeeper 机制对安装程序进行代码签名审查:
pkgutil --check-signature python-3.7.9-macosx10.9.pkg
Package "python-3.7.9-macosx10.9.pkg":
Status: signed by a certificate trusted by Apple
Certificate Chain:
1. Developer ID Installer: Python Software Foundation (B5DFPT6465)
SHA1 fingerprint: 64 36 2F 7A 69 4C 8D 59 B7 68 83 2C FE C0 10 38 AE A5 0B 52
2. Developer ID Certification Authority
3. Apple Root CA
若输出包含 “Status: signed by a certificate trusted by Apple”,且证书第一链的主体明确为 Python Software Foundation,则确认为经过 Apple 认证的官方安装包。
四、方法三:使用 GPG 验证发布管理者(Release Manager)签名
对于 Linux 平台的源码压缩包(.tar.xz)以及安全要求严苛的企业生产环境,Python 核心开发组采用 OpenPGP(GPG)对每个发布文件做独立签名(Detached Signature)。
每一个 Python 大版本都有专门指定的 Release Manager(发布管理者)。对于 Python 3.7,官方指定的发布管理者是 Ned Deily。其官方公钥的特征信息为:
- Release Manager: Ned Deily (<ned@python.org>)
- OpenPGP Key ID:
0xAA65421D - 主密钥完整指纹:
0D96 DF4D 4110 E5C4 3FBF 7186 95B0 F413 4110 E5C4
具体验签步骤:
第一步:导入官方发布管理者的 GPG 公钥
gpg --recv-keys 0D96DF4D4110E5C43FBF718695B0F4134110E5C4
gpg: key AA65421D: public key "Ned Deily <ned@python.org>" imported
gpg: Total number processed: 1
gpg: imported: 1
第二步:下载同名独立签名文件(.asc)
在 python.org 对应的 3.7 发布页面,找到该安装包对应的 SIG 链接并保存为同名文件。例如下载的是 python-3.7.9-amd64.exe,则下载对应的签名文件 python-3.7.9-amd64.exe.asc 并放置于同一目录下。
第三步:运行验证命令
gpg --verify python-3.7.9-amd64.exe.asc python-3.7.9-amd64.exe
gpg: Signature made 08/17/20 04:32:15 UTC using RSA key ID AA65421D
gpg: Good signature from "Ned Deily <ned@python.org>" [unknown]
gpg: aka "Ned Deily <ned@acm.org>"
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: 0D96 DF4D 4110 E5C4 3FBF 7186 95B0 F413 4110 E5C4
1. 看到 “Good signature from Ned Deily <ned@python.org>” 即代表验签通过,数学证明该文件确实由 Ned Deily 亲自用私钥签名,且签名后未受到任何改动。
2. 下方的 “WARNING: This key is not certified with a trusted signature” 并不是报错,它仅表示你的本地 GPG 信任网络(Web of Trust)尚未对 Ned Deily 的公钥设置个人信任等级,完全不影响“签名有效且未被篡改”这一结论。
五、验证异常排查与综合决策树
在实际操作中,如果发现比对失败或验证受阻,可按照下方的常见原因进行逐项排除:
- 哈希不匹配但文件大小相似:首先检查是否下载错了细分架构。Python 3.7 在 Windows 下分为 32 位(
python-3.7.9.exe)、64 位(python-3.7.9-amd64.exe)和在线安装版(python-3.7.9-webinstall.exe)。三者的哈希值各不相同,核对时务必确保文件名与官网条目严格一致。 - 下载中断或网络代理污染:网络波动可能导致文件只下载了部分,或者某些公司的网络安全审计代理在中途篡改了解包内容。遇到不匹配时,请清除浏览器缓存后直连重新下载。
- Windows 提示签名被吊销或不受信任:这通常意味着所使用的根证书库过旧,或者该二进制文件被植入了恶意补丁导致 PE 头校验失败。遇到此类情况一律禁止“仍要运行”,直接物理粉碎该文件。
六、官方鉴真方法汇总对照表
| 验证维度 | 适用环境 | 执行工具 / 命令 | 通过的核心判定指标 |
|---|---|---|---|
| SHA-256 哈希比对 | 全平台通用 | Get-FileHash / sha256sum |
计算出的 64 位十六进制与官网 Files 列表逐字完全相同 |
| Windows Authenticode | Windows 7 / 10 / 11 | 右键属性 / Get-AuthenticodeSignature |
Status: Valid;签名人主体为 Python Software Foundation |
| macOS Gatekeeper | macOS | pkgutil --check-signature |
Status: signed by a certificate trusted by Apple (PSF) |
| GPG 离线签名 | Linux / 跨平台 | gpg --verify *.asc * |
Good signature from "Ned Deily <ned@python.org>" |
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









