文件校验
比如在apache
下载的 tomcat 的时候,一般下载长这样:
Core:
- zip (pgp, sha512)
- tar.gz (pgp, sha512)
- 32-bit Windows zip (pgp, sha512)
- 64-bit Windows zip (pgp, sha512)
- 32-bit/64-bit Windows Service Installer (pgp, sha512)
或者下载rocketmq
Binary: rocketmq-all-4.7.1-bin-release.zip [PGP] [SHA512]
后面都有对应的PGP
签名文件和对应的HASH
加密字符串文件。
之所以需要校验是验证文件完整性,防止篡改等非法验证,一般可以通过校验和或签名来验证从镜像下载的文件。
1. Hash校验
校验和算法很多;
比如:SHA-1,SHA-256,SHA-512,MD5。
Hash | Windows OS | Linux OS | Mac | 比较文件 |
---|---|---|---|---|
Windows | Linux | Mac | ||
SHA-1 | certUtil -hashfile file SHA1 | sha1sum file | shasum -a 1 file | file.sha1 |
SHA-256 | certUtil -hashfile file SHA256 | sha256sum file | shasum -a 256 file | file.sha256 |
SHA-512 | certUtil -hashfile file SHA512 | sha512sum file | shasum -a 512 file | file.sha512 |
MD5 | certUtil -hashfile file MD5 | md5sum file | md5 file | file.md5 |
Demo:
比如下载 rocketmq-all-4.7.1-bin-release.zip
和对应的SHA512
,就可以得到rocketmq-all-4.7.1-bin-release.zip
(发行版)和apache-tomcat-8.5.60-windows-x64.zip.sha512
(hash)两个文件。
rocketmq-all-4.7.1-bin-release.zip: 5DC22C3A 981FDD2A 99BC95C2 EA29C258 227CDB1D
64FC7E54 A83486EE 099EE478 B66E19A4 4BF07577
54039832 D97C4AA0 86FEA4FE 445748C9 861C8AB8
0B611868
进行校验:
certUtil -hashfile rocketmq-all-4.7.1-bin-release.zip SHA512
输出结果:
SHA512 的 D:\distributed-tools\rocketmq-all-4.7.1-bin-release.zip 哈希:
5dc22c3a981fdd2a99bc95c2ea29c258227cdb1d64fc7e54a83486ee099ee478b66e19a44bf0757754039832d97c4aa086fea4fe445748c9861c8ab80b611868
可以将这个哈希值和apache-tomcat-8.5.60-windows-x64.zip.sha512
里的哈希值比较一下。
2. 签名校验
签名校验一般需要下载2文件:
- release 版正常程序文件,如
.tar
,.tar.gz
,.zip
后缀结尾等。 - release 版对应的签名文件,如
asc
后缀结尾等。
比如下载 64-bit Windows zip
和对应的 pgp
,就可以得到apache-tomcat-8.5.60-windows-x64.zip
(发行版)和apache-tomcat-8.5.60-windows-x64.zip.asc
(分离的签名)两个文件。
分离签名的内容大概就是一串加密字符串:
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEqcXfTSLpmZjZh1pREMAcWi9gWecFAl+tcrMACgkQEMAcWi9g
WefpmBAAqzmWd0m0qeqziRILu6xsv3aqROlyQRGhRFbyaUZ94tPbZjufZ/XCb7wp
nFbPo4zlru1LjN0nqpj8rtCVNNcLmefKz0nIsxMx4dMDR5nkHeyCCrAfBeELrIKA
z/0OH8QjLYGfa4vLPTt+8uzAZEsnE8liWWrf7nuWc8gQZqc3OAyEpWtPv2j/Hy+h
c2CggthI8/mIf+x2vRaWHXWQCiqmhunm7fDmrcPfujwz/0ub3xXqhbeahj7I/f60
z2FxslfUQmDg4OpwINyx8kipRIR/3MS/Jjf4OUmZ8EKst7MdIAomd9qs8B/2DUgH
xq9rT+nrhKu2zTpBG5KLLc0jHafl/rf3ndlWn2+vAl2EtdlVmVDU+feniwmB+vez
1/1FEg2aNZCds73RLrlRp+m9SpBP66TEgLd6iK+OMEMCfBBNcjwNNsdV4wYLJzZ+
Gep9frYgH19bPMrtH/9rnYdLivezcVN9Aumy2wsBlKhCF87fIxWzwFbl0m2Ewu9Z
l7EaQzawSRRcerxUrZEt/wSeke6NLo3z/1pBJgcj4CtvRjx+L5vEACdAczk0xbTs
HKRJSXLimzD9zJYHWBXruJ/Y4ePW6WsRPc7mwLOP/dAxglCX5tJz9XBD+zmHHlym
C8lmhLIzrjhKcoldqwFmMNb6+1daInBWs0C59cu48h/ut0zEapQ=
=5nOe
-----END PGP SIGNATURE-----
签名校验时,需要同时指定分离的签名和发布文件。
gpg –verify apache-tomcat-8.5.60-windows-x64.zip.asc apache-tomcat-8.5.60-windows-x64.zip
如果出现:public key not found
就需要获取key,会提示对应的加密KEY的ID
gpg –keyserver pgpkeys.mit.edu –recv-key KEY_ID
也可以先验证KEY_ID的真实性:
gpg --fingerprint KEY_ID
会出现对应的KEY_ID 和对应的开发人员信息,比如apache的可以在网站找到对应的成员,就说明是开发者的签名。
再次重新验证:
gpg –verify apache-tomcat-8.5.60-windows-x64.zip.asc apache-tomcat-8.5.60-windows-x64.zip