Созданные для HTTPS сертификаты вполне можно использовать для формирования цифровых подписей к произвольным данным, а также для шифрования по открытым ключам.++ Создание подписи.
Имеем следующие файлы с сертификатами от Let's Encrypt:
/etc/letsencrypt/live/site.com# ls -la
...
lrwxrwxrwx 1 root root 42 May 22 8:11 cert.pem -> ../../archive/site.com-0001/cert43.pem
lrwxrwxrwx 1 root root 43 May 22 8:11 chain.pem -> ../../archive/site.com-0001/chain43.pem
lrwxrwxrwx 1 root root 47 May 22 8:11 fullchain.pem -> ../../archive/site.com-0001/fullchain43.pem
lrwxrwxrwx 1 root root 45 May 22 8:11 privkey.pem -> ../../archive/site.com-0001/privkey43.pem
...
Для заверения цифровой подписью файла msg.txt можно использовать закрытый ключ из файла privkey.pem:
openssl dgst -sha256 -sign privkey.pem -out msg.txt.sig msg.txt
После чего полученную подпись можно преобразовать в текстовое представление в кодировке Base64:
openssl base64 -in msg.txt.sig -out msg.txt.sig.asc
Далее можно опубликовать файлы msg.txt и msg.txt.sig.asc, а сторонние пользователи могут воспользоваться открытым ключом от домена site.com для верификации неизменности содержимого msg.txt:
Загружаем открытый ключ сайта site.com в файл pubkey.pem:
openssl s_client -connect site.com:443 -showcerts | openssl x509 -pubkey -noout > pubkey.pem
Преобразуем цифровую подпись в бинарный формат и верифицируем открытым ключом:
openssl base64 -d -in msg.txt.sig.asc -out msg.txt.sig
openssl dgst -keyform pem -verify pubkey.pem -signature msg.txt.sig msg.txt
Verified OK
++ Шифрование
Сторонний пользователь может воспользоваться открытым ключом от домена site.com для шифрования данных, которые следует передать владельцу домена site.com, имеющему доступ к закрытому ключу.
openssl pkeyutl -in msg.txt -out msg.enc -pubin -inkey pubkey.pem -encrypt
Преобразуем зашифрованный бинарный файл в текстовое представление для передачи по электронной почте или через мессенджер:
openssl base64 -in msg.enc -out msg.enc.asc
Владелец закрытого ключа может расшифровать сообщение используя команды:
openssl base64 -d -in msg.enc.asc -out msg.enc
openssl pkeyutl -in msg.enc -out msg.txt -inkey privkey.pem -decrypt
URL: https://yurichev.com/n/HTTPS_certs/
Обсуждается: http://www.opennet.ru/tips/info/3251.shtml