2012-03-13 10 views
5

デジタル署名について私にはよく分かりません。 一部の(PDF)ファイルに署名するために使用する自己署名証明書を作成する代わりに、自分のデータがすでに検証されているSSL証明書を取得したかったのです。SSL証明書を使用してファイルにデジタル署名することはできますか?

しかし、問題は次のとおりです。デジタル署名ファイルにSSL証明書を使用することができますか、それとも互換性がありませんか?

編集:明確にするために、この問題はPDF署名の方法ではなく、SSL証明書を使用してファイルに署名(または任意の方法で変換)できるかどうかについてのみです。

答えて

4

署名を手動で既存のツールで行うかすることができる(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フィールドを悩ませずに署名します。

+0

私はPDFとして請求書について話しています。彼らは法的妥当性を持つためにデジタル署名が必要です。そして、この場合、単に合計では不十分です。 – StormByte

+0

私はすでにこの目的のために自己署名鍵を簡単に作ることができると知っていますが、もし私がそうすればクライアントが得る警告を避けたかったのです。 – StormByte

1

証明書は、いくつかの当局によって署名された通常のRSA公開鍵です。

はい、確かに可能です。

私はこのためのエンドユーザー向けに使いやすいツールを知らないが、デジタル署名証明書がkeyUsageフィールドだ(と、それをプログラムに署名するためにあなたのしたい場合、その中にcodeSigningオプションはextendedKeyUsage分野だ)にdigitalSignatureオプションを持っている必要がありますサポートするため

+0

おかげで、それは私が知りたいと思ったものです。なぜなら、それがopensslによって処理されていれば、それはうまくいくからです。 – StormByte

+1

詳細については、alx3appsの回答を参照してください。あなたはそれを行うことができますが、keyUsageにdigitalSignatureオプションがあるか(またはcodeSigning to sign code)、署名が他の実装によって拒否される可能性があります。 – mfanto

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} 
関連する問題