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

时间:2012-03-13 20:24:22

标签: certificate signing digital-certificate

我想问一个关于数字签名的事情,我不太确定。 我没有创建用于签署某些(PDF)文件的自签名证书,而是想获取已经验证过我的数据的SSL证书。

但问题是:SSL证书可以用于数字签名文件还是以某种方式不兼容?

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

3 个答案:

答案 0 :(得分:4)

要支持数字签名证书,必须在digitalSignature字段中添加keyUsage选项(如果您想使用codeSigning字段设置extendedKeyUsage字段,则byte[] bytesToSign = loadMyData(); KeyStore ks = KeyStore.getInstance("pkcs12", "SunJSSE"); ks.load(new FileInputStream("cert.p12"), "passwd1".toCharArray()); PrivateKey privateKey = (PrivateKey) ks.getKey("myalias", "passwd2".toCharArray()); Signature sig = Signature.getInstance("SHA1withRSA", ks.getProvider()); sig.initSign(privateKey); sig.update(bytesToSign); byte[] signature = sig.sign(); 选项。{

可以使用现有工具进行签名或手动签名(例如,您不需要签名,但此代码段可能仍然有用):

keyUsage

使用openssl创建自己的非自签名证书,请参阅this SO answer

对于签名PDF也很好奇 - 在这种情况下,这些文件的哈希值是不是足够了?

编辑:如果您想要任何标志,而不是现有工具的X.509标志,您可以从您的证书中提取RSA密钥并进行签名而不必担心{{1}}字段。< / p>

答案 1 :(得分:1)

核心证明,证书只是一个普通的RSA公钥,已由多个机构签署。

所以是的,绝对有可能。

虽然我不知道为最终用户提供任何易于使用的广泛工具。

答案 2 :(得分:1)

是的,您可以使用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}