rust 对PNG文件进行签名以获得CMS签名

zzzyeukh  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(87)

我对Rust非常陌生,并试图签署PNG文件以获得CMS签名。
我用的是cargo openssl版本"0.10.62"

use openssl::cms::{CmsContentInfo, CMSOptions};

use openssl::pkey::PKey;
use openssl::x509::X509;
use std::fs::{self};

fn main() {
    let certificate_contents = fs::read("files/certificate.pem").unwrap();
    let private_key_contents = fs::read("files/private_key.pem").unwrap();
    let image_contents = fs::read("files/image.png").unwrap();

    let signcert = X509::from_pem(&certificate_contents).unwrap();
    let pkey = PKey::private_key_from_pem(&private_key_contents).unwrap();
    
    let flags = CMSOptions::DETACHED;

    
    let cms = CmsContentInfo::sign(
      Some(&signcert),
      Some(&pkey),
      None, 
      Some(&image_contents),
      flags
    ).unwrap();

    fs::write("files/signature.pem", cms.to_pem().unwrap()).unwrap();
}

字符串
但是,我遇到了一个问题。生成了文件签名.pem,但它没有通过以下命令的终端验证:

openssl cms -verify -in signature.pem -inform PEM -content image.png -CAfile certificate.pem -out verified_content -noverify


要在终端I中生成签名.pem,用途:

openssl cms -sign -in image.png -signer certificate.pem -inkey private_key.pem -outform PEM -out signature.pem -nodetach


终端openssl版本:OpenSSL 3.1.4 24 Oct 2023 (Library: OpenSSL 3.1.4 24 Oct 2023)

3qpi33ja

3qpi33ja1#

旗帜和检查方法是错误的
正确代码:

let flags = CMSOptions::BINARY | CMSOptions::DETACHED;

字符串
验证终端中PEM的方法

openssl cms -verify -in signature.pem -inform PEM -content image.png -CAfile certificate.pem -out verified_image.png -noverify -binary

相关问题