我对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)
1条答案
按热度按时间3qpi33ja1#
旗帜和检查方法是错误的
正确代码:
字符串
验证终端中PEM的方法
型