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

Sto*_*yte 8 signing certificate digital-certificate

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

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

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

ale*_*sko 5

为了支持数字签名证书必须digitalSignature在它的选项keyUsage字段(和codeSigning它的选项extendedKeyUsage字段,如果你想与它签署程序)。

签名可以使用现有工具完成,也可以手动进行(例如,在Java中,您并没有要求签名,但是无论如何,此代码段可能还是有用的):

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();
Run Code Online (Sandbox Code Playgroud)

要使用openssl制作自己的非自签名证书,请参阅此SO答案

还对签署PDF感到好奇-您的情况下这些文件的单独哈希总和还不够吗?

编辑:如果您想要任何符号,而不是现有工具的完全X.509符号,则可以从证书中提取RSA密钥并进行签名,而无需担心keyUsage字段。