Может ли сертификат SSL использоваться для цифровой подписи файлов? - PullRequest
6 голосов
/ 14 марта 2012

Я хочу спросить кое-что о цифровой подписи, я не очень уверен.Вместо создания самозаверяющего сертификата, который будет использоваться для подписи некоторых (PDF) файлов, я хотел взять свой сертификат SSL, в котором мои данные уже проверены.

Но вопрос таков: можно ли использовать сертификат SSL для цифровыхподписывать файлы или это каким-то образом несовместимо?

РЕДАКТИРОВАТЬ: Чтобы уточнить, этот вопрос не о том, как подписывать PDF-файлы, а только о том, может ли сертификат SSL (или каким-либо образом преобразовываться) для подписифайлы.

Ответы [ 3 ]

4 голосов
/ 15 марта 2012

Для поддержки сертификата цифровой подписи необходимо иметь параметр 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, см. этот ответ SO .

Также любопытно, подписать ли PDF-файлы - не достаточно ли отдельных хеш-сумм этих файлов в вашем случае?

edit: если вам нужен какой-либо знак, а не точно знак X.509 существующими инструментами, вы можете извлечь ключ RSA из вашего сертификата и выполнить подпись, не беспокоясь о поле keyUsage.

1 голос
/ 16 июня 2016

Да, вы можете подписывать и проверять подпись файлов, используя 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}
1 голос
/ 14 марта 2012

По сути, сертификат представляет собой обычный открытый ключ RSA, подписанный несколькими органами.

Так что да, определенно возможно.

Хотя я не знаю каких-либо простых в использовании широко распространенных инструментов для конечного пользователя.

...