Форум программистов, компьютерный форум, киберфорум
Наши страницы
Loafer
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Шпаргалка по openssl

Запись от Loafer размещена 21.03.2019 в 14:38

OpenSSL - это инструмент, который позволяет проводить большинство криптографических операций, в числе которых шифрование, цифровая подпись, генерация сертификатов и т. д. Данный инструмент имеет непосредственно саму утилиту openssl и API, которое представлено в библиотеках libcrypto, которая содержит реализации общих криптографических операций, и libssl, которая содержит реализацию протоколов SSL/TLS.

В данной записи я напишу те команды утилиты openssl, которые на данный момент могут оказаться для меня полезными и чтобы я мог быстро вспомнить, как выполнить ту или иную операцию. Если в будущем я обнаружу команды, которые мне будут интересы, я буду ими дополнять данную запись.

Генерация связки приватный/публичный RSA ключ:
Bash
1
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:1024 -pkeyopt rsa_keygen_pubexp:65537 -out ./rsa_private_key.pem
Получение публичного ключа из связки приватный/публичный ключ:
Bash
1
openssl pkey -in ./rsa_private_key.pem -pubout -out ./rsa_public_key.pem
Шифрование сообщения:
Bash
1
2
3
touch message.txt
echo Hello World! > ./message.txt
openssl pkeyutl -encrypt -in ./message.txt -inkey ./rsa_public_key.pem -pubin -out ./encrypted_text.bin
Расшифровка сообщения:
Bash
1
2
openssl pkeyutl -decrypt -in ./encrypted_text.bin -inkey ./rsa_private_key.pem -out ./decrypted_text.txt
cat ./decrypted_text.txt
Создание цифровой подписи:
Bash
1
openssl dgst -sha256 -sign ./rsa_private_key.pem -out ./signature.bin ./message.txt
Проверка подлинности цифровой подписи:
Bash
1
openssl dgst -sha256 -verify ./rsa_public_key.pem -signature ./signature.bin ./message.txt
Создание цифровой подписи без применения хеш-функции. Хотя не знаю, можно ли назвать это цифровой подписью, но, как я это понял,
openssl позволяет это сделать. Скорее, я бы назвал это просто шифрованием сообщения приватным ключем:
Bash
1
openssl pkeyutl -sign -inkey ./rsa_private_key.pem -in ./message.txt -out ./rsa_signature.bin
Проверка подлинности "цифровой подписи" без применения хеш-функции:
Bash
1
openssl pkeyutl -verify -inkey ./rsa_public_key.pem -pubin -sigfile ./rsa_signature.bin -in ./message.txt
Создание корневого сертификата, промежуточного сертификата и контейнера PKCS #12:
Bash
1
2
3
4
5
openssl req -new -x509 -days 3650 -key ./rsa_private_key.pem -out ./ca.crt
openssl genpkey -algorithm rsa -out ./ia_private_key.pem 1024
openssl req -new -key ./ia_private_key.pem -out ./ia.csr
openssl x509 -req -days 3650 -in ./ia.csr -CA ./ca.crt -CAkey ./rsa_private_key.pem -set_serial 01 -out ./ia.crt
openssl pkcs12 -export -out ./ia.p12 -inkey ./ia_private_key.pem -in ./ia.crt -chain -CAfile ./ca.crt
Размещено в RHEL
Просмотров 259 Комментарии 3
Всего комментариев 3
Комментарии
  1. Старый комментарий
    Аватар для Loafer
    Необходимо отписаться по поводу фразы "шифрование приватным ключом". В первую очередь уточним тот факт, что речь идет об алгоритме RSA, т. к. это актуально именно для этого алгоритма. На самом деле, требование предварительного хеширования зависит от так называемого паддинга. Паддингов для RSA есть несколько штук. В свою очередь они классифицируются на те:
    1. которые могут быть использованы для шифрования/расшифровки (OAEP),
    2. которые могут быть использованы для подписи/верификации (PSS),
    3. и для того, и для другого (PKCS#1 padding).

    Паддинги существуют для решения определенных проблем при работе с алгоритмом RSA. Они повышают его устойчивость к атакам извне. Какие проблемы и каким образом они их решают я рассматривать не буду, т. к. меня интересует в данном случае другой вопрос.
    Теперь перейдем к практическому использованию в контексте OpenSSL при подписи/верификации. Паддинг PKCS#1 НЕ требует на входе алгоритма RSA хешированных данных по умолчанию. То есть, подписи подвергаются непосредственно сами данные. Вот пример:
    Bash
    1
    
    openssl pkeyutl -sign -in ./msg.txt -inkey ./private.pem -pkeyopt rsa_padding_mode:pkcs1 -out ./pkeyutlsign.bin
    Этот же паддинг может требовать хешированных данных. Вот пример:
    Bash
    1
    2
    
    openssl dgst -sha1 -binary -out ./hash_msg.bin ./msg.txt
    openssl pkeyutl -sign -in ./hash_msg.bin -inkey ./private.pem -pkeyopt digest:sha1 -pkeyopt rsa_padding_mode:pkcs1 -out ./pkeyutlsign.bin
    Если файл hash_msg.bin имеет размер, не соответствующий выбранному алгоритму хеширования, то openssl выдаст ошибку. Собственно говоря, тут и обнаруживается связь между командами pkeyutl и dgst. Если мы наберем следующую команду:
    Bash
    1
    
    openssl dgst -sha1 -sign ./private.pem -sigopt rsa_padding_mode:pkcs1 -out ./dgstsign.bin ./msg.txt
    то мы увидим, что файлы pkeyutlsign.bin и dgstsign.bin идентичны. Напоследок хочется сказать, что для паддинга PSS наличие хешированных данных обязательно всегда. Такие уж правила .
    Запись от Loafer размещена 27.06.2019 в 16:10 Loafer вне форума
  2. Старый комментарий
    Подскажите пожалуйста, как сгенерировать сертификат и ключ для сайта с заданным доменным именем?
    Запись от Eskander88 размещена 09.01.2020 в 20:03 Eskander88 вне форума
  3. Старый комментарий
    Аватар для Loafer
    Цитата:
    Сообщение от Eskander88 Просмотреть комментарий
    Подскажите пожалуйста, как сгенерировать сертификат и ключ для сайта с заданным доменным именем?
    Ну сначала нужно сгенерировать приватный ключ. Это команда genpkey у утилиты openssl. Лучше всего почитать документацию по ней (man genpkey). После этого нужно набрать команду: openssl req -new -x509 -days 3650 -key ./rsa_private_key.pem -out ./ca.crt. И опять-таки, необходимо почитать документацию по команде req.
    Запись от Loafer размещена 10.01.2020 в 16:35 Loafer вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.