Php

Openssl php encrypt: PHP: openssl_encrypt — Manual

Содержание

простое шифрование с открытым ключом / Хабр

Полно ситуаций когда нужно зашифровать определённый файл или папку. Например, если данные передаются по открытым каналам либо сохраняются на внешнем носителе. Многие (в том числе и я) используют truecrypt, однако основное предназначение этой программы — работа с зашифрованными разделами, поэтому она не очень хороша в этом случае.

Для подобных задач вполне подходит OpenSSL — надёжное кросплатформенное решение. OpenSSL поддерживает различные алгоритмы шифрования, плюс он по умолчанию установлен во многих операционных системах, а установка на остальные не составит труда.

Под хабракатом — основы использования симметричного и асимметричного шифрования в OpenSSL, а таке пара скриптов упрощающих асимметричное шифрование с одноразовым ключом.


Простейший способ защиты данных с помощью OpenSSL — симметричное шифрование. Следующие команды шифруют и расшифровывают файл documents.zip, используя алгоритм AES с длиной ключа 256 бит:

openssl enc -aes-256-cbc -salt -in documents. zip -out documents.enc

openssl enc -d -aes-256-cbc -in documents.enc -out documents.zip

Проблема этих команд может заключаться в том что они требуют ввода пароля. Есть ситуации когда это нежелательно. Например, автоматическое резервное копирование/шифрование данных по расписанию, либо если данные шифруются одним человеком а расшифровываются другим.

Как раз для таких случаев было придумано шифрование с открытым ключом. В общем случае вам понадобится создать открытый и закрытый ключи. Первая команда сгенерирует закрытый ключ private.pem, вторая создаст открытый ключ public.pem:

openssl genrsa -out private.pem -aes256 2048

openssl rsa -in private.pem -pubout -out public.pem

В результате вы получаете пару RSA ключей длиной 2048 бит. К сожалению, в системе RSA размер шифруемых данных ограничен размером ключа, поэтому зашифровать более 2Кб данных не получится. Есть способ обойти это — информация сначала шифруется симметричным алгоритмом (подобно использованному выше) с использованием одноразового ключа. Затем этот одноразовый ключ шифруется публичным ключом. При расшифровке одноразовый ключ расшифровывается закрытым. Подробнее об этом уже было очень хорошо написано в статье на Хабре.

Автоматизировать шифрование поможет следующий скрипт, на выходе которого вы получите одноразовый ключ и данные (encrypt.sh) в зашифрованном виде:

# !/bin/bash

FILENAME=»$1″

PUBLICKEY=»$2″

SESSIONKEY=»$3″

RESULT=»$4″

# Generate the random symmetric-key

PASSIZE=30

if [ -c /dev/urandom ] ; then

KEY=`head -c 30 /dev/urandom | openssl enc -base64`

else

KEY=`openssl rand -base64 30`

fi

export KEY

# Encrypt the symmetric key using the public key

openssl rsautl -encrypt -inkey «$PUBLICKEY» -out «$SESSIONKEY» -pubin <<EOF

$KEY

EOF

# Encrypt the file

openssl enc -aes-256-cbc -pass env:KEY -in «$FILENAME» -out «$RESULT»

Следующая команда использует открытый ключ public. pem чтобы зашифровать файл documents.zip. Она сгенерирует зашифрованный одноразовый ключ session.key и зашифрованные данные documents.enc:

./encrypt.sh documents.zip public.pem session.key documents.enc

Скрипт для дешифрования (decrypt.sh):

# !/bin/bash

PRIVATEKEY=»$1″

SESSIONKEY=»$2″

ENCRYPTED=»$3″

DECRYPTED=»$4″

# Decrypt the symmetric key using the private key

KEY=` openssl rsautl -decrypt -inkey «$PRIVATEKEY» -in «$SESSIONKEY» `

export KEY

# Decrypt the file

openssl enc -aes-256-cbc -d -pass env:KEY -in «$ENCRYPTED» -out «$DECRYPTED»

Команда для дешифрования использует закрытый ключ private.pem и одноразовый ключ session.key чтобы расшифровать файл documents.enc. Она сгенерирует файл documents.zip:

./decrypt.sh private.pem session.key documents.enc documents.zip

Как видите, шифрование с открытым ключом может быть почти таким же простым как и симметричное. Но есть ещё более простой путь. На написание этого поста меня побудил блог SbF₅. Его автор (несомненно более искушённый в bash чем я) написал скрипт, который архивирует папку, шифрует её открытым ключом и генерирует другой скрипт, содержащий в себе всё необходимое: одноразовый ключ, данные и собственно команды для расшифровывания. Кроме того, скрипт может сгенерировать для вас пару RSA ключей:

./encrypt-file.sh -keys public.pem private.pem

./encrypt-file.sh folder public.pem > decrypt-folder.sh

chmod +x decrypt-folder.sh

./decrypt-folder.sh private.pem > folder.tar

В этом примере мы сначала сгенерировали пару ключей. После этого папка folder была зашифрована в скрипт decrypt-folder.sh а затем расшифрована в архив folder.tar. Возможный минус этого способа — то что данные в decrypt-folder.sh хранятся в формате BASE64, а следовательно их размер увеличивается.

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

UPD Перенесено в блог Информационная безопасность.

Ещё раз об OpenSSL / Хабр

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

В этой статье будут рассмотрены известные вопросы генерации ключей, а также менее известный вопрос шифрования файлов больших объемов. О сертификации здесь не будет речи.


Начнем. На самом деле пока все просто.

Создадим приватный ключ командой.

openssl genrsa -out key.pem -aes-256-cfb -rand /var/log/messages 4096

Здесь:

genrsa — парметр указывающий на создание ключа алгоритмом шифрования RSA.
out — где создать ключ.
4096 — длина ключа.

Вообще этого для создания ключа достаточно. Но приватный ключ лучше зашифровать.
aes-256-cfb — алгоритм и режим шифрования.
rand /var/log/messages — рандомное значения из любой папки, лучше взять логи, т.к. с /dev/random или /dev/urandom может все повиснуть наглухо, у меня так и было.

При создании ключа будет запрошен пароль. Пароль — это основа любой защиты, так что постарайтесь покорпеть над ним. И запомнить.


Имеем ключ. Приватный. Никому никогда не показывать и спрятать по принципу Кощея Бессмертного.

На его основе сделаем публичный, который можно хоть на всеобщее обозрение выложить, хоть на лоб приклеить.

openssl rsa -in privatkey.pem -pubout -out publickey.pem

Теперь у нас есть пара ключей. Публичный можно закинуть на сервер, чтобы подключаться к нему по ssh, используя свой приватный ключ. Либо для шифрования небольшого количества данных, например, токена или парольной фразы и т.п.

Задача шифрования большого файла имеет другое решение.

Для шифрования большого количества данных используем, например, этот файл pdf размером 1,8 Mbytes.

Большой объем данных шифруется симметричным алгоритмом шифрования, например, AES. Здесь мы применим и асимметричное шифрование для передачи симметричного ключа, с помощью которого мы и будем шифровать текст.

Начнем.

Создадим симметричный сессионный (одноразовый) ключ рандомной последовательностью символов и запишем в файл в представлении base64.

openssl rand -base64 32 > key.bin

Далее зашифруем файл этим ключом:

openssl enc -aes-256-cfb -salt -in OWASP_Top_10-2017_\(en\).pdf -out OWASP_Top_10-2017_\(en\).pdf.enc -pass file:./key.bin

aes-256-cfb — алгоритм и режим шифрования. О режимах здесь не буду говорить. Этот лучший.
salt — соль для большей криптостойкости.
pass file:./key.bin — ключ шифрования.

Далее зашифруем симметричный ключ нашим публичным «ассиметричным» ключом.

openssl rsautl -encrypt -inkey publickey.pem -pubin -in key.bin -out key.bin.enc

Получили зашифрованный файл и симметричный ключ. Можно слать своему товарищу для расшифровки. Но мы пошлем сами себе, ибо это homework c самим с собой.

Теперь удалим изначальный симметричный ключ! Чтобы никто и никогда не нашел его.

shred -u key.bin

На картинке внизу его уже нет.

Теперь расшифруем симметричный ключ нашим приватным ассиметричным ключом.

openssl rsautl -decrypt -inkey privatkey.pem -in key.bin.enc -out key.bin

И мы, счастливчики, снова имеем симметричный ключ для расшифрования нашего текста, пока еще зашифрованного.

Картинка снова внизу, там ключ вновь есть.

Теперь расшифруем зашифрованный шифром симметричного шифрования файл нашим недавно зашифрованным, но потом расшифрованным с помощью ассиметричного шифра шифрования симметричным ключом.

openssl enc -d -aes-256-cfb -in OWASP_Top_10-2017_\(en\).pdf.enc -out OWASP_Top_10-2017_\(en\)decrypt.pdf -pass file:./key.bin

Пруф внизу.

Теперь: Почему так сложно? Почему нельзя взять и сделать все с помощью ассиметричного шифрования?

Пробуем, идем прямиком на грабли;)

Имеем!

Файл и ключи.

Шифруем.

openssl rsautl -encrypt -inkey publickey.pem -pubin -in OWASP_Top_10-2017_\(en\).pdf -out OWASP_Top_10-2017_\(en\).pdf.enc

Поу — поу — поооооууууу. Ошибка. Слишком много данных для размера ключа. Ибо в ассиметричном шифровании размер ключа должен быть больше или равен открытому тексту.
OpenSSL, как при сделке с дьяволом, дал Вам то, чего Вы попросили, но не чего хотели. Правда, зашифрованный файл оказался пуст.

Но можно зашифровать меньший, чем ключ файл. Попробуем.

Создадим небольшой файл.

Например, я сделал так:

echo "hellow world my name is admin is a secret text nobody know it hahahahaahah" > text.txt

Зашифруем его нашим публичным ключом, который знают все на свете!

openssl rsautl -encrypt -inkey publickey.pem -pubin -in text.txt -out text.txt.enc

Как видим на нижней картинке файл зашифрован. Ничего не понятно! Кому понятно, КТО ВЫ?

Теперь расшифруем, предварительно удалив для чистоты эксперимента исходный файл.

openssl rsautl -decrypt -inkey privatkey.pem -in text.txt.enc -out text.txt

Имеем расшифрованный файл. Все отлично.

Для передачи всего этого зашифрованного добра лучше последнее кодировать в base64. Соответственно перед тем как расшифровать, нужно сначала раскодировать.

Закодировали.

openssl enc -base64 -in text.txt.enc -out text.txt.bs64

Раскодировали.

openssl enc -base64 -d -in text.txt.bs64 -out text.txt.enc

И снова имеем белеберду, которая никому не понятна! Если Вам понятна, то этот документ не для Вас!

Примерно так работает шифрование при создании ключей и шифрованиие данных на примере утилиты OpenSSL.

Позже собираюсь описать режимы шифрования блочных симметричных шифров.

openssl_encrypt — Encrypts data | Руководство по PHP

(PHP 5 >= 5.3.0, PHP 7)

openssl_encrypt — Encrypts data

Описание

string openssl_encrypt
( string $data
, string $method
, string $password
[, int $options = 0
[, string $iv = «»
]] )

Внимание

К настоящему
времени эта функция еще не была документирована; для ознакомления доступен только список аргументов.

Список параметров

data

The data.

method

The cipher method. For a list of available cipher methods, use openssl_get_cipher_methods().

password

The password.

options

options can be one of
OPENSSL_RAW_DATA,
OPENSSL_ZERO_PADDING.

iv

A non-NULL Initialization Vector.

Возвращаемые значения

Returns the encrypted string on success или FALSE в случае возникновения ошибки.

Ошибки

Emits an E_WARNING level error if an unknown cipher
algorithm is passed in via the method parameter.

Emits an E_WARNING level error if an empty value is passed
in via the iv parameter.

Список изменений

ВерсияОписание
5.3.3 The iv parameter was added.
5.4.0 The raw_output was changed to options.

Смотрите также

Вернуться к: OpenSSL

PHP 5.6 и PHP 7 на русском: Функция openssl_encrypt()

(PHP 5 >= 5.3.0, PHP 7)

openssl_encrypt — Encrypts data

Описание

string openssl_encrypt
( string $data
, string $method
, string $password
[, int $options = 0
[, string $iv = «»
]] )

Список параметров

data

The data.

method

The cipher method. For a list of available cipher methods, use openssl_get_cipher_methods().

password

The password.

options

options is a bitwise disjunction of the flags
OPENSSL_RAW_DATA and
OPENSSL_ZERO_PADDING.

iv

A non-NULL Initialization Vector.

Возвращаемые значения

Returns the encrypted string on success или FALSE в случае возникновения ошибки.

Ошибки

Emits an E_WARNING level error if an unknown cipher
algorithm is passed in via the method parameter.

Emits an E_WARNING level error if an empty value is passed
in via the iv parameter.

Список изменений

ВерсияОписание
5.3.3 The iv parameter was added.
5.4.0 The raw_output was changed to options.

Смотрите также

Советы и трюки по работе с OpenSSL

Скорее всего, вы уже знакомы с OpenSSL как с библиотекой, которая дает возможность работать по протоколу SSL. Помимо библиотеки в составе OpenSSL идет полезная утилита для работы с командной строкой, которая используется при администрировании SSL/PKI. Сам этот инструмент плохо задокументирован, и цель данной статьи — немного рассказать о полезных советах и трюках по работе с OpenSSL в виде «поваренной книги».

Автор: Джошуа Дэвис (Joshua Davies)

Скорее всего, вы уже знакомы с OpenSSL как с библиотекой, которая дает возможность работать по протоколу SSL. Помимо библиотеки в составе OpenSSL идет полезная утилита для работы с командной строкой, которая используется при администрировании SSL/PKI. Сам этот инструмент плохо задокументирован, и цель данной статьи — немного рассказать о полезных советах и трюках по работе с OpenSSL в виде «поваренной книги».

Получение справки о подкомандах OpenSSL

Утилита для работы с командной строкой в OpenSSL является оболочкой для многих «подпрограмм». Для запуска нужной подпрограммы необходимо указать ее имя (например, ca, x509, asn1parse и т. д.) В документации по OpenSSL о подпрограммах сказано не особо много, однако на каждую такую подкоманду есть отдельная страница с документацией. Например, чтобы получить справку о подпрограмме openssl x509, наберите следующую команду:

$ man x509

Просмотр необработанной структуры ASN. 1 файла

Протокол SSL является реализацией PKI (Public Key Infrastructure, Инфраструктура Открытых Ключей) и как таковой работает непосредственно с сертификатами. Можно с уверенностью сказать, если при настройке SSL возникли какие-то проблемы, то с 90% вероятностью дело в неправильно сконфигурированном сертификате. Сертификаты (или, если быть более точным, X.509 сертификаты) описываются формальным языком «ASN.1» (или Abstract Syntax Notation (.1)), в чем-то схожим с XML или JSON. Существует довольно много файлов, связанных с сертификатами, и нет никаких стандартов относительно их имен или расширений. Когда файл сертификата обнаружен, просмотр необработанной структуры (raw structure) может помочь в поиске проблемы. Однако если открыть файл сертификата, скажем, в текстовом редакторе, то можно увидеть нечто подобное:

MIICbDCCAioCAQAwaDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlRYMQ4wDAYDVQQHEwVQbGFubzER


MA8GA1UEChMIMnhvZmZpY2UxETAPBgNVBAsTCFJlc2VhcmNoMRYwFAYDVQQDEw1Kb3NodWEgRGF2


aWVzMIIBtzCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2


USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4


O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith2yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmC


ouuEC/BYHPUCgYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCB


gLRJFnEj6EwoFhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhR


kImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYQAAoGAOPlkQGq47HhKxmGBTDWaLaa140+Rl3b+


rZk3TpODy/BTS6O+v608EEBnJvF6ck26qFjLBHPC8IihovdcczKEAofIiR+do7CMjUEWdWIFnwKX


6W46ElBJN1ieWl1HtGj5RXnSfcfitiRGOiee1jsyV7wVn0Y4/8vbYPAUFRSPpk2gADALBgcqhkjO


OAQDBQADLwAwLAIUFgkt1lvVhcR1JE6wW7pyBAsgA1wCFHcSuOTaZdIM/dKwJ5dOFgsK0zOi

Файл закодирован по схеме Base64, но раскодировка не даст сколь-нибудь полезных результатов, поскольку в Base64 закодировано представление по стандарту DER (Distinguished Encoding Rule). Чтобы получить нечто более осмысленное, необходимо воспользоваться подкомандой asn1parse:

$ openssl asn1parse -in mysterious_file.pem

Результат выполнения подпрограммы:

0:d=0 hl=4 l= 620 cons: SEQUENCE


4:d=1 hl=4 l= 554 cons: SEQUENCE


8:d=2 hl=2 l= 1 prim: INTEGER :00


11:d=2 hl=2 l= 104 cons: SEQUENCE


13:d=3 hl=2 l= 11 cons: SET


15:d=4 hl=2 l= 9 cons: SEQUENCE


17:d=5 hl=2 l= 3 prim: OBJECT :countryName


22:d=5 hl=2 l= 2 prim: PRINTABLESTRING :US


26:d=3 hl=2 l= 11 cons: SET


28:d=4 hl=2 l= 9 cons: SEQUENCE


30:d=5 hl=2 l= 3 prim: OBJECT :stateOrProvinceName


35:d=5 hl=2 l= 2 prim: PRINTABLESTRING :TX


39:d=3 hl=2 l= 14 cons: SET


41:d=4 hl=2 l= 12 cons: SEQUENCE


43:d=5 hl=2 l= 3 prim: OBJECT :localityName


48:d=5 hl=2 l= 5 prim: PRINTABLESTRING :Plano


55:d=3 hl=2 l= 17 cons: SET


57:d=4 hl=2 l= 15 cons: SEQUENCE


59:d=5 hl=2 l= 3 prim: OBJECT :organizationName


64:d=5 hl=2 l= 8 prim: PRINTABLESTRING :2xoffice


74:d=3 hl=2 l= 17 cons: SET


76:d=4 hl=2 l= 15 cons: SEQUENCE


78:d=5 hl=2 l= 3 prim: OBJECT :organizationalUnitName


83:d=5 hl=2 l= 8 prim: PRINTABLESTRING :Research


93:d=3 hl=2 l= 22 cons: SET


95:d=4 hl=2 l= 20 cons: SEQUENCE


97:d=5 hl=2 l= 3 prim: OBJECT :commonName


102:d=5 hl=2 l= 13 prim: PRINTABLESTRING :Joshua Davies


117:d=2 hl=4 l= 439 cons: SEQUENCE


121:d=3 hl=4 l= 300 cons: SEQUENCE


125:d=4 hl=2 l= 7 prim: OBJECT :dsaEncryption


134:d=4 hl=4 l= 287 cons: SEQUENCE


138:d=5 hl=3 l= 129 prim: INTEGER :FD7F53811D75122952DF4A9C2. ..


270:d=5 hl=2 l= 21 prim: INTEGER :9760508F15230BCCB292B982A...


293:d=5 hl=3 l= 129 prim: INTEGER :F7E1A085D69B3DDECBBCAB5C3...


425:d=3 hl=3 l= 132 prim: BIT STRING


560:d=2 hl=2 l= 0 cons: cont [ 0 ]


562:d=1 hl=2 l= 11 cons: SEQUENCE


564:d=2 hl=2 l= 7 prim: OBJECT :dsaWithSHA1


573:d=2 hl=2 l= 0 prim: NULL


575:d=1 hl=2 l= 47 prim: BIT STRING

Если вы немного знакомы с концепцией PKI, то, возможно, уже догадались, что это ни что иное как запрос на подпись сертификата. В недавних версиях OpenSSL появился параметр –i, используемый подкомандой asn1parse и отвечающий за глубину парсинга, что может быть полезно при анализе больших структур (например, цепочек сертификатов).

Работа с PEM-файлами и файлами, закодированными по стандарту DER

В большинстве случаев команда openssl asn1parse -in file будет работать корректно с любыми файлами, имеющими отношение к SSL/PKI, однако иногда может возникать следующая ошибка:

$ openssl asn1parse -in request. der


Error: offset too large

Скорее всего, это означает, что вы имеете дело с файлом, закодированным в формате DER, а не в формате PEM. В чем же различие? Формат DER – «необработанное представление», используемое SSL для корректной обработки сертификата. Именно в этом формате сертификат передается от сервера к клиенту для аутентификации. Как вы, возможно, уже знаете о том, что бинарные файлы и электронные сообщения не смешиваются, так как файлы обычно (но не всегда) кодируются в Base64 после чего прикрепляются к сообщению. Представление сертификата (или запроса на подпись), закодированного по стандарту DER, в виде Base64 называется (немного нелогично) Privacy Enhanced Mail или PEM-формат. В целом соглашение об именах гласит о том, чтобы «необработанным» (raw) файлам сертификатов назначалось расширение .der, а файлам закодированным в Base64 – расширение .pem.

Впервые термин PEM начал использоваться в проекте PGP (Pretty Good Privacy), который был особенно популярен в 90-х годах и направлен на защиту электронной почты. В то же время предпринималась попытка популяризировать стандарт IETF, где описывалась общая инфраструктура по шифрованию электронных писем. В настоящее время любой файл, закодированный в Base64 и имеющий отношение к сертификату, мы называем «закодированный по стандарту PEM», даже если он не предназначен для передачи конфиденциальной информации.

Предполагается, что любой объект, с которым взаимодействует OpenSSL, закодирован в Base64 и, следовательно, перед обработкой происходит его декодирование. Если необходимо обойти этот шаг, укажите параметр -inform der:

$ openssl asn1parse -inform der -in request.der


0:d=0 hl=4 l= 342 cons: SEQUENCE


4:d=1 hl=4 l= 256 cons: SEQUENCE


8:d=2 hl=2 l= 1 prim: INTEGER :00


...

Если и в этом случае возникает ошибка «offset too large», значит, файл либо не имеет отношение к сертификату, либо произошло его повреждение во время передачи.

Просмотр содержимого сертификата

Допустим, вы имеете дело с настоящим сертификатом стандарта X.509. Подпрограмма asn1parse во всех деталях расскажет о файле сертификата ( возможно, даже больше, чем вы ожидали). Вам же нужно узнать лишь срок действия и имя.

Для получения этой информации в OpenSSL предусмотрена подкоманда x509. Однако если использовать команду $ openssl x509 -in sample.cer, результат будет примерно таким:

-----BEGIN CERTIFICATE-----


MIIEszCCA5ugAwIBAgIJAMR0RhX+M2iEMA0GCSqGSIb3DQEBBQUAMIGXMQswCQYD


VQQGEwJVUzELMAkGA1UECBMCVFgxDjAMBgNVBAcTBVBsYW5vMREwDwYDVQQKEwgy


...


qRH8SwcC2/+kLp5/SqpC7Tv1K1466jrxltb4ncJL6Is8p2FDRn1GTLTj3Z086JgX


s9y/DGoyTw==


-----END CERTIFICATE-----

По сути, вышеуказанная команда вывела текстовое содержимое сертификата, так же как если бы вы использовали команду: $ cat sample. cer

Для того чтобы OpenSSL отобразил нечто осмысленное, необходимо указать корректные параметры, например:

-subject


Вывод имени сертификата


-issuer


Вывод имени эмитента сертификата


-dates


Вывод срока действия сертификата

По умолчанию вся информация о сертификате будет выведена после закодированного содержимого. Чтобы закодированное содержимое не выводилось, используйте команду –noout (логичнее было бы сделать использование этого параметра по умолчанию). Если нужно вывести всю общую информацию о сертификате (что требуется в большинстве случаев), используйте параметр –text.

$ openssl x509 -in sample.cer -noout -text


Certificate:


Data:


Version: 3 (0x2)


Serial Number:


af:69:46:11:10:bd:82:88


Signature Algorithm: sha1WithRSAEncryption


Issuer: C=US, ST=Texas, L=Plano, O=2xoffice, OU=Architecture, CN=Joshua Davies/emailAddress=joshua. [email protected]


Validity


Not Before: May 21 21:49:10 2014 GMT


Not After : Jun 20 21:49:10 2014 GMT


Subject: C=US, ST=Texas, L=Plano, O=2xoffice, OU=Architecture, CN=Joshua Davies/[email protected]


Subject Public Key Info:


Public Key Algorithm: rsaEncryption


RSA Public Key: (512 bit)


Modulus (512 bit):


00:b7:38:0d:e0:ab:37:18:a7:26:95:9d:9e:6f:a2:


69:b1:b9:ee:b3:7f:29:04:fb:f0:94:b3:d0:d5:55:


c0:d8:6b:14:7f:94:13:3c:d9:a2:61:bf:ba:3f:0a:


44:37:dc:18:b5:23:c7:ee:96:2d:7c:d8:92:04:48:


74:f8:c6:46:a5


Exponent: 65537 (0x10001)


X509v3 extensions:


X509v3 Subject Key Identifier:


1A:A5:C9:C8:36:EA:7D:FA:B4:DF:A4:9C:11:F9:C1:BE:78:C4:42:DD


X509v3 Authority Key Identifier:


keyid:1A:A5:C9:C8:36:EA:7D:FA:B4:DF:A4:9C:11:F9:C1:BE:78:C4:42:DD


DirName:/C=US/ST=Texas/L=Plano/O=2xoffice/OU=Architecture/CN=Joshua Davies/emailAddress=joshua. [email protected]


serial:AF:69:46:11:10:BD:82:88

X509v3 Basic Constraints:


CA:TRUE


Signature Algorithm: sha1WithRSAEncryption


56:32:44:76:86:8c:08:92:74:71:0e:ac:a6:7d:ba:1d:7c:d3:


b6:74:ef:27:7a:5e:53:21:fc:8e:eb:26:58:e0:6e:4f:5c:01:


f1:40:ca:0a:e9:d2:0e:00:60:ae:1f:f6:a5:a4:4c:47:fb:e0:


68:7f:25:63:ab:60:38:0f:74:94

Создание самоподписанного тестового сертификата

При использовании сертификатов в реальной инфраструктуре, они должны быть подписаны и проверены корневым центром сертификации (например, Verisign или Thawte). Однако подобные сертификаты довольно дороги и, к тому же, для их получения требуется потратить много времени. Для тестирования вполне достаточно «поддельного» или самоподписанного сертификата, в котором определяется публичный ключ, и он же используется для создания подписи. Для создания подобных сертификатов в OpenSSL предусмотрена подкоманда req, которая используется вместе с параметром -x509.

$ openssl req -x509 -newkey rsa:2048


Generating a 512 bit RSA private key


...++++++++++++


...++++++++++++


writing new private key to 'privkey.pem'


Enter PEM pass phrase:


Verifying - Enter PEM pass phrase:


...

Параметр –newkey заставляет OpenSSL сгенерировать секретный ключ, иначе вам придется ввести его самостоятельно.

Если вы не хотите выводить на экран содержимое сертификата, используйте параметр –out.

$ openssl req -x509 -newkey rsa:2048 -out selfsign.cer

По умолчанию секретный ключ записывается в файл privkey.pem (если уже существует файл с таким именем, то он перезаписывается без предупреждения!). Чтобы избежать возможных проблем, старайтесь определять самостоятельно файл для секретного ключа:

$ openssl req -x509 -newkey rsa:2048 -out selfsign. cer -keyout selfsign.key

Если вы хотите подцепить SSL на сервере Apache2 (только для тестирования!), раскомментируйте строку #Include /private/etc/apache2/extra/httpd-ssl.conf в файле /etc/apache2/httpd.conf и запустите следующую команду:

$ openssl req -x509 -newkey rsa:2048 -out server.crt -keyout server.key

При этом вам будет предложено ввести некоторые параметры сертификата, но главное – в параметре Common Name следует указать «localhost».

Создание запроса для загрузки сертификата в центр сертификации

Естественно после тестирования вам потребуется настоящий сертификат. Если, к примеру, установить самоподписанный сертификат на сервер, в браузере пользователя появится следующее сообщение:

Рисунок 1: Сообщение с предупреждением о недостоверном сертификате, которое выводится в браузере Chrome

Даже если пользователь кликнет на «Proceed Anyway», вебсайт в некоторых браузерах может отображаться некорректно (к примеру, Chrome не загрузит картинки у сайта с недостоверным сертификатом, если страница загружена по протоколу HTTPS). Вы не сможете сами создать «настоящий» сертификат, поскольку он должен быть подписан «настоящим» центром сертификации. Перед отправкой в центр необходимо создать запрос на подпись сертификата (certificate signing request, CSR). CSR содержит всю информацию (включая публичный ключ и домен сайта) за исключением подписи. Такой запрос можно создать в точности так же, как мы создавали ранее самоподписанный сертификат, но без параметра -x509:

$ openssl req -newkey rsa:2048 -out selfsign.cer -keyout selfsign.key

Вышеуказанная команда создает файл PKCS #10 (или запрос на подпись сертификата), который нужно загрузить в центр сертификации. Процедура получения достоверного сертификата варьируется от центра к центру, но в целом, вначале, вам нужно загрузить CSR-файл через вебформу. По завершению всех необходимых проверок, сертификат будет готов к работе. Обратите внимание, что сертификат не содержит секретный ключ (если вы еще не успели забыть, то он генерируется в отдельный файл). По сути, это часть публичной информации, которую ваш сервер будет отсылать каждому клиенту, пытающемуся подключиться по протоколу HTTPS.

Помните, когда я говорил о том, что могут возникнуть проблемы при перезаписи файла секретного ключа? Так вот, представьте себе ситуацию, когда CSR загружен в центр сертификации, а потом, нечаянно, перезаписан файл секретного ключа. Не забывайте, что секретный ключ не подлежит восстановлению (иначе инфраструктура, а которой базируется SSL, была бы уязвима). Если же ключ утерян, сгенерированный сертификат становится бесполезен (необходимо делать регулярные резервные копии подобных файлов).

Подписание запроса на создание сертификата

При помощи OpenSSL можно создать свой собственный центр сертификации и не прибегать к услугам коммерческих центров и тем самым сэкономить немного денег.

В документации утверждается, что средства по созданию своего собственного центра сертификации были разработаны лишь в демонстрационных целях. Их никогда не планировалось использовать для работы в боевых условиях. Выдержка из документации:

«Первоначальной цель утилиты ca — продемонстрировать на примере, как происходит подпись запроса в центре сертификации, и не предполагается ее использование в реальной жизни. Тем не менее, некоторые пользователи используют утилиту ca для подписи запросов»

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

Во-первых, как было показано выше, необходимо создать самоподписанный корневой сертификат. После этого создайте конфигурационный файл. В OpenSSL есть пример файла openssl.cnf, который находится в соответствующей папке (название директории может изменяться от версии к версии). В большинстве случаев (и особенно при тестировании) можно использовать как раз этот файл без каких-либо изменений. Если же вы планируете более плотно поработать с сертификатами, следует поподробнее ознакомиться с содержимым файла конфигурации. В нем есть несколько полезных параметров, например, местонахождение серийных номеров и списка отозванных сертификатов (Certificate Revocation List). Я не будут рассказывать обо всех опциях (если по-честному, с некоторыми из них я не сильно знаком). В большинстве случаев вы можете воспользоваться настройками по умолчанию.

Однако некоторые записи из раздела [ CA_default ] ссылаются на директории и файлы, которые, в случае их отсутствия, могут привести к проблемам при развертывании центра сертификации, и вы должны создать все необходимые файлы и папки перед тем, как подписывать CSR. В составе OpenSSL идет простая утилита CA.pl, которая упрощает весь процесс (на самом деле просто создается структура директорий, на которые ссылается файл openssl.cnf). За создание папок отвечает следующая секция:

mkdir demoCA


mkdir demoCA/certs


mkdir demoCA/crl


mkdir demoCA/newcerts


mkdir demoCA/private


touch demoCA/index. txt


echo "01" | demoCA/crlnumber

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

После создания рабочего файла конфигурации и валидного CSR, можно подписать запрос при помощи следующей команды:

openssl ca -config ca.cnf -in csr.pem -out certificate.pem

Подписанные сертификат можно отсылать отправителю без каких-либо ухищрений, поскольку за безопасность всей инфраструктуры отвечает секретный ключ.

Если вы посмотрите на содержимое сгенерированного сертификата, то увидите текстовое описание (в точности такое же, какое сгенерировала бы команда openssl x509 -noout –text). Этот раздел, включаемый по умолчанию, создает проблемы в некоторых системах. Чтобы текстовое описание не добавлялось, используйте параметр –notext или же просто удалите его вручную.

Рассмотрим еще раз весь алгоритм при развертывании центра сертификации:

Создаем конфигурационный файл. Его минимальное содержимое должно быть следующим:

2. [ ca ]


3. default_ca = miniCA


4.


5. [ miniCA ]


6. certificate = ./cacert.pem


7. database = ./index.txt


8. private_key = ./cakey.pem


9. new_certs_dir = ./certs


10. default_md = sha1


11. policy = policy_match


12. serial = ./serial


13. default_days = 365


14.


15. [policy_match]


16. commonName = supplied


17. Создаем структуру директорий:


18. $ mkdir certs


19. $ touch index.txt


20. $ echo "01" | serial


21. Создаем корневой сертификат


22. $ openssl req -x509 -newkey rsa:2048 -out cacert. pem -keyout cakey.pem


23. Generating a 2048 bit RSA private key


24. ...........+++


25. .................................................+++


26. writing new private key to 'cakey.pem'


27. Enter PEM pass phrase:


28. Verifying - Enter PEM pass phrase:


29. -----


30. You are about to be asked to enter information that will be incorporated


31. into your certificate request.


32. What you are about to enter is what is called a Distinguished Name or a DN.


33. There are quite a few fields but you can leave some blank


34. For some fields there will be a default value,


35. If you enter '.', the field will be left blank.


36. -----


37. Country Name (2 letter code) [AU]:US


38. State or Province Name (full name) [Some-State]:Texas


39. Locality Name (eg, city) []:Plano


40. Organization Name (eg, company) [Internet Widgits Pty Ltd]:2xoffice


41. Organizational Unit Name (eg, section) []:Architecture


42. Common Name (e.g. server FQDN or YOUR name) []:Certificate Authority


43. Email Address []:[email protected]

Если вы намереваетесь использовать центр сертификации для серьезных целей, установите сильный пароль для защиты файла cakey.pem и выставьте соответствующие права доступа:

$ chmod 400 cakey.pem

Сам по себе сертификат (в данном случае cakey.pem) будет размещен в конечных пунктах, где будут утверждаться подписанные сертификаты (к примеру, веб сервера, которые сконфигурированы для запроса клиентских сертификатов).

  1. Создайте запрос на подписание сертификата

  2. $ openssl req -newkey rsa:2048 -out csr. pem -keyout privkey.pem

  3. Подпишите запрос. Перед этим вы, возможно, захотите обратить внимание на содержимое директории с сертификатами для того, чтобы понимать механику процесса подписания сертификата.

  4. $ ls

  5. ca.cnf certs index.txt serial

  6. cacert.pem cakey.pem

Команда для подписания запроса:

$ openssl ca -config ca.cnf -in csr.pem -out signed.pem


Using configuration from ca.cnf


Enter pass phrase for ./cakey.pem:


Check that the request matches the signature


Signature ok


The Subject's Distinguished Name is as follows


countryName :PRINTABLE:'US'


stateOrProvinceName :PRINTABLE:'Texas'


localityName :PRINTABLE:'Plano'


organizationName :PRINTABLE:'2xoffice'


organizationalUnitName:PRINTABLE:'Architecture'


commonName :PRINTABLE:'Joshua Davies'


emailAddress :IA5STRING:'joshua. [email protected]'


Certificate is to be certified until May 29 14:54:35 2015 GMT (365 days)


Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y


Write out database with 1 new entries


Data Base Updated

Смотрим обновленное содержимое директории:

$ ls


ca.cnf certs index.txt.attr serial


cacert.pem index.txt.old serial.old


cakey.pem index.txt signed.pem

Были добавлены новые файлы: index.txt.attr, index.txt.old и serial.old

Также в директории certs появилась копия подписанного сертификат:

$ ls certs/


01.pem

Этот файл идентичен файлу signed.pem.

Следует отметить на поле subject у подписанного сертификата:

$ openssl x509 -in signed.pem -noout -subject


subject= /CN=Joshua Davies

Оно не совпадает с тем же самым полем из запроса:

$ openssl req -in csr. pem -noout -subjec


subject=/C=US/ST=Texas/L=Plano/O=2xoffice/OU=Architecture/CN=Joshua Davies/[email protected]

Причина в содержимом раздела [ policy ], который находится в конфигурационном файле. Там я указал, чтобы выводился только атрибут commonName. Если бы я заходил отобразить другие атрибуты, то указал бы их отдельно:

countryName = optional


stateOrProvinceName = optional

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

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

Подписание сертификата с начальной прошлой датой

При работе с сертификатами я столкнулся с проблемой, связанной с часовыми поясами. По умолчанию при подписании сертификата используется часовой пояс сервера. Бывали случаи, когда сертификат, созданный в часовом поясе восточном побережья, не устанавливался на сервере, находящимся на западном. Конечно, проблема не столь критична, но слегка раздражает. В OpenSSL команда ca позволяет указать начальную дату задним числом:

$ openssl ca -in csr.pem -startdate 140529000000Z

Передача информации для поля subject через командную строку

Если у вас уже есть некоторый опыт по созданию тестовых сертификатов (или даже отправки запроса в центр сертификации), то, возможно, вы заметили, что немного раздражает постоянно указывать поля country, state, locality, и т. д. Вы можете передать эту информацию через командную строку при помощи следующего скрипта:

#!/bin/sh

if [$# -ne 1]


then


echo «Usage: $0 »


exit


fi

openssl req -subj /C=US/ST=Texas/L=Plano/O=2xoffice/OU=Architecture/CN=$1

Коды полей можно посмотреть в соответствующей спецификации:

CN

Common Name

L

Locality (city)

ST

State (or province)

O

Organization (for example, company)

OU

Organizational Unit

C

Country

Единственное обязательное значение, которое нужно указать при создании сертификата, — common name (CN), и оно должно совпадать с именем хоста.

$ openssl req -x509 -newkey rsa:2048 -out server.crt -keyout server.key -subj /CN=localhost

Однако я предпочитаю, как минимум, заполнять поля organization и organizational unit, чтобы потом можно было легко опознать, для каких целей создан сертификат. Еще один необязательный, но важный атрибут – emailAddress:

$ openssl req -x509 -newkey rsa:2048 -out server.crt -keyout server.key -subj /CN=localhost/[email protected]

Это поле важно в тех случаях, когда с сертификатом возникают проблемы (например, когда истекает срок его действия) и нужно связаться с администратором.

Проверка на соответствие между публичным и секретным ключами

Как только возрастет число используемых сертификатов, вы столкнетесь с проблемой поиска пары «сертификат-секретный ключ». Часто проблема решается путем стандартизации имен (я включаю временную метку в именах сертификатов и секретных ключах) однако при росте количества сертификатов обязательно встанет вопрос поиска соответствия.

Поиск подобного соответствия в принципе невозможен, однако в файле секретного ключа содержится публичный ключ (хотя строго говоря его там быть не должно), что делает решаемой задачу поиска пары «сертификат-секретный ключ». Для начала выгрузим всю структуру и секретного ключа и сертификата:

$ openssl rsa -in privkey.pem -noout -text


Enter pass phrase for privkey.pem:


Private-Key: (512 bit)


modulus:


00:b7:ed:99:89:e3:37:fa:28:54:7e:1e:4c:72:1b:


d1:b3:be:d1:99:50:59:83:8e:bf:8a:42:2f:42:fb:


38:2a:d1:3f:31:9e:20:26:7f:2e:c2:02:62:e8:b4:


8d:fc:1b:60:49:b6:78:f6:7d:74:21:56:c7:f5:f9:


53:ae:e3:a9:59


publicExponent: 65537 (0x10001)


privateExponent:


00:9e:98:13:b2:5f:e8:5e:9d:f3:ed:23:b7:0b:15:


8d:c6:8d:9d:31:b3:a4:db:d9:74:b3:84:ca:37:d9:


62:df:17:43:1a:56:21:eb:02:3e:44:04:b1:4c:48:


72:ef:cc:9e:a2:e5:d3:1d:da:57:83:d8:48:ad:e0:


19:8d:ec:55:01


prime1:


00:eb:15:16:7b:3c:69:2b:df:a8:e3:78:98:a4:3b:


c6:99:2e:24:ec:33:c4:52:e1:18:30:1a:06:3e:bf:


98:23:71


prime2:


00:c8:4b:46:90:06:6f:60:70:aa:46:1b:d4:b3:cb:


bb:28:5d:14:f1:60:90:dc:09:c3:fc:7b:8d:92:80:


7f:20:69


exponent1:


00:8d:77:e8:4a:8b:45:43:48:da:6a:e1:75:02:48:


92:b0:36:0b:b4:35:46:ed:15:56:a8:03:d1:44:4b:


aa:73:91


exponent2:


00:9f:b7:87:19:2a:48:7e:3a:d9:4c:f6:bc:72:73:


2f:57:4c:82:7a:c8:6a:3b:4c:7e:40:43:b5:ec:f1:


12:6e:a1


coefficient:


00:88:14:47:88:9a:c1:31:b0:16:74:1a:2d:5d:9e:


17:a9:c8:ef:c4:b4:72:4a:9d:8b:19:ec:c7:b2:4f:


a8:54:eb

Первые два блока представляют собой публичный ключ (секция modulus и public exponent), третья секция – секретный ключ (секция private exponent) и оставшиеся пять секций – компоненты секретной экспоненты, используемые для ускорения расчета секретного ключа. По умолчанию файлы идут в зашифрованном виде (поэтому чтобы просмотреть его структуру, необходимо вести пароль). Содержимое файла представляет собой примерно следующее:

-----BEGIN RSA PRIVATE KEY-----


Proc-Type: 4,ENCRYPTED


DEK-Info: DES-EDE3-CBC,DCD8BE451A81F09A


bc6tsFhLlJ9bouUgr6h5F4u8ROSqZBrIABX1/oUlqbESK30Ubjz2ZINCkpuyW6QS

Как только парсер OpenSSL встречает подобные заголовки, то выводится сообщение с предложением ввести пароль для расшифровки файла. Несмотря на то, что файлы с ключами шифруются, их следует защищать средствами операционной системы, поскольку злоумышленник при наличии достаточного времени может подобрать пароль методом прямого перебора.

Для того чтобы найти соответствие между сертификатом и секретным ключом, необходимо сравнить секции modulus. Если их содержимое совпадает, значит, секретный ключ соответствует данному сертификату.

Выводим секцию modulus у секретного ключа:

$ openssl rsa -in privkey. pem -noout -modulus


Enter pass phrase for privkey.pem:

Modulus=B7ED9989E337FA28547E1E4C721BD1B3BED1995059838EBF8A422F42FB


382AD13F319E20267F2EC20262E8B48DFC1B6049B678F67D742156C7F5F953AEE3A959

Делаем то же самое для сертификата:

$ openssl x509 -in selfsign.cer -noout -modulus


Modulus=B7ED9989E337FA28547E1E4C721BD1B3BED1995059838EBF8A422F42FB


382AD13F319E20267F2EC20262E8B48DFC1B6049B678F67D742156C7F5F953AEE3A959

Способ работает, если вы используйте RSA или DSA (хотя почему вы все еще используете DSA?)

Извлечение секретного ключа

Сертификаты и ключи могут находиться в одном файле в формате PKCS #12 (например, в браузере клиентский сертификат экспортируется именно в таком формате). У самого файла может быть расширение .p12 или .pfx. В OpenSSL есть подкоманда pkcs12, которая может манипулировать информацией в формате PKCS #12. К примеру, чтобы выгрузить содержимое файла в консоль, используйте следующую команду:

$ openssl pkcs12 -in private.pfx

Как и в случае с подкомандами x509 и rsa на выходе вы получите сертификат и секретный ключ закодированные в base64. В отличие от x509 и rsa в подкоманде pkcs12 не предусмотрена опция –text для получения общих сведений о файлах в формате PKCS #12. На выходе вы увидите примерно следующее:

MAC verified OK


Bag Attributes


friendlyName: Client Certificate


localKeyID: A3 78 69 B4 A2 12 96 A7


subject=/CN=Joshua Davies/OU=Architecture/O=2xoffice


issuer=/CN=Joshua Davies/OU=Architecture/O=2xoffice


-----BEGIN CERTIFICATE-----


MIIFqTCCBJGgAwIBAgIIcho1mMr1AE0wDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV


BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js


ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3


. ..


vBdHySICRxmp3onOOj86v/+SdRyvHLc6Nl4aP6J/l4lF/IVfni2flWXgB5pPjBx1


f/T4I5bCAqzvQTdfPw==


-----END CERTIFICATE-----

Разработчики OpenSSL реализовали в подкоманде x509 парсинг содержимого сертификата между маркерами BEGIN CERTIFICATE и END CERTIFICATE, и для вывода общих сведений о сертификате в формате PKCS #12, вы можете использовать связку следующих команд:

$ openssl pkcs12 -in private.pfx | openssl x509 -noout -text

При этом вас попросят ввести пароль два раза: первый раз для файла .pfx, а второй – для секретного ключа. Поскольку у нас нет необходимости выводить секретный ключ, мы будем использовать параметр –nokeys:

$ openssl pkcs12 -nokeys -in private.pfx | openssl x509 -noout -text

При помощи того же самого трюка можно вывести обобщенную информацию о секретном ключе (только добавьте параметр –nocerts, чтобы не выводить информацию о сертификате). Однако я не представляю случаев, когда это может быть полезно, поскольку у вас уже есть сертификат, соответствующий секретному ключу.

Модификация стандартных параметров

Ранее я упоминал, что если вы создаете запрос на подпись сертификата и не указывайте имени файла секретного ключа, по умолчанию будет создан файл privkey.pem. Имя стандартного файла можно изменить в файле openssl.cnf (если не забыли, существует стандартный файл с настройками). Помимо того что файл используется в центре сертификации, он же является основным при использовании OpenSSL в целом. Этот файл, к примеру, можно найти в директории etc/pki/tls или /usr/share/ssl.

В секции [ req ] есть такая запись:

default_keyfile = privkey.pem

Ранее упоминалось, что если не указать параметр –keyout при генерации самоподписанного сертификата или запроса на подпись, OpenSSL перезапишет файл privkey.pem без предупреждения. Можно избежать этого, если удалить имя файла в параметре default_keyfile:

default_keyfile =

Теперь, если вы попробуйте сгенерировать запрос на подпись сертификата без указания параметра default_keyfile, то возникнет ошибка:

$ openssl req -x509 -newkey rsa:2048 -config openssl. cnf


Generating a 512 bit RSA private key


.++++++++++++


.............++++++++++++


writing new private key to ''


No such file or directory


2995:error:02001002:system library:fopen:No such file or directory:/SourceCache


/OpenSSL098/OpenSSL098-50/src/crypto/bio/bss_file.c:356:fopen('','w')


2995:error:20074002:BIO routines:FILE_CTRL:system lib:/SourceCache/OpenSSL098


/OpenSSL098-50/src/crypto/bio/bss_file.c:358:

21 пример команд OpenSSL, которые помогут вам на практике

Одним из самых популярных инструментов для создания и управления SSL-сертификатами является библиотека OpenSSL. В этой статье я расскажу о часто используемых командах OpenSSL.

Некоторые аббревиатуры, относящиеся к сертификатам:

  • SSL – Secure Socket Layer (уровень защищённых cокетов).
  • CSR – Certificate Signing Request (запрос на получение сертификата).
  • TLS – Transport Layer Security (протокол защиты транспортного уровня).
  • PEM – Privacy Enhanced Mail (формат файлов для хранения и отправки криптографических ключей).
  • SHA – Secure Hash Algorithm (алгоритм криптографического хеширования).
  • PKCS – Public-Key Cryptography Standards (стандарты криптографии с открытым ключом).
opensslreq -out geekflare.csr -newkey rsa:2048 -nodes -keyoutgeekflare.key

Команда генерирует CSR и файл 2048-битногоRSA-ключа. Если вы собираетесь использовать этот сертификат на Apache или Nginx, то необходимо отправить CSR-файл в центр сертификации. Он предоставит вам заверенный сертификат (в формате der или pem), который нужно настроить на веб-сервере Apache или Nginx.

opensslreq -x509 -sha256 -nodes -newkey rsa:2048 -keyoutgfselfsigned.key -out gfcert.pem

Команда генерирует самозаверенный сертификат и файл 2048-битного RSA-ключа. Я также включил в команду хеш-функцию sha256, поскольку она считается наиболее безопасной.

Совет: По умолчанию команда генерирует самозаверенный сертификат, действительный только один месяц. Для увеличения этого срока переопределите параметра — days.

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

opensslreq -x509 -sha256 -nodes -days 730 -newkey rsa:2048 -keyoutgfselfsigned.key -out gfcert.pem
opensslreq -noout -text -in geekflare.csr

Верификация необходима, чтобы отправленный в регистрационный центр CSR-файл содержал всю необходимую информацию.

opensslgenrsa -out private.key 2048

Если нужно создать секретный RSA-ключ, используйте приведенную выше команду.

opensslrsa -in certkey.key -out nopassphrase.key

Если вы используете составной пароль (фразу) в файле ключа и работаете на Apache, то при каждом запуске нужно вводить секретную фразу. Если вас это раздражает, то можно использовать приведенную выше команду, чтобы удалить пароль-фразу из существующего ключа.

opensslrsa -in certkey.key –check

Если вы сомневаетесь в файле ключа, то можете использовать данную команду.

openssl x509 -in certfile.pem -text –noout

Если хотите проверить данные сертификата, такие как CN, OU и т.д., используйте приведенную выше команду, которая предоставит данные сертификата.

openssl x509 -in certfile.pem -noout -issuer -issuer_hash

Для проверки центра сертификации можно использовать приведенную выше команду.

openssl x509 -noout -hash -in bestflare.pem
openssl x509 –inform der –in sslcert.der –out sslcert.pem

Центр сертификации предоставляет SSL-сертификат в формате .der. Если вам необходимо использовать его в формате apache или .pem, примените приведенную выше команду для соответствующего преобразования.

openssl x509 –outform der –in sslcert.pem –out sslcert.der

Если необходимо изменить формат .pem на .der.

openssl pkcs12 –export –out sslcert.pfx –inkeykey.pem –in sslcert. pem

Если необходимо использовать сертификат с Java-приложением, принимающим только формат PKCS#12, примените приведенную выше команду. Она генерирует один pfx файл, содержащий сертификат и ключ.

Совет. Вы также можете включить цепочку сертификатов, передав параметр -chain, как показано в примере ниже.

openssl pkcs12 –export –out sslcert.pfx –inkeykey.pem –in sslcert.pem -chain cacert.pem
opensslreq –out certificate.csr –keyexisting.key –new

Если не хотите создавать новый секретный ключ вместо существующего, выполните приведенную выше команду.

openssl pkcs12 –info –nodes –in cert.p12

PKCS12 является двоичным форматом, поэтому вы не сможете просмотреть его содержимое в текстовом редакторе. Для просмотра файла в формате PKCS12 используйте приведенную выше команду.

openssl pkcs12 –in cert.p12 –out cert.pem

Если нужно использовать существующий файл в формате pkcs12 на Apache или только в формате pem, в этом поможет приведенная выше команда.

openssls_client -connect yoururl.com:443 –showcerts

Я часто использую эту команду для проверки SSL-сертификата URL-адреса. Это удобно для проверки данных протокола, шифрования и сертификата.

openssl x509 -noout -in certificate.pem -dates

Команда выведет дату в формате notBefore и notAfter. notAfter — это та дата, которая нужна, чтобы определить, истек ли срок действия сертификата или он еще действителен.

Пример:

[root@Chandan opt]# openssl x509 -noout -in bestflare.pem -dates
notBefore=Jul 4 14:02:45 2015 GMT
notAfter=Aug 4 09:46:42 2015 GMT
[root@Chandan opt]#
openssls_client -connect secureurl.com:443 2>/dev/null | openssl x509 -noout –enddate

Команда позволяет контролировать дату истечения срока действия SSL- сертификата удаленно или для конкретного URL-адреса.

Пример:

[root@Chandan opt]# openssls_client -connect google.com:443 2>/dev/null | openssl x509 -noout -enddate

notAfter=Dec 8 00:00:00 2015 GMT

Чтобы проверить SSL V2:

openssls_client -connect secureurl.com:443 -ssl2

Чтобы проверить SSL V3:

openssls_client -connect secureurl.com:443 –ssl3

Чтобы проверить TLS 1.0:

openssls_client -connect secureurl.com:443 –tls1

Чтобы проверить TLS 1.1:

openssls_client -connect secureurl.com:443 –tls1_1

Чтобы проверить TLS 1.2:

openssls_client -connect secureurl.com:443 –tls1_2

Если необходимо проверить, включен ли SSL V2 / V3 или нет, используйте приведенную выше команду. Если он включен, то вы получите сообщение «CONNECTED», в противном случае –сообщение «handshake failure».

openssls_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect secureurl:443

Если хотите знать, принимаются ли некоторые слабые шифры, то можете использовать приведенную выше команду.

Для этого необходимо задать шифр и URL-адрес. Если шифр будет принят, вы получите сообщение «CONNECTED», иначе – сообщение «handshake failure».

Надеюсь, что приведенные выше команды помогли вам узнать больше об использовании OpenSSL для управления SSL-сертификатами.

Данная публикация представляет собой перевод статьи «21 OpenSSL Examples to Help You in Real-World» , подготовленной дружной командой проекта Интернет-технологии.ру

Шифрование данных с помощью PHP openssl_encrypt () [Онлайн-демонстрация]

  • Наши услуги
    • Документооборот
      • Adobe® PDF Creation
      • Визуализация / сканирование документов
      • Сканирование OCR
      • PDF-файлы с возможностью поиска
    • Компьютеры и сети
      • Поддержка настольных приложений
      • Восстановление данных с жесткого диска
      • Услуги компьютерных сетей
    • Производительность
      • Разработка базы данных
      • Печать переменных данных
      • Разработка веб-сайтов
    • Показать все услуги
  • Технические новости
  • Обучение
    • Руководство по экологическим вычислениям
    • Переработка расходных материалов
    • Руководство системного администратора
      • Модернизируйте свою ИТ-инфраструктуру для карантинной удаленной работы
      • Простое решение для безопасного файлового сервера для SOHO
      • Средства контроля физической безопасности для защиты вашей сети
      • Простые шаги по защите беспроводной сети
      • Предотвратить кражу данных — отключить порты USB
      • Блокировать серверы вредоносных объявлений
      • Принудительное шифрование TLS для безопасной электронной почты
      • Что такое заголовок электронного сообщения?
      • Анализ заголовков сообщений электронной почты
      • Безопасные мобильные конечные точки с помощью политики мобильных устройств Microsoft 365
      • Смартфон украден? Wipe It — удаленно
      • Шифрование 7-Zip файлов
      • Горячее, горячее и холодное резервное копирование данных — комплексное аварийное восстановление
      • Ваш принтер — угроза нарушения безопасности?
      • Надежно ли отправляются ваши электронные письма?
      • Самошифрующиеся USB-накопители
    • Инструменты командной строки Windows (CMD)
    • Статьи, ссылки, инструкции
  • Онлайн-инструменты
    • Сетевые инструменты
      • Доступность домена
      • Поиск записи DNS
      • Сетевой калькулятор IPv4
      • Поиск WhoIs
      • Поиск MAC-адреса
      • Подробнее…
    • Калькуляторы / Генераторы
      • ASCII Art
      • Счет за электричество / Калькулятор энергии
      • Калькулятор ипотеки / амортизации
      • Время загрузки файла
      • SMS на код Морзе
      • Аудиотест кода Морзе
      • Возраст, ожидаемая продолжительность жизни, дата смерти
      • Права доступа к файлу chmod
      • Калькулятор широты / дальности
      • Преобразование римской цифры
      • Генератор случайных чисел
      • Подробнее …
    • Функции PHP
      • добавляет косые черты ()
      • склеп ()
      • htmlspecialchars ()
      • мкр5 ()
      • openssl_decrypt
      • openssl_encrypt
      • preg_match ()
      • str_word_count ()
      • стрлен ()
      • strip_tags ()
      • urlencode ()
      • Подробнее …

Шифрование и дешифрование файлов с помощью пароля с использованием OpenSSL

OpenSSL — это мощный набор инструментов криптографии, который можно использовать для шифрования файлов и сообщений.

Если вы хотите использовать один и тот же пароль как для шифрования открытого текста, так и для дешифрования зашифрованного текста, вы должны использовать метод, известный как алгоритм с симметричным ключом.

Из этой статьи вы узнаете, как зашифровать и расшифровать файлы и сообщения с паролем из командной строки Linux, используя OpenSSL.

Как: зашифровать файл

 $ openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc 
Опции Описание
openssl Инструмент командной строки OpenSSL
приложение Кодирование с помощью шифра
-aes-256-cbc Используемый шифр шифрования
-соль Повышает надежность шифрования
Задает входной файл
-вых Задает выходной файл.

Интересный факт: 256-битный AES — это то, что правительство США использует для шифрования информации на совершенно секретном уровне.

Предупреждение: Параметр -salt ВСЕГДА следует использовать, если ключ является производным от пароля.

Без опции -salt можно выполнять эффективные словарные атаки на пароль и атаковать данные, зашифрованные с помощью потокового шифрования.

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

Когда используется соль, первые восемь байтов зашифрованных данных зарезервированы для соли: она генерируется случайным образом при шифровании файла и считывается из зашифрованного файла при его расшифровке.

Как: расшифровать файл

 $ openssl enc -aes-256-cbc -d -in file.txt.enc -out file.txt 
Опции Описание
-d Расшифровывает данные
Задает данные для дешифрования
-вых Указывает файл, в который будут помещены расшифрованные данные.

Кодирование и декодирование Base64

Кодирование Base64 — это стандартный метод преобразования 8-битной двоичной информации в ограниченное подмножество символов ASCII.

Он необходим для безопасной транспортировки через системы электронной почты и другие системы, которые не являются безопасными для 8-битных файлов.

По умолчанию зашифрованный файл имеет двоичный формат.

Если вы собираетесь отправить его по электронной почте, IRC и т.д., вам необходимо сохранить зашифрованный файл в кодировке Base64.

Дельный Совет: Хотите защитить ваши личные данные? Создайте защищенный паролем ZIP-файл из командной строки Linux. Действительно просто! Читать дальше →

Чтобы зашифровать файл в кодировке Base64, вы должны добавить -a option:

 $ openssl enc -aes-256-cbc -salt -a -in файл.txt -out file.txt.enc 
Опция Описание
Сообщает OpenSSL, что зашифрованные данные находятся в коде Base64

Опция -a также должна быть добавлена ​​при расшифровке:

 $ openssl enc -aes-256-cbc -d -a -in file.txt.enc -out file.txt 

Неинтерактивное шифрование и дешифрование

Предупреждение: Поскольку пароль виден, эту форму следует использовать только там, где безопасность не важна.

По умолчанию пользователю предлагается ввести пароль.

Если вы создаете сценарий BASH, вы можете установить пароль неинтерактивным способом, используя опцию -k .

Дельный Совет: Нужно повысить безопасность системы Linux? Шифруйте DNS-трафик и получите защиту от DNS-спуфинга! Читать дальше →

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

Зашифруйте файл, используя предоставленный пароль:

 $ openssl enc -aes-256-cbc -salt -in файл.txt -out file.txt.enc -k ПРОЙТИ 

Расшифровать файл, используя предоставленный пароль:

 $ openssl enc -aes-256-cbc -d -in file.txt.enc -out file.txt -k ПРОЙТИ 

Руководство по PHP: функции OpenSSL

Этот модуль использует функции OpenSSL для генерации и проверки.
подписей и на опечатывание (шифрование) и вскрытие (расшифровку)
данные. OpenSSL предлагает множество функций, которых в настоящее время нет в этом модуле.
поддержка. Некоторые из них могут быть добавлены в будущем.

Чтобы использовать функции OpenSSL, вам необходимо установить пакет OpenSSL.
PHP между версиями 4.0.5 и 4.3.1 будет работать с OpenSSL> = 0.9.5.
Другие версии (PHP <= 4.0.4pl1 и> = 4.3.2) требуют OpenSSL> =
0.9.6.

Предупреждение

Вам настоятельно рекомендуется использовать самую последнюю версию OpenSSL,
в противном случае ваш веб-сервер может быть уязвим для атак.

Чтобы использовать поддержку OpenSSL PHP, вы также должны скомпилировать PHP —with-openssl [= DIR] .

Примечание для пользователей Win32:
Чтобы включить этот модуль в среде Windows, необходимо скопировать
libeay32.dll из папки DLL двоичного файла PHP / Win32
в папку SYSTEM32 на вашем компьютере с Windows. (Пример:
C: \ WINNT \ SYSTEM32
или C: \ WINDOWS \ SYSTEM32)

Дополнительно, если вы планируете использовать генерацию ключей и сертификат
функции подписи, вам нужно будет установить действующий openssl.cnf
в вашей системе. Начиная с PHP 4.3.0, мы включаем образец
файл конфигурации в openssl
папка нашего бинарного дистрибутива win32. Если вы используете PHP 4.2.0 или
позже и отсутствует файл, вы можете получить его из
домашнюю страницу OpenSSL или
загрузка версии PHP 4.3.0 и использование файла конфигурации из
там.

Примечание для пользователей Win32:
PHP будет искать openssl.cnf, используя
следующая логика:

  • переменная среды OPENSSL_CONF , если
    set, будет использоваться как путь (включая имя файла) конфигурации
    файл.

  • переменная среды SSLEAY_CONF , если
    set, будет использоваться как путь (включая имя файла) конфигурации
    файл.

  • Предполагается, что файл openssl.cnf
    находится в области сертификата по умолчанию, как было настроено в то время, когда
    была скомпилирована openssl DLL. Обычно это означает, что по умолчанию
    имя файла — c: \ usr \ local \ ssl \ openssl.cnf.

При установке вам необходимо решить, устанавливать ли
файл конфигурации по адресу c: \ usr \ local \ ssl \ openssl.cnf или
следует ли устанавливать его где-нибудь еще и использовать переменные среды
(возможно, для каждого виртуального хоста), чтобы найти файл конфигурации.
Обратите внимание, что можно изменить путь по умолчанию из сценария, используя
configargs функций, требующих
Файл конфигурации.

Это расширение не имеет директив конфигурации, определенных в php.ini.

Для некоторых функций openssl требуется ключ или сертификат.
параметр.PHP 4.0.5 и более ранние версии должны использовать ключ или сертификат.
ресурс , возвращенный одной из функций openssl_get_xxx.
Более поздние версии могут использовать один из следующих методов:

  • Сертификаты

    1. Ресурс X.509, возвращенный из
      openssl_x509_read ()

    2. Строка, имеющая формат
      файл: //path/to/cert.pem; названный файл должен
      содержат сертификат в кодировке PEM

    3. Строка, содержащая содержимое сертификата в кодировке PEM.

  • Открытые / частные ключи

    1. Ключевой ресурс, возвращенный из
      openssl_get_publickey () или
      openssl_get_privatekey ()

    2. Только для открытых ключей: сертификат X.509 ресурс

    3. Строка, имеющая формат
      file: //path/to/file.pem — названный файл должен
      содержать сертификат / закрытый ключ в кодировке PEM (он может содержать оба)

    4. Строка, содержащая содержимое сертификата / ключа в кодировке PEM

    5. Для закрытых ключей вы также можете использовать синтаксис
      массив ($ key, $ passphrase) где $ key представляет
      ключ, указанный с помощью файла: // или обозначения текстового содержимого выше, и
      $ passphrase представляет собой строку, содержащую кодовую фразу для этого
      закрытый ключ

При вызове функции, которая проверяет подпись / сертификат,
cainfo Параметр — это массив, содержащий файл и
имена каталогов, которые определяют расположение доверенных файлов CA.Если
каталог, то это должен быть правильно сформированный хеш
каталог, который будет использовать команда openssl .

Приведенные ниже константы определены этим расширением, и
будет доступно, только если в расширении есть
был скомпилирован в PHP или динамически загружен во время выполнения.

Функции S / MIME используют флаги, которые указываются с помощью
битовое поле, которое может включать одно или несколько из следующих значений:

Таблица 1.КОНСТАНТЫ PKCS7

Константа Описание
PKCS7_TEXT Добавляет заголовки текстового / обычного типа в зашифрованные / подписанные
сообщение. При расшифровке или проверке эти заголовки удаляются из
вывод — если расшифрованное или проверенное сообщение не относится к типу MIME
text / plain возникнет ошибка.
PKCS7_BINARY Обычно входное сообщение преобразуется в «канонический» формат
который эффективно использует CR и LF в качестве конца строки: как требуется
спецификация S / MIME.Когда эта опция присутствует, нет
перевод происходит. Это полезно при обработке двоичных данных, которые
может быть не в формате MIME.
PKCS7_NOINTERN При проверке сообщения сертификаты (если
любой), включенные в сообщение, обычно ищутся
сертификат подписи. С этой опцией только
сертификаты указанные в экстрактах
параметр openssl_pkcs7_verify () являются
используемый.Поставляемые сертификаты можно использовать как
однако ненадежные центры сертификации.
PKCS7_NOVERIFY Не проверять сертификат подписавшего подписанного
сообщение.
PKCS7_NOCHAIN ​​ Не выполняйте последовательную проверку подписывающих сертификатов: то есть
не используйте сертификаты в подписанном сообщении как ненадежные центры сертификации.
PKCS7_NOCERTS При подписании сообщения сертификат подписывающей стороны обычно
Включено — при данной опции исключено.Это уменьшит
размер подписанного сообщения, но у проверяющего должна быть копия
подписывающий сертификат доступен локально (передается с использованием
экстракторы от до
openssl_pkcs7_verify () например).
PKCS7_NOATTR Обычно, когда сообщение подписано, набор атрибутов
включены, которые включают время подписи и поддерживаемые симметричные
алгоритмы. В этот вариант они не включены.
PKCS7_DETACHED При подписании сообщения используйте подпись открытым текстом с MIME
введите multipart / signed. Это по умолчанию
если вы не укажете никаких флагов от до
openssl_pkcs7_sign () .
Если вы отключите эту опцию, сообщение будет подписано с использованием
непрозрачная подпись, более устойчивая к переводу с помощью почтовых реле
но не может быть прочитан почтовыми агентами, не поддерживающими S / MIME.
PKCS7_NOSIGS Не пытайтесь проверять подписи в сообщении

Примечание: Эти константы были добавлены в 4.0.6.

Примечание: Эти константы были добавлены в 5.0.0.

OpenSSL — ArchWiki

OpenSSL — это реализация протоколов SSL и TLS с открытым исходным кодом, которая максимально гибка. Он поддерживается на различных платформах, включая BSD, Linux, OpenVMS, Solaris и Windows.

Предупреждение: Совместное исследование использования протокола OpenSSL, опубликованное в мае 2015 года, показало дальнейшие значительные риски для SSL-соединений; назвали атаку «Тупик». См. Https://weakdh.org/ для результатов и https://weakdh.org/sysadmin.html для предлагаемых изменений конфигурации на стороне сервера.

Установка

openssl установлен по умолчанию в Arch Linux (как зависимость от coreutils).

Для разработчиков доступны различные привязки библиотеки OpenSSL:

Конфигурация

В Arch Linux OPENSSLDIR — это / etc / ssl .

Файл конфигурации OpenSSL, обычно помещаемый в /etc/ssl/openssl.cnf , на первый взгляд может показаться сложным. Помните, что переменные могут быть расширены в назначениях, подобно тому, как работают сценарии оболочки. Подробное описание формата файла конфигурации см. В config (5ssl).

требуется раздел

Настройки, связанные с генерацией ключей, запросов и самозаверяющих сертификатов.

Раздел req отвечает за запросы DN. Общее заблуждение — это приглашение Common Name (CN), которое предполагает, что в качестве значения должно быть указано собственное имя пользователя.Сертификаты конечного пользователя должны иметь имя хоста машины как CN, тогда как CA должен иметь , а не , иметь действительный TLD, так что между возможными комбинациями CN сертифицированных конечных пользователей и сертификатов CA не должно быть никаких шансов. существует совпадение, которое может быть неверно истолковано некоторым программным обеспечением как означающее, что сертификат конечного пользователя является самоподписанным. Некоторые сертификаты CA даже не имеют CN, например Equifax:

 $ openssl x509 -subject -noout 
 subject = / C = US / O = Equifax / OU = Equifax Secure Certificate Authority 

Использование

В этом разделе предполагается, что вы прочитали Безопасность транспортного уровня # Получение сертификата.

Создать закрытый ключ RSA

С genpkey (1ssl), который заменяет genrsa согласно openssl (1ssl):

 $ openssl genpkey -алгоритм RSA -pkeyopt rsa_keygen_bits:  размер ключа  -выход  файл 
 

Если требуется зашифрованный ключ, используйте параметр -aes-256-cbc .

Создать запрос на подпись сертификата

Использовать req (1ssl):

 $ openssl req -new -sha256 -key  private_key  -out  имя_файла 
 

Создать самоподписанный сертификат

 $ openssl req -key  private_key  -x509 -new -days  days  -out  filename 
 

Создать самозаверяющий сертификат с закрытым ключом одной командой

Вы можете объединить указанную выше команду в OpenSSL в одну, что может быть удобно в некоторых случаях:

 $ openssl req -x509 -newkey rsa: 4096 -days  days  -keyout  key_filename  -out  cert_filename 
 

Создание параметров Диффи – Хеллмана

См. Обмен ключами Диффи – Хеллмана для получения дополнительной информации.

 $ openssl dhparam -out  имя_файла   2048 
 

Совет: Чтобы ускорить генерацию, особенно если не на высокопроизводительном оборудовании, добавьте опцию -dsaparam [1].

Устранение неполадок

«плохая расшифровка» при расшифровке

OpenSSL 1.1.0 изменил алгоритм дайджеста по умолчанию для команд dgst и enc с MD5 на SHA256. [2]

Поэтому, если файл был зашифрован с использованием OpenSSL 1.0.2 или более ранней версии, попытка расшифровать его с помощью последней версии может привести к ошибке, например:

Ошибка

: 06065064: подпрограммы цифрового конверта: EVP_DecryptFinal_ex: плохая расшифровка: crypto / evp / evp_enc.с: 540
 

Установка опции -md md5 должна решить проблему:

 $ openssl enc -d -md md5 -in зашифровано -out расшифровано
 

См. Также

Самые распространенные команды OpenSSL

Одним из наиболее универсальных инструментов SSL является OpenSSL, который представляет собой реализацию протокола SSL с открытым исходным кодом. Существуют версии OpenSSL почти для каждой платформы, включая Windows, Linux и Mac OS X. OpenSSL обычно используется для создания CSR и закрытого ключа для многих различных платформ, включая Apache.Однако он также имеет сотни различных функций, которые позволяют просматривать детали CSR или сертификата, сравнивать хэш MD5 сертификата и закрытого ключа (чтобы убедиться, что они совпадают), проверять правильность установки сертификата на любом веб-сайте. , и преобразовать сертификат в другой формат. Скомпилированную версию OpenSSL для Windows можно найти здесь.

Сравнить сертификаты SSL

Если вы не хотите возиться с OpenSSL, вы можете сделать то же самое с нашими инструментами для сертификатов SSL.Ниже мы перечислили наиболее распространенные команды OpenSSL и их использование:

Общие команды OpenSSL

Эти команды позволяют создавать CSR, сертификаты, закрытые ключи и выполнять другие разные задачи.

  • Создать новый закрытый ключ и запрос на подпись сертификата
     openssl req -out CSR.csr -new -newkey rsa: 2048 -nodes -keyout privateKey.key 
  • Создание самозаверяющего сертификата (дополнительные сведения см. В разделе «Как создать и установить самоподписанный сертификат Apache»)
     openssl req -x509 -sha256 -nodes -days 365 -newkey rsa: 2048 -keyout privateKey.ключ -out certificate.crt 
  • Создать запрос на подпись сертификата (CSR) для существующего закрытого ключа
     openssl req -out CSR.csr -key privateKey.key -new 
  • Создать запрос на подпись сертификата на основе существующего сертификата
     openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key 
  • Удалить парольную фразу из закрытого ключа
     openssl rsa -in privateKey.pem -out newPrivateKey.pem 

Проверка с использованием OpenSSL

Если вам нужно проверить информацию в сертификате, CSR или закрытом ключе, используйте эти команды. Вы также можете проверить CSR и сертификаты с помощью наших онлайн-инструментов.

  • Проверить запрос на подпись сертификата (CSR)
     openssl req -text -noout -verify -in CSR.csr 
  • Проверить закрытый ключ
     openssl rsa -in privateKey.ключ - проверка 
  • Проверить справку
     openssl x509 -в certificate.crt -text -noout 
  • Проверить файл PKCS # 12 (.pfx или .p12)
     openssl pkcs12 -info -in keyStore.p12 

Отладка с использованием OpenSSL

Если вы получаете сообщение об ошибке, что частный не соответствует сертификату или что сертификат, который вы установили на сайт, не является доверенным, попробуйте одну из этих команд.Если вы пытаетесь проверить правильность установки SSL-сертификата, не забудьте проверить SSL Checker.

  • Проверьте хэш MD5 открытого ключа, чтобы убедиться, что он совпадает с тем, что находится в CSR или закрытом ключе
     openssl x509 -noout -modulus -in certificate.crt | openssl md5 
    openssl rsa -noout -modulus -in privateKey.key | openssl md5
    openssl req -noout -modulus -in CSR.csr | openssl md5
  • Проверьте соединение SSL.Все сертификаты (включая промежуточные) должны отображаться
     openssl s_client -connect www.paypal.com:443 

Преобразование с использованием OpenSSL

Эти команды позволяют преобразовывать сертификаты и ключи в различные форматы, чтобы сделать их совместимыми с определенными типами серверов или программного обеспечения. Например, вы можете преобразовать обычный файл PEM, который будет работать с Apache, в файл PFX (PKCS # 12) и использовать его с Tomcat или IIS. Используйте наш Конвертер SSL, чтобы конвертировать сертификаты, не вмешиваясь в OpenSSL.

  • Преобразование файла DER (.crt .cer .der) в PEM
     openssl x509 -inform der -in certificate.cer -out certificate.pem 
  • Преобразование файла PEM в DER
     openssl x509 -outform der -in certificate.pem -out certificate.der 
  • Преобразование файла PKCS # 12 ( .pfx .p12 ), содержащего закрытый ключ и сертификаты, в PEM
     openssl pkcs12 -в хранилище ключей.pfx -out keyStore.pem -nodes 

    Вы можете добавить -nocerts, чтобы выводить только закрытый ключ, или добавить -nokeys, чтобы выводить только сертификаты.

  • Преобразование файла сертификата PEM и закрытого ключа в PKCS # 12 (.pfx .p12)
     openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt 

Сравнить сертификаты SSL

Сообщение отправлено вс, 13 января 2008 г.

OpenSSL - полезные команды

Последнее обновление: 14.06.2018

Как использовать OpenSSL?

OpenSSL - это настоящий швейцарский армейский нож для управления сертификатами, и, как и в случае с настоящим McCoy, вы тратите больше времени на извлечение пилки для ногтей, когда вам действительно нужна надувная ножовка.Ниже вы найдете обзор наиболее часто используемых команд.

Запросы сертификатов и генерация ключей

Обычно, когда вы заказываете новый сертификат SSL, вы должны сгенерировать CSR или запрос на подпись сертификата с новым закрытым ключом :

 openssl req -sha256 -nodes -newkey rsa: 2048 -keyout www.server.com.key -out www.server.com.csr 

В качестве альтернативы можно использовать Kinamo CSR Generator для легкого создания CSR.

Создать новый запрос сертификата с использованием существующего закрытого ключа:

 openssl req -new -sha256 -key www.server.com.key -out www.server.com.csr 

Создать запрос сертификата, начиная с существующего сертификата:

 openssl x509 -x509toreq -в www.server.com.crt -out www.server.com.csr -signkey www.server.com.key 

Создать новый закрытый ключ RSA:

 openssl genrsa -out www.server.com.key 2048 

Зашифруйте закрытый ключ парольной фразой:

 openssl rsa -в www.server.com.key -out www.server.com.key -des3 

Удалить парольную фразу из зашифрованного закрытого ключа:

 openssl rsa - на www.server.com.key -out www.server.com.key 

Создать новый закрытый ключ ECC:

 openssl ecparam -out server.key -name prime256v1 -genkey 

Создать самозаверяющий сертификат

Создайте самоподписанный сертификат для целей тестирования со сроком действия один год вместе с новым 2048-битным ключом:

 openssl req -x509 -newkey rsa: 2048 -nodes -keyout www.server.com.key -out www.server.com.crt -days 365 

Просмотр и проверка сертификатов

Проверить и отобразить запрос сертификата (CSR):

 openssl req -noout -text -verify -in www.server.com.csr 

Проверить и отобразить пару ключей:

 openssl rsa -noout -text -check -in www.server.com.key 

Просмотр сертификата в кодировке PEM:

 openssl x509 -noout -text -in www.server.com.crt 

Просмотр сертификата, закодированного в формате PKCS # 7:

 openssl pkcs7 -print_certs -in www.server.com.p7b 

Просмотр пары сертификатов и ключей, закодированных в формате PKCS # 12:

 openssl pkcs12 -info -in www.server.com.pfx 

Проверьте соединение SSL и отобразите все сертификаты в цепочке:

 openssl s_client -connect www.server.com:443 

Kinamo SSL Tester даст те же результаты в удобочитаемом формате.

Управляет тем, имеют ли сертификат, запрос сертификата и закрытый ключ один и тот же открытый ключ:

 openssl x509 -noout -modulus www.server.com.crt | openssl sha256
openssl req -noout -modulus www.server.com.csr | openssl sha256
openssl rsa -noout -modulus www.server.com.key | openssl sha256 

Проверить сертификат и его промежуточную цепочку сертификатов для целей веб-сервера:

 openssl verify -purpose sslserver -CAfile certificatebundle.pem -verbose www.server.com.crt 

Преобразование сертификата

Преобразование файлов PKCS # 12 (.pfx .p12, обычно используется в Microsoft Windows) с закрытым ключом и сертификатом в PEM (обычно используется в Linux):

 openssl pkcs12 -nodes -in www.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *