我使用 openssl 制作了 pub/prv 密钥,创建了文件签名并验证了它。我玩了 Cryptophane(windows gnupg 前端),听说过密钥服务器,也玩过签名文本。
但是我从未签署过文件档案。如果我想发布一个档案(7z、rar 或 zip,无所谓),并且希望我的用户或软件能够检查该档案是否已签名,我该怎么做?公钥显然需要公开。但将签名添加到档案中让我很困扰。是否有任何软件+档案允许我签署和验证压缩档案文件?
答案1
一种常见的方法是创建独立签名在一个.sig
文件中(通常使用gpg -b
X.509 的 PGP 签名非常少见),并在同一位置提供两个文件。例如:
ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.19.tar.bz2
ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.19.tar.bz2.sig
这可以用于任何类型的文件,但用户必须使用手动验证签名gpg --verify
。
不幸的是,在目前正在使用的据我所知,没有一种存档格式支持内置签名使用 PGP 或 X.509。(这不包括 CAB,它由 Windows 内部使用,但实际上不在其他地方使用,并且签名相当复杂)。WinRAR 4 能够使用专有格式添加“真实性验证”记录,但它使用您的 WinRAR 许可证作为签名密钥,该密钥已被多次破解。(更新:此功能已删除由于不安全,从 WinRAR 5 开始。)
在 Windows 上(以及即将推出的 Mac OS X),可以创建“自解压档案”——一种数字签名的可执行文件,可从其自身中提取档案——例如,这就是 Windows 上的软件安装程序的工作方式。但是,自解压文件仅限于单个操作系统,因此它们仅适用于分发程序,而不是文档或图片。(Java 程序可以签名并且跨平台,但很少有系统仍然具有 Java 运行时。)
答案2
使用 Javas jar-tool 构建的 Jar 档案实际上是 zip 档案,并且有一个工具 jarsigner 可以对其进行签名。
以下是一些有用的链接:
乍一看有点复杂(“什么,我需要 keeytool 来做什么?还有什么?”),但按照步骤以简单的方式解决问题很容易。它有效。然后你可以更深入地研究这个问题。
答案3
您可以简单地告诉 winrar 创建一个 SFX(自解压)存档。您可能猜到该文件是可执行文件,可以使用您用于对其他可执行文件进行签名的任何工具对其进行签名。这可以避免分离签名,因为 .exe 文件本身支持集成签名。
答案4
您可以使用 jarsigner 通过以下两个命令对文件进行签名:
keytool -genkeypair -alias <key-alias> -keyalg RSA -keystore <keystore> -validity 180
jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore <keystore> <file-to-sign> <key-alias>
您需要在您的电脑上安装 java jdk。
-第一个命令在当前目录中创建密钥存储(假设它尚不存在)。它使用算法 SHA-256 生成公钥/私钥对。
-第二个使用与第一个相同的算法、密钥库和生成的别名对文件进行签名。
要验证使用密钥库签名的文件,可以运行以下命令:
jarsigner -keystore <keystore> -verify -verbose -certs <file-signed>