Certificate SSL证书可以用于对文件进行数字签名吗?

Certificate SSL证书可以用于对文件进行数字签名吗?,certificate,signing,digital-certificate,Certificate,Signing,Digital Certificate,我想问一个关于数字签名的问题,我不是很确定。 我不想创建一个自签名证书来对一些(PDF)文件进行签名,而是想获取我的SSL证书,它已经验证了我的数据 但问题是:SSL证书可以用来对文件进行数字签名,还是在某些方面不兼容 编辑:澄清一下,这个问题不是关于如何签署PDF,只是关于是否可以使用SSL证书(或以任何方式转换)签署文件。在核心部分,证书只是一个由多个机构签署的普通RSA公钥 所以,是的,绝对有可能 虽然我不知道有任何易于使用的通用工具可供最终用户使用。要支持数字签名,证书必须在其keyus

我想问一个关于数字签名的问题,我不是很确定。 我不想创建一个自签名证书来对一些(PDF)文件进行签名,而是想获取我的SSL证书,它已经验证了我的数据

但问题是:SSL证书可以用来对文件进行数字签名,还是在某些方面不兼容


编辑:澄清一下,这个问题不是关于如何签署PDF,只是关于是否可以使用SSL证书(或以任何方式转换)签署文件。

在核心部分,证书只是一个由多个机构签署的普通RSA公钥

所以,是的,绝对有可能


虽然我不知道有任何易于使用的通用工具可供最终用户使用。

要支持数字签名,证书必须在其
keyusause
字段中具有
digitalSignature
选项(如果您想用它对程序进行签名,则必须在其
extendedkeyusause
字段中具有
codeSigning
选项)

签名可以使用现有工具完成,也可以手动完成(例如,java示例,您并没有要求签名,但此代码段可能非常有用):

要使用openssl生成您自己的非自签名证书,请参阅

对签署PDF文件也很好奇——在你的例子中,这些文件的散列和不够吗


编辑:如果您需要任何签名,而不是使用现有工具进行X.509签名,您可以从证书中提取RSA密钥并进行签名,而不必担心
密钥用法
字段。

是的,您可以使用SSL证书对文件的签名进行签名和验证

以下是一个例子:

SSLCERT='/XXXX/ssl/certs/fqdn.pem'
SSLKEY='/XXXX/ssl/private_keys/fqdn.pem'
# You might not need to specify a CA
CACERTFILE='/XXXX/ssl/certs/ca.pem'
# File to sign
FILE='YYYYYYY'

# Signs, needs ${SSLKEY} and ${FILE}
openssl dgst -sha512 -sign ${SSLKEY} -out ${FILE}.sha512 ${FILE}

# Then transfer the following files to another server:
#  - ${CACERTFILE}
#  - ${SSLCERT}
#  - ${FILE}
#  - ${FILE}.sha512

# Check the certificate is valid
openssl verify -verbose -CAfile ${CACERTFILE} ${SSLCERT}
# Extract the pub key from the cert
openssl x509 -in ${SSLCERT} -pubkey -noout > ${SSLCERT}.pub
# Check the signature
openssl dgst -sha512 -verify ${SSLCERT}.pub -signature ${FILE}.sha512 ${FILE}

谢谢,这就是我想知道的。因为如果openssl可以处理它来签名,那么它就可以工作。有关更多信息,请参阅alx3apps answer。您可以这样做,但除非您在keyUsage中有digitalSignature选项(或使用codeSigning对代码进行签名),否则签名可能会被其他实现拒绝。我说的是PDF格式的发票,它们需要进行数字签名才能具有法律效力。那么,在这种情况下,简单的求和是不够的。我已经知道我可以很容易地为此制作一个自签名密钥,但我希望避免我的客户在这样做时收到任何警告。
SSLCERT='/XXXX/ssl/certs/fqdn.pem'
SSLKEY='/XXXX/ssl/private_keys/fqdn.pem'
# You might not need to specify a CA
CACERTFILE='/XXXX/ssl/certs/ca.pem'
# File to sign
FILE='YYYYYYY'

# Signs, needs ${SSLKEY} and ${FILE}
openssl dgst -sha512 -sign ${SSLKEY} -out ${FILE}.sha512 ${FILE}

# Then transfer the following files to another server:
#  - ${CACERTFILE}
#  - ${SSLCERT}
#  - ${FILE}
#  - ${FILE}.sha512

# Check the certificate is valid
openssl verify -verbose -CAfile ${CACERTFILE} ${SSLCERT}
# Extract the pub key from the cert
openssl x509 -in ${SSLCERT} -pubkey -noout > ${SSLCERT}.pub
# Check the signature
openssl dgst -sha512 -verify ${SSLCERT}.pub -signature ${FILE}.sha512 ${FILE}