Подтвердить что ты не робот

Цифровая подпись для файла с помощью openssl

Есть ли способ цифровой подписи сертификата x509 или любого документа с помощью openssl?

4b9b3361

Ответ 1

Да, dgst и rsautl компонента OpenSSL может использоваться для вычисления подписи с использованием пары ключей RSA.

Заключение:

openssl dgst -sha256 data.txt > hash
openssl rsautl -sign -inkey privatekey.pem -keyform PEM -in hash >signature

Проверка только подписи:

openssl rsautl -verify -inkey publickey.pem -keyform PEM -in signature

Обновление. Захват комментариев Reto снизу, потому что это важный нюанс. Предположительно, если вам не удастся проверить, вы хотите знать, что подпись была написана на открытом тексте, к которому она прикреплена:

Это может показаться очевидным для некоторых, но: Помните, rsault verify просто расшифровывает файл signature. Выход этого вызова гарантированно будет производиться владельцем закрытого ключа, но помимо этого ничего не проверяется. Таким образом, чтобы проверить согласованность data.txt, вам необходимо восстановить дайджест, а затем сравнить его с выходом openssl rsautl -verify.

Проверка того, что владелец закрытого ключа ручается за data.txt:

openssl dgst -sha256 -verify publickey.pem -signature signature data.txt

Для этой операции openssl требует открытого ключа, подписи и сообщения.

Ответ 2

Альтернативный способ подписать/подтвердить сингл, вдохновленный Ответ Андерса Линдаля.

, чтобы подписать

openssl dgst -sha256 -sign snakeoil.key -out some-file.sha256 some-file 

, чтобы проверить

# dgst -verify requires the public key
openssl x509 -in snakeoil.crt -pubkey -noout > snakeoil.pub

openssl dgst -sha256  -verify  snakeoil.pub -signature some-file.sha256 some-file

# in case of success: prints "Verified OK"
# in case of failure: prints "Verification Failure", return code 1

# or compact (requires a modern shell)
openssl dgst -sha256  \
    -verify  <(openssl x509 -in snakeoil.crt -pubkey -noout) \
    -signature some-file.sha256 some-file

Ответ 3

Чтобы подписал цифровой документ в openssl, он будет работать

Для этого сначала нужно доверять сертификату это будет выглядеть так.

-----BEGIN TRUSTED CERTIFICATE-----
MIIDbjCCAlYCCQCOyunl25ProDANBgkqhkiG9w0BAQUFADB5MQswCQYDVQQGEwJJ
...
-----END TRUSTED CERTIFICATE-----

Затем используйте следующую команду

smime -sign -signer certificate.pem -inkey private.key -in test.txt \
    -out test1.txt -from ashish -to singhal