下载 Nginx 后,验证文件的完整性和真实性非常重要,可以确保文件未被篡改且来自官方来源。
使用 PGP 签名验证文件的真实性。
Linux:
# Ubuntu/Debian
sudo apt install gnupg
# CentOS/RHEL
sudo yum install gnupg2
# Alpine
sudo apk add gnupg
macOS:
brew install gnupg
Windows:
下载并安装 Gpg4win
# 下载签名密钥
curl -O https://nginx.org/keys/nginx_signing.key
# 导入密钥
gpg --import nginx_signing.key
# 验证密钥
gpg --list-keys
输出示例:
pub rsa2048 2011-08-19 [SC]
B0F4253373F8F5F5ADA8A3BC2FFE8E521A1D9F87
uid [ unknown] nginx signing key <signing-key@nginx.com>
sub rsa2048 2011-08-19 [E]
# 下载文件和签名
wget http://nginx.org/download/nginx-1.24.0.tar.gz
wget http://nginx.org/download/nginx-1.24.0.tar.gz.asc
# 验证签名
gpg --verify nginx-1.24.0.tar.gz.asc nginx-1.24.0.tar.gz
成功输出:
gpg: Signature made Mon 24 Apr 2023 12:34:56 PM UTC
gpg: using RSA key B0F4253373F8F5F5ADA8A3BC2FFE8E521A1D9F87
gpg: Good signature from "nginx signing key <signing-key@nginx.com>" [unknown]
使用文件的哈希值验证完整性。
# 下载哈希文件
wget http://nginx.org/download/nginx-1.24.0.tar.gz.md5
wget http://nginx.org/download/nginx-1.24.0.tar.gz.sha1
wget http://nginx.org/download/nginx-1.24.0.tar.gz.sha256
Linux:
md5sum -c nginx-1.24.0.tar.gz.md5
macOS:
md5 -q nginx-1.24.0.tar.gz | diff - nginx-1.24.0.tar.gz.md5
Windows (PowerShell):
$hash = (Get-FileHash nginx-1.24.0.tar.gz -Algorithm MD5).Hash.ToLower()
$expected = (Get-Content nginx-1.24.0.tar.gz.md5).Split()[0]
if ($hash -eq $expected) {
Write-Host "MD5 verification passed"
} else {
Write-Host "MD5 verification failed"
}
Linux:
sha1sum -c nginx-1.24.0.tar.gz.sha1
macOS:
shasum -a 1 -c nginx-1.24.0.tar.gz.sha1
Windows (PowerShell):
$hash = (Get-FileHash nginx-1.24.0.tar.gz -Algorithm SHA1).Hash.ToLower()
$expected = (Get-Content nginx-1.24.0.tar.gz.sha1).Split()[0]
if ($hash -eq $expected) {
Write-Host "SHA1 verification passed"
} else {
Write-Host "SHA1 verification failed"
}
Linux:
sha256sum -c nginx-1.24.0.tar.gz.sha256
macOS:
shasum -a 256 -c nginx-1.24.0.tar.gz.sha256
Windows (PowerShell):
$hash = (Get-FileHash nginx-1.24.0.tar.gz -Algorithm SHA256).Hash.ToLower()
$expected = (Get-Content nginx-1.24.0.tar.gz.sha256).Split()[0]
if ($hash -eq $expected) {
Write-Host "SHA256 verification passed"
} else {
Write-Host "SHA256 verification failed"
}
如果哈希文件不可用,可以手动计算并对比。
# MD5
md5sum nginx-1.24.0.tar.gz
# SHA1
sha1sum nginx-1.24.0.tar.gz
# SHA256
sha256sum nginx-1.24.0.tar.gz
# MD5
Get-FileHash nginx-1.24.0.tar.gz -Algorithm MD5
# SHA1
Get-FileHash nginx-1.24.0.tar.gz -Algorithm SHA1
# SHA256
Get-FileHash nginx-1.24.0.tar.gz -Algorithm SHA256
# 下载
wget http://nginx.org/download/nginx-1.24.0.tar.gz
wget http://nginx.org/download/nginx-1.24.0.tar.gz.asc
# 验证
gpg --verify nginx-1.24.0.tar.gz.asc nginx-1.24.0.tar.gz
sha256sum -c nginx-1.24.0.tar.gz.sha256
# 下载
wget http://nginx.org/packages/ubuntu/pool/nginx/n/nginx/nginx_1.24.0-1~jammy_amd64.deb
wget http://nginx.org/packages/ubuntu/pool/nginx/n/nginx/nginx_1.24.0-1~jammy_amd64.deb.asc
# 验证
gpg --verify nginx_1.24.0-1~jammy_amd64.deb.asc nginx_1.24.0-1~jammy_amd64.deb
# 下载
wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.24.0-1.el7.ngx.x86_64.rpm
wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.24.0-1.el7.ngx.x86_64.rpm.asc
# 验证
gpg --verify nginx-1.24.0-1.el7.ngx.x86_64.rpm.asc nginx-1.24.0-1.el7.ngx.x86_64.rpm
# 下载
curl -O http://nginx.org/download/nginx-1.24.0.zip
curl -O http://nginx.org/download/nginx-1.24.0.zip.asc
# 验证
gpg --verify nginx-1.24.0.zip.asc nginx-1.24.0.zip
#!/bin/bash
# verify_nginx.sh
FILE=$1
if [ -z "$FILE" ]; then
echo "Usage: $0 <file>"
exit 1
fi
# 检查签名文件
if [ -f "${FILE}.asc" ]; then
echo "Verifying PGP signature..."
gpg --verify "${FILE}.asc" "$FILE"
if [ $? -eq 0 ]; then
echo "✓ PGP signature verified"
else
echo "✗ PGP signature verification failed"
exit 1
fi
else
echo "Warning: PGP signature file not found"
fi
# 验证 SHA256
if [ -f "${FILE}.sha256" ]; then
echo "Verifying SHA256 hash..."
sha256sum -c "${FILE}.sha256"
if [ $? -eq 0 ]; then
echo "✓ SHA256 hash verified"
else
echo "✗ SHA256 hash verification failed"
exit 1
fi
else
echo "Warning: SHA256 hash file not found"
fi
echo "All verifications passed"
使用:
chmod +x verify_nginx.sh
./verify_nginx.sh nginx-1.24.0.tar.gz
# verify_nginx.ps1
param(
[Parameter(Mandatory=$true)]
[string]$FilePath
)
# 验证 SHA256
$hashFile = "$FilePath.sha256"
if (Test-Path $hashFile) {
Write-Host "Verifying SHA256 hash..."
$hash = (Get-FileHash $FilePath -Algorithm SHA256).Hash.ToLower()
$expected = (Get-Content $hashFile).Split()[0]
if ($hash -eq $expected) {
Write-Host "✓ SHA256 hash verified"
} else {
Write-Host "✗ SHA256 hash verification failed"
Write-Host "Expected: $expected"
Write-Host "Got: $hash"
exit 1
}
} else {
Write-Host "Warning: SHA256 hash file not found"
}
Write-Host "All verifications passed"
使用:
.\verify_nginx.ps1 nginx-1.24.0.zip
# 错误信息
gpg: Can't check signature: No public key
# 解决方案
gpg --keyserver keys.gnupg.net --recv-keys B0F4253373F8F5F5ADA8A3BC2FFE8E521A1D9F87
# 错误信息
gpg: Good signature from "nginx signing key <signing-key@nginx.com>" [unknown]
# 解决方案
# 手动验证指纹后信任密钥
gpg --edit-key B0F4253373F8F5F5ADA8A3BC2FFE8E521A1D9F87
gpg> trust
gpg> 5
gpg> save
# 错误信息
nginx-1.24.0.tar.gz: FAILED
# 解决方案
# 重新下载文件
wget http://nginx.org/download/nginx-1.24.0.tar.gz
# 错误信息
gpg: BAD signature
# 解决方案
# 重新下载文件
wget http://nginx.org/download/nginx-1.24.0.tar.gz
公钥指纹:573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
密钥 ID:B0F4253373F8F5F5ADA8A3BC2FFE8E521A1D9F87
邮箱:signing-key@nginx.com
验证下载的文件是确保安全的重要步骤: