我一直在尝试使用OpenSSL创建一个独立的PKCS#7/CMS签名.我有一个大的zip文件,我想创建一个数字签名,但我不希望嵌入在签名中的内容.这是可以使用OpenSSL,还是只能验证分离的签名而不是创建它们?
是的,您可以,甚至是命令行实用程序的默认设置- 您必须指定-nodetach"嵌入"数据.但违反直觉的PKCS#7/CMS格式不是默认值(S/MIME),因此您必须指定-outform.假设您拥有其中一种支持的PEM格式中的私钥以及PEM中pkey.pem的相应证书cert.pem,data并且您希望"原始"(二进制)CMS中的数据位于signature:
openssl cms -sign -signer cert.pem -inkey pkey.pem -binary -in data -outform der -out signature
Run Code Online (Sandbox Code Playgroud)
如果证书和密钥位于同一个PEM文件中(OpenSSL略微扩展的PEM格式的一个有时方便的功能)指定该文件-signer和省略-inkey.如果密钥和证书采用任何非PEM格式(包括PKCS#12),请首先将它们转换为PEM.
对于PEM格式输出更改为-outform pem.在支持重定向的OS/shell上(我认为现在除了VMS之外),分别省略-in或-out使用stdin或stdout,其中包括来自或来自其他进程的管道.(当然,接收者/验证者一点一点地重现签名数据是至关重要的,如果它不在文件中,通常会更难.)
默认情况下,OpenSSL使用signedAttributes又名的两级别间接签名形式; 仅签署数据(哈希)添加-noattr.有关更多选项,请参见联机帮助页:省略签署者证书或包含验证程序的其他(链)证书,更改指示的内容类型和签名哈希和算法选项.
如果您更喜欢使用(C)API编写自己的程序,请从CMS_sign开始.你也应该能够在本地看到任何Unix系统这些(以及相关的)手册页安装OpenSSL的,通常只是man cms和man CMS_sign等虽然有些安装可能需要调整您的MANPATH和/或指定如1ssl和3ssl特殊路段.
| 归档时间: |
|
| 查看次数: |
6590 次 |
| 最近记录: |