我在理解OpenSSL的签名和验证过程时遇到了一些困难。
我有一个小型证书层次结构:根证书=>子证书=>结束实体证书。我想拥有来自最终实体CA的代码签名证书,因此创建了一个密钥对并请求CSR:
openssl genrsa -out key.pem
...
openssl genrsa -pubout -in key.pem -out key.pub.pem
...
openssl req -new -sha256 -key key.pem -out id.csr
...
openssl dgst -sha256 -sign key.pem -out program.sign program
openssl dgst -sha256 -verify program -signature program.sign cert.pem
undable to load key file
非常感谢。
使用openssl dgst验证文件签名时大多被欺骗
你的描述有点混乱;我将“结束实体CA”解释为颁发EE证书的CA,因为EE不是CA,CA也不是EE,您所说的“结束实体证书”实际上并不是结束实体的证书。具体地说,我解释您的cert.pem
是由其证书在end.pem
中的CA颁发的证书,使用相应的私钥,因此root.pem end.pem cert.pem
实际上形成了一个证书路径,也就是链。
OpenSSL dgst-verify
甚至不接受证书,更不用说验证证书了。它只使用publickey,并使用该publickey,来验证数据上的签名--或者可选地使用privatekey,并派生publickey,并使用该privatekey,但通常验证签名的一方没有也不应该拥有privatekey。如果要使用命令行针对证书链验证签名,则需要按两个顺序执行以下操作:
>
使用OpenSSL Verify
验证证书链;您可以使用-untrusted
(作为单个文件提供中间证书,在您的示例中为catsub.pem end.pem
),或者使用信任存储库中的中间证书(以及根证书),该信任存储库可以是您创建并指定的,或者原则上可以是默认的(但这通常是系统范围的,并且更改它是不明智的)。请参见使用openssl验证证书链和openssl使用链式CA和链式证书验证(公开:我的)。
使用openssl x509-pubkey-in cert.pem-out pubkeyfile
从叶证书中获取公钥,并使用它验证数据上的签名,对于这些签名,您必须在选项之后指定数据文件,否则将其作为标准输入,参见下文。
(如果没有这个虚拟文本,我无法正确获取这些格式)
openssl dgst -sha256 -verify pubkeyfile -signature program.sign program
openssl dgst -sha256 -verify pubkeyfile -signature program.sign <program
有没有办法使用openssl对x509证书或任何文档进行数字签名?
Im使用OpenSSL的< code>dgst命令执行ECDSA签名,如下所示: 然而,我在这个SO答案中读到,它首先对data_file进行SHA256哈希处理,ASN.1在签名之前对哈希进行编码。 我想创建数据的SHA256哈希,并让ECDSA只对该哈希的原始字节进行签名。(由于这是ECDSA签名,我不能使用如上述SO答案中所述。) 如何使用OpenSSL实现这一点?
我想验证两个APK文件是否已使用相同的证书签名。 我有整个JavaSDK可用,但想从Java代码使跨平台的原因。 有什么想法吗?
我想在客户端设备上使用通过Ed25519生成的私钥对JWS(json web签名)进行签名。然后将这个签名发送到我的后端,并用公钥验证它。为了熟悉这个过程,我想尝试在node js中对JWS进行签名和验证 我的私钥和公钥都已生成,可以在base58中使用。这是我目前使用Ed25519私钥签署JWT的尝试: 密钥必须是KeyObject或CryptoKey类型之一。收到一个Uint8Array的实例
我有一个包含EC私钥的文件: 我有一个证书,它的公钥对应于私钥: 在 pem 格式中: 以txt格式: 我正在努力完成两件事: < li >使用ecdsa-with-SHA256签名算法使用私钥对字节数组进行签名 < li >使用证书中的公钥验证签名是否正确 我尝试过使用充气城堡图书馆。这是我到目前为止所拥有的。我的断言是失败的。
您好,我可以使用iText 5对PDF文档进行数字签名。我需要再次签署PDF,而在验证PDF时,它表明初始签名无效。您可以在此处查看再次签名的文件。 请参见下面用于标记的代码, 请让我知道出了什么问题。