仅限OpenSSL数字签名摘要

仅限OpenSSL数字签名摘要,openssl,digital-signature,Openssl,Digital Signature,我有一个签名服务器,您可以上传一个文件,它将以数字签名响应 它使用的是openssldgst-sha256-sign,工作正常 然而,我们不得不开始对大文件(>1GB)进行签名,而上传需要花费很长时间。我的想法是,我们可以在本地计算sha256摘要,并将其传递给签名服务器,这将大大加快速度。然而,这个看似简单的任务对于openssl来说似乎非常困难。这有什么原因吗 我找到了一个可能的解决方案,但与当前的dgstone行程序相比,它非常复杂,需要生成一个ASN1配置文件 这真的是使用openssl

我有一个签名服务器,您可以上传一个文件,它将以数字签名响应

它使用的是
openssldgst-sha256-sign
,工作正常

然而,我们不得不开始对大文件(>1GB)进行签名,而上传需要花费很长时间。我的想法是,我们可以在本地计算sha256摘要,并将其传递给签名服务器,这将大大加快速度。然而,这个看似简单的任务对于openssl来说似乎非常困难。这有什么原因吗

我找到了一个可能的解决方案,但与当前的
dgst
one行程序相比,它非常复杂,需要生成一个ASN1配置文件


这真的是使用openssl生成数字签名而不需要提供文件的唯一方法吗?

编辑:使用@dave_thompson_085的答案,我创建了以下脚本:

#!/bin/bash
# Usage: $0 <sha256 digest>

# Example usage: ./sign_256sha.sh 5d525e3513b493798a7ac353401ef040ea6de92809485292201b8f27731e6379

# Input to openssl pkeyutl is binary, not ASCII hex,... need to convert using xxd
echo $1 | xxd -r -p | openssl pkeyutl -sign -inkey privkey.pem -pkeyopt digest:sha256
#/bin/bash
#使用费:0美元
#用法示例:./sign_256sha.sh 5d525e3513b493798a7ac353401ef040ea6de92809485292201b8f27731e6379
#openssl pkeyutl的输入是二进制的,而不是ASCII十六进制,。。。需要使用xxd进行转换
echo$1 | xxd-r-p | openssl pkeyutl-sign-inkey privkey.pem-pkeyopt摘要:sha256
这相当于:

openssl-dgst-sha256-sign privkey.pem

只要将
的sha256摘要传递给第一个,您显然需要RSA签名,特别是OpenSSL默认的RSASSA-PKCS1v1_5,尽管您的问题没有这样说,而且OpenSSL支持其他几种签名算法。你忽略了评论链接#9951559 以及复制和更多链接到那里

rsautl
在的第2步不进行ASN.1摘要信息编码,但自2010年1.0.0以来
pkeyutl
在指定摘要算法的情况下进行编码:

openssl pkeyutl -sign -inkey privkey.pem -pkeyopt digest:sha256
# note input is binary; if you transport to the server as hex, use
# xxd -r -p or the printf $(echo $x | sed 's/../\\x&/g') hack or similar
# output is also binary by default, like rsautl which you seem to handle

或者PKCS1的同一部分(rfc8017 et pred)对于所有RSA方案的标准哈希都有固定的前缀值,这仍然比计算DER更简单。

IMHO您需要其中一个或两个;CPU越多,存储速度越快。考虑到你的限制,我知道没有更好的解决办法了,嗯?我不明白…道歉;我读得太快了。您的问题是上载,而不是处理文件本身。对不起(这太棒了,我非常感谢您的回复。我已经使用您的信息更新了我的另一个答案。请原谅我对OpenSSL缺乏经验;因为它是一个如此广泛的瑞士军刀式实用程序,我被信息淹没了,并且无法过滤相关的信息(正如您所指出的,在这个过程中跳过了一些相关的评论)。