我想問一個關於數字簽名的問題我不是很確定。 而不是創建一個自簽名證書來簽署一些(PDF)文件,我想拿我的SSL證書,其中我的數據已經驗證。SSL證書可以用於數字簽名文件嗎?
但問題是:SSL證書可以用於數字簽名文件還是以某種方式不兼容?
編輯:澄清,這個問題不是關於如何簽署PDF文件,只是關於如果可以使用SSL證書(或以任何方式轉換)來簽署文件。
我想問一個關於數字簽名的問題我不是很確定。 而不是創建一個自簽名證書來簽署一些(PDF)文件,我想拿我的SSL證書,其中我的數據已經驗證。SSL證書可以用於數字簽名文件嗎?
但問題是:SSL證書可以用於數字簽名文件還是以某種方式不兼容?
編輯:澄清,這個問題不是關於如何簽署PDF文件,只是關於如果可以使用SSL證書(或以任何方式轉換)來簽署文件。
爲了支持數字簽名證書必須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();
爲了使自己不自簽名證書與openssl見this SO answer。
也對PDF的簽名感到好奇 - 是不是單獨的這些文件的哈希總和足夠你的情況?
編輯:如果你想要的任何跡象,不完全是由現有的工具X.509標誌,你可以提取您的證書RSA密鑰,並沒有理會keyUsage
場就簽約。
是的,您可以登錄並使用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}
我將發票稱爲PDF,並且需要對其進行數字簽名才能使其具有法律效力。那麼,在這種情況下,一個簡單的總和是不夠的。 – StormByte 2012-03-15 19:38:46
我已經知道我可以輕鬆地爲此目的製作一個自簽名密鑰,但是爲了避免我的客戶會得到任何警告,如果我這樣做的話。 – StormByte 2012-03-15 19:40:49