如何创建分离的 CMS 签名?
How to create detached CMS signature?
我一直在尝试使用 OpenSSL 创建分离的 PKCS#7/CMS 签名。我有一个大的 zip 文件,我想为其创建数字签名,但我不希望签名中嵌入内容。这对 OpenSSL 是否可行,或者它是否可以只验证分离的签名而不创建它们?
可以,它甚至是 the commandline utility 的默认值——您必须指定 -nodetach
到 'embed' 数据。但违反直觉的是 PKCS#7/CMS 格式是 而不是 默认值(S/MIME 是)所以你必须指定 -outform
。
假设您在 pkey.pem
中拥有几种受支持的 PEM 格式之一的私钥,并且在 cert.pem
中的 PEM 中也有相应的证书,并且在 data
中拥有数据并且您想要 'raw' signature
:
中的(二进制)CMS
openssl cms -sign -signer cert.pem -inkey pkey.pem -binary -in data -outform der -out signature
如果证书和密钥在同一个 PEM 文件中(OpenSSL 的稍微扩展的 PEM 格式有时是一个方便的功能)将该文件指定为 -signer
并省略 -inkey
。如果密钥和证书采用任何非 PEM 格式,包括 PKCS#12,请先将它们转换为 PEM。
对于 PEM 格式输出更改为 -outform pem
。在支持重定向的 OS/shell 上(我认为现在除了 VMS 之外),省略 -in
或 -out
分别使用 stdin 或 stdout,其中可以包括从其他进程或到其他进程的管道。 (当然,签名数据由 recipient/verifier 逐位复制是至关重要的,如果它不在文件中,通常会更困难。)
默认情况下,OpenSSL 使用 signedAttributes
又名二级又名间接形式的签名;要签署 仅 数据(散列)添加 -noattr
。有关更多选项,请参阅联机帮助页:省略签名者证书或包括验证者的附加(链)证书,更改指示的内容类型和签名哈希和算法选项。
如果您更喜欢使用 (C) API 编写自己的程序,请从 CMS_sign 开始。您还应该能够在安装了 OpenSSL 的任何 Unix 系统上本地查看这些(和相关的)手册页,通常只是 man cms
和 man CMS_sign
等,尽管某些安装可能需要调整您的 MANPATH and/or指定特殊部分,如 1ssl 和 3ssl。
我一直在尝试使用 OpenSSL 创建分离的 PKCS#7/CMS 签名。我有一个大的 zip 文件,我想为其创建数字签名,但我不希望签名中嵌入内容。这对 OpenSSL 是否可行,或者它是否可以只验证分离的签名而不创建它们?
可以,它甚至是 the commandline utility 的默认值——您必须指定 -nodetach
到 'embed' 数据。但违反直觉的是 PKCS#7/CMS 格式是 而不是 默认值(S/MIME 是)所以你必须指定 -outform
。
假设您在 pkey.pem
中拥有几种受支持的 PEM 格式之一的私钥,并且在 cert.pem
中的 PEM 中也有相应的证书,并且在 data
中拥有数据并且您想要 'raw' signature
:
openssl cms -sign -signer cert.pem -inkey pkey.pem -binary -in data -outform der -out signature
如果证书和密钥在同一个 PEM 文件中(OpenSSL 的稍微扩展的 PEM 格式有时是一个方便的功能)将该文件指定为 -signer
并省略 -inkey
。如果密钥和证书采用任何非 PEM 格式,包括 PKCS#12,请先将它们转换为 PEM。
对于 PEM 格式输出更改为 -outform pem
。在支持重定向的 OS/shell 上(我认为现在除了 VMS 之外),省略 -in
或 -out
分别使用 stdin 或 stdout,其中可以包括从其他进程或到其他进程的管道。 (当然,签名数据由 recipient/verifier 逐位复制是至关重要的,如果它不在文件中,通常会更困难。)
默认情况下,OpenSSL 使用 signedAttributes
又名二级又名间接形式的签名;要签署 仅 数据(散列)添加 -noattr
。有关更多选项,请参阅联机帮助页:省略签名者证书或包括验证者的附加(链)证书,更改指示的内容类型和签名哈希和算法选项。
如果您更喜欢使用 (C) API 编写自己的程序,请从 CMS_sign 开始。您还应该能够在安装了 OpenSSL 的任何 Unix 系统上本地查看这些(和相关的)手册页,通常只是 man cms
和 man CMS_sign
等,尽管某些安装可能需要调整您的 MANPATH and/or指定特殊部分,如 1ssl 和 3ssl。